如何从令牌创建PlusService的实例

时间:2013-11-25 08:31:37

标签: c# java google-data-api

从用户那里获得oath2.0访问令牌和刷新令牌后,如何使用它们在C#和java中创建PlusService的实例?
目前我正在使用BaseClientService.Initializer,但这仅适用于匿名应用程序令牌。 我想使用从OAUTH2进程获得的OAuth2Parameters对象创建加号服务的实例。

1 个答案:

答案 0 :(得分:3)

OAuth2Parameters保存OATH2进程中最后一步的标记

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-beta开始,不推荐使用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);
    }
}