webapi中的Google ExchangeCodeForTokenAsync invalid_grant

时间:2016-05-14 07:53:32

标签: asp.net-web-api oauth-2.0 google-login google-oauth2 google-oauth-.net-client

我已经实现了来自GoogleAuthorizationCodeFlowgoogle api client dotnet方案和教程,以便从客户端发送到服务器的代码中获取令牌作为代码。但是当我打电话给flow.ExchangeCodeForTokenAsync时,我收到以下错误:

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

我看过google authorization invalid_grantgusclass oauth 2 using google dotnet api client libraries,但他们没有帮助我和。我认为它必须非常简单,但我不知道为什么它不起作用。 对于客户端,我使用了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;
        }

问题是什么?

2 个答案:

答案 0 :(得分:1)

Github我发现我必须使用客户端的<script> function clicked() { if(some_condition == true){ return; } alert("clicked me"); } </script> 并使用

Token

创建我的UserCredential对象。

答案 1 :(得分:0)

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

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

您必须添加网址。 (&#34; https://localhost:44301/&#34)

我的代码:

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

授权重定向URI

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