1

我已经从google api 客户端 dotnet和教程实现了 GoogleAuthorizationCodeFlow场景,以从我的客户端作为代码发送到服务器的内容中获取令牌。但是当我打电话时,我收到以下错误:flow.ExchangeCodeForTokenAsync

{"Error:\"invalid_grant\", Description:\"\", Uri:\"\""}

我使用 google dotnet api 客户端库阅读了google 授权 invalid_grantgusclass oauth 2,但它们并没有帮助我。我认为它一定很简单,但我不知道为什么它不起作用。对于客户端,我使用了 Satellizer,这是我的服务器代码:

public bool PostExchangeAccessToken(GoogleClientAccessCode code)
        {
            string[] SCOPES = { "email" };
            IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
            {
                ClientSecrets = new ClientSecrets()
                {
                    ClientSecret = "******",
                    ClientId = "********.apps.googleusercontent.com"
                },
                Scopes = SCOPES
            });
            try
            {
                TokenResponse token;
                token = flow.ExchangeCodeForTokenAsync("*****@gmail.com", Newtonsoft.Json.JsonConvert.SerializeObject(code), "https://localhost:44301/",
                                CancellationToken.None).Result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return true;
        }

问题是什么?

4

2 回答 2

1

Github上我发现我必须使用Token来自客户端并使用

GoogleAuthorizationCodeFlow.Initializer() 

创建我的 UserCredential 对象。

于 2016-07-02T11:12:41.267 回答
0

您可以检查您的谷歌开发者控制台设置。(授权重定向 URI)

凭据 => OAuth 2.0 客户端 ID => 您的应用程序设置 => 授权重定向 URI

您必须添加网址。(" https://localhost:44301/ ")

我的代码:

 flow.ExchangeCodeForTokenAsync("me", authCode, redirectUri, CancellationToken.None).Result;

授权的重定向 URI

用于来自 Web 服务器的请求。这是用户在通过 Google 进行身份验证后被重定向到的应用程序中的路径。该路径将附加访问授权码。必须有协议。不能包含 URL 片段或相对路径。不能是公共 IP 地址。

于 2016-06-06T09:15:40.910 回答