【问题标题】:How to create an instance of the PlusService from tokens如何从令牌创建 PlusService 的实例
【发布时间】:2013-11-25 08:31:36
【问题描述】:

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

【问题讨论】:

    标签: c# java google-data-api


    【解决方案1】:

    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);
        }
    }
    

    【讨论】:

    猜你喜欢
    • 2019-11-23
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2014-12-28
    • 2021-09-21
    • 1970-01-01
    • 2019-01-20
    • 2016-09-12
    相关资源
    最近更新 更多