2013-11-25 40 views
1

從用戶那裏獲得oath2.0訪問令牌和刷新令牌後,如何使用它們在C#和java中創建PlusService實例?
目前我正在使用BaseClientService.Initializer,但這隻適用於匿名應用程序令牌。 我想使用從OAUTH2進程獲得的OAuth2Parameters對象創建加服務的實例。如何從令牌創建PlusService實例

回答

3

OAuth2Parameters舉行的最後一步的令牌在OATH2 proccess

OAuth2Parameters parameters = new OAuth2Parameters() 
        { 
         ClientId = CLIENT_ID, 
         ClientSecret = CLIENT_SECRET, 
         AccessCode = token, 
         RedirectUri = REDIRECT_URI //needed because of a bug 
        }; 
        OAuthUtil.GetAccessToken(Request.Url.Query, parameters);      
        BaseClientService.Initializer init = new BaseClientService.Initializer { Authenticator = new AuthenticatorImp(parameters)}; 
        PlusService service = new PlusService(init); 
        Person me = service.People.Get("me").Execute(); 

有了自己的實現認證

public class AuthenticatorImp : Google.Apis.Authentication.IAuthenticator 
{ 
    OAuth2Parameters parameters; 
    public AuthenticatorImp(OAuth2Parameters parameters) 
    { 
     this.parameters = parameters; 
    } 
    /// <summary> 
    /// Takes an existing httpwebrequest and modifies its headers according to 
    /// the authentication system used. 
    /// </summary> 
    /// <param name="request"></param> 
    /// <returns></returns> 
    public void ApplyAuthenticationToRequest(HttpWebRequest request) 
    { 
     if (parameters.TokenType == "Bearer" && parameters.TokenExpiry < DateTime.Now) 
     { 
      OAuthUtil.RefreshAccessToken(parameters); 
     } 
     request.Headers.Add("Authorization: Bearer " + parameters.AccessToken); 
    } 
} 

由於V1.7.0-βGoogle.Apis.Authentication的。 IAuthenticator不推薦使用HttpClientInitializer。

public class ConfigurableHttpClientInitializer : IConfigurableHttpClientInitializer 
{ 
    OAuth2Parameters parameters; 
    public ConfigurableHttpClientInitializer(OAuth2Parameters parameters) { 
     this.parameters = parameters; 
    } 
    /// <summary> Initializes an Http client after it was created. </summary> 
    public void Initialize(ConfigurableHttpClient httpClient) 
    { 
     if (parameters.TokenType == "Bearer" && parameters.TokenExpiry < DateTime.Now) 
     { 
      OAuthUtil.RefreshAccessToken(parameters); 
     } 
     httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + parameters.AccessToken); 
    } 
} 
+0

爲什麼這個問題是在一個月前發佈的,當時Google明確表示所有的新API都不使用這種方法:https://developers.google.com/gdata/docs/auth/oauth ?CSW = 1 – AndroidDev