我已经实现了来自GoogleAuthorizationCodeFlow的google api client dotnet方案和教程,以便从客户端发送到服务器的代码中获取令牌作为代码。但是当我打电话给flow.ExchangeCodeForTokenAsync
时,我收到以下错误:
{"Error:\"invalid_grant\", Description:\"\", Uri:\"\""}
我看过google authorization invalid_grant和gusclass 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;
}
问题是什么?
答案 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地址。