001    package com.nimbusds.oauth2.sdk.token;
002    
003    
004    import net.minidev.json.JSONObject;
005    
006    import com.nimbusds.oauth2.sdk.id.Identifier;
007    
008    
009    /**
010     * The base abstract class for access and refresh tokens.
011     * 
012     * <p>Related specifications:
013     *
014     * <ul>
015     *     <li>OAuth 2.0 (RFC 6749), sections 1.4 and 1.5.
016     * </ul>
017     *
018     * @author Vladimir Dzhuvinov
019     */
020    public abstract class Token extends Identifier {
021    
022    
023            /**
024             * Creates a new token with the specified value.
025             *
026             * @param value The token value. Must not be {@code null} or empty 
027             *              string.
028             */
029            protected Token(final String value) {
030    
031                    super(value);
032            }
033    
034    
035            /**
036             * Creates a new token with a randomly generated value of the specified
037             * length. The value will be made up of mixed-case alphanumeric ASCII 
038             * characters.
039             *
040             * @param length The number of characters. Must be a positive integer.
041             */
042            protected Token(final int length) {
043            
044                    super(length);
045            }
046            
047            
048            /**
049             * Creates a new token with a randomly generated value. The value will 
050             * be made up of 32 mixed-case alphanumeric ASCII characters.
051             */
052            protected Token() {
053            
054                    super();
055            }
056    
057    
058            /**
059             * Returns the token parameters as a JSON object, as required for the
060             * composition of an access token response. See OAuth 2.0 (RFC 6749), 
061             * section 5.1.
062             *
063             * <p>Note that JSONObject implements {@code Map<String,Object>}.
064             *
065             * <p>Example:
066             *
067             * <pre>
068             * {
069             *   "access_token"      : "2YotnFZFEjr1zCsicMWpAA",
070             *   "token_type"        : "example",
071             *   "expires_in"        : 3600,
072             *   "example_parameter" : "example_value"
073             * }
074             * </pre>
075             *
076             * @return The token parameters as a JSON object.
077             */
078            public abstract JSONObject toJSONObject();
079    }