com.google.api.client.auth.oauth2
Class AuthorizationCodeFlow

java.lang.Object
  extended by com.google.api.client.auth.oauth2.AuthorizationCodeFlow

public class AuthorizationCodeFlow
extends Object

Thread-safe OAuth 2.0 authorization code flow that manages and persists end-user credentials.

This is designed to simplify the flow in which an end-user authorizes the application to access their protected data, and then the application has access to their data based on an access token and a refresh token to refresh that access token when it expires.

The first step is to call loadCredential(String) based on the known user ID to check if the end-user's credentials are already known. If not, call newAuthorizationUrl() and direct the end-user's browser to an authorization page. The web browser will then redirect to the redirect URL with a "code" query parameter which can then be used to request an access token using newTokenRequest(String). Finally, use createAndStoreCredential(TokenResponse, String) to store and obtain a credential for accessing protected resources.

Since:
1.7
Author:
Yaniv Inbar

Nested Class Summary
static class AuthorizationCodeFlow.Builder
          Authorization code flow builder.
 
Constructor Summary
protected AuthorizationCodeFlow(Credential.AccessMethod method, HttpTransport transport, JsonFactory jsonFactory, GenericUrl tokenServerUrl, HttpExecuteInterceptor clientAuthentication, String clientId, String authorizationServerEncodedUrl, CredentialStore credentialStore, HttpRequestInitializer requestInitializer, String scopes)
           
 
Method Summary
 Credential createAndStoreCredential(TokenResponse response, String userId)
          Creates a new credential for the given user ID based on the given token response and store in the credential store.
 String getAuthorizationServerEncodedUrl()
          Returns the authorization server encoded URL.
 HttpExecuteInterceptor getClientAuthentication()
          Returns the client authentication or null for none (see TokenRequest.setClientAuthentication(HttpExecuteInterceptor)).
 String getClientId()
          Returns the client identifier.
 CredentialStore getCredentialStore()
          Returns the credential persistence store or null for none.
 JsonFactory getJsonFactory()
          Returns the JSON factory.
 Credential.AccessMethod getMethod()
          Returns the method of presenting the access token to the resource server (for example BearerToken.authorizationHeaderAccessMethod()).
 HttpRequestInitializer getRequestInitializer()
          Returns the HTTP request initializer or null for none.
 String getScopes()
          Returns the space-separated list of scopes or null for none.
 String getTokenServerEncodedUrl()
          Returns the token server encoded URL.
 HttpTransport getTransport()
          Returns the HTTP transport.
 Credential loadCredential(String userId)
          Loads the credential of the given user ID from the credential store.
 AuthorizationCodeRequestUrl newAuthorizationUrl()
          Returns a new instance of an authorization code request URL.
 AuthorizationCodeTokenRequest newTokenRequest(String authorizationCode)
          Returns a new instance of an authorization code token request based on the given authorization code.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

AuthorizationCodeFlow

protected AuthorizationCodeFlow(Credential.AccessMethod method,
                                HttpTransport transport,
                                JsonFactory jsonFactory,
                                GenericUrl tokenServerUrl,
                                HttpExecuteInterceptor clientAuthentication,
                                String clientId,
                                String authorizationServerEncodedUrl,
                                CredentialStore credentialStore,
                                HttpRequestInitializer requestInitializer,
                                String scopes)
Parameters:
method - method of presenting the access token to the resource server (for example BearerToken.authorizationHeaderAccessMethod())
transport - HTTP transport
jsonFactory - JSON factory
tokenServerUrl - token server URL
clientAuthentication - client authentication or null for none (see TokenRequest.setClientAuthentication(HttpExecuteInterceptor))
clientId - client identifier
authorizationServerEncodedUrl - authorization server encoded URL
credentialStore - credential persistence store or null for none
requestInitializer - HTTP request initializer or null for none
scopes - space-separated list of scopes or null for none
Method Detail

newAuthorizationUrl

public AuthorizationCodeRequestUrl newAuthorizationUrl()
Returns a new instance of an authorization code request URL.

This is a builder for an authorization web page to allow the end user to authorize the application to access their protected resources and that returns an authorization code. It uses the getAuthorizationServerEncodedUrl(), getClientId(), and getScopes(). Sample usage:

  private AuthorizationCodeFlow flow;

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String url = flow.newAuthorizationUrl().setState("xyz")
        .setRedirectUri("https://client.example.com/rd").build();
    response.sendRedirect(url);
  }
 


newTokenRequest

public AuthorizationCodeTokenRequest newTokenRequest(String authorizationCode)
Returns a new instance of an authorization code token request based on the given authorization code.

This is used to make a request for an access token using the authorization code. It uses getTransport(), getJsonFactory(), getTokenServerEncodedUrl(), getClientAuthentication(), getRequestInitializer(), and getScopes().

  static TokenResponse requestAccessToken(AuthorizationCodeFlow flow, String code)
      throws IOException, TokenResponseException {
    return flow.newTokenRequest(code).setRedirectUri("https://client.example.com/rd").execute();
  }
 

Parameters:
authorizationCode - authorization code.

createAndStoreCredential

public Credential createAndStoreCredential(TokenResponse response,
                                           String userId)
Creates a new credential for the given user ID based on the given token response and store in the credential store.

Parameters:
response - token response
userId - user ID or null if not using a persisted credential store
Returns:
newly created credential

loadCredential

public Credential loadCredential(String userId)
Loads the credential of the given user ID from the credential store.

Parameters:
userId - user ID or null if not using a persisted credential store
Returns:
credential found in the credential store of the given user ID or null for none found

getMethod

public final Credential.AccessMethod getMethod()
Returns the method of presenting the access token to the resource server (for example BearerToken.authorizationHeaderAccessMethod()).


getTransport

public final HttpTransport getTransport()
Returns the HTTP transport.


getJsonFactory

public final JsonFactory getJsonFactory()
Returns the JSON factory.


getTokenServerEncodedUrl

public final String getTokenServerEncodedUrl()
Returns the token server encoded URL.


getClientAuthentication

public final HttpExecuteInterceptor getClientAuthentication()
Returns the client authentication or null for none (see TokenRequest.setClientAuthentication(HttpExecuteInterceptor)).


getClientId

public final String getClientId()
Returns the client identifier.


getAuthorizationServerEncodedUrl

public final String getAuthorizationServerEncodedUrl()
Returns the authorization server encoded URL.


getCredentialStore

public final CredentialStore getCredentialStore()
Returns the credential persistence store or null for none.


getRequestInitializer

public final HttpRequestInitializer getRequestInitializer()
Returns the HTTP request initializer or null for none.


getScopes

public final String getScopes()
Returns the space-separated list of scopes or null for none.



Copyright © 2011-2012 Google. All Rights Reserved.