适用于服务器端应用程序的Google登录:将有效的授权代码交换为令牌-错误的请求错误(错误:redirect_uri_mismatch)

时间:2019-04-08 02:04:06

标签: google-api google-signin google-openid google-identity googlesigninapi

我正在尝试为我的应用程序实现Google登录(https://developers.google.com/identity/sign-in/web/server-side-flow)。我已经成功地获得了授权码,但是当我尝试将其交换为令牌时,会收到以下响应。

错误响应:

{
    "error": "redirect_uri_mismatch",
    "error_description": "Bad Request"
}

我已经尝试将许多重定向URL添加到Google控制台,但是此问题仍然存在。请参阅下面的重定向URL。

http://localhost:49188/oauthcallback.aspx
https://localhost:49188/oauthcallback.aspx
https://localhost:49188/oauthcallback.aspx
http://localhost/oauthcallback.aspx
https://localhost/oauthcallback.aspx
http://localhost/oauthcallback.aspx
https://localhost/oauthcallback.aspx

我尝试使用不同的令牌终结点进行多个请求,但不能解决此问题。

第一个端点

POST URI: www.googleapis.com/oauth2/v4/token 
Content-Type: application/x-www-form-urlencoded

code={code}&
client_id={xxx}.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://localhost:49188/oauthcallback.aspx&
grant_type=authorization_code

第二个端点:

POST URI: https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded

code={code}&
client_id={xxx}.apps.googleusercontent.com&
client_secret={client_secret}&
redirect_uri=https://localhost:49188/oauthcallback.aspx&
grant_type=authorization_code

我希望获得正确的令牌响应,但请参阅下面的JSON,因为它是我得到的响应。

预期的响应:

{
  "access_token":"1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in":3920,
  "token_type":"Bearer",
  "refresh_token":"1/xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

错误响应

{
    "error": "redirect_uri_mismatch",
    "error_description": "Bad Request"
}

1 个答案:

答案 0 :(得分:0)

@ user2705223您已经强调了一个重点。因此,如果您使用ux_mode =“ popup”或默认值,则JS SDK似乎将域主机添加为默认重定向URL,而不是初始化时指定的URL,这很奇怪。