我想实现这个问题中描述的流程:
Authenticating with OAuth2 for an app *and* a website
此处描述了针对此要求的Google解决方案:
https://developers.google.com/identity/protocols/CrossClientAuth#offlineAccess
我遵循了本指南但不幸的是,当我在后端使用授权代码来访问令牌并从google刷新令牌时,谷歌会抛出此错误:
{
"error": "invalid_request",
"error_description": "Missing parameter: redirect_uri"
}
redirect_uri
对于这种情况没有意义,因为客户端是android。
还有一些建议,他们说使用“postmessage”作为重定向uri或使用http://localhost作为重定向uri或在谷歌应用控制台中的重定向URI中添加服务器地址,但没有一个适用于此流程。
答案 0 :(得分:1)
我花了很多时间来解决这个问题,这个工具(https://developers.google.com/oauthplayground)已经由谷歌提供让我更加想念铅因为它是专为主要的网络流而设计的,并且这个工具生成的访问令牌是不同的需要重定向uri。 (即使使用承载令牌类型并使用客户端ID和秘密) 毕竟我用空字符串(“”)作为重定向网址,最后我成功通过服务器端获取访问令牌。
答案 1 :(得分:1)
空白应该可以使用,或者您也可以使用已安装的应用重定向URI:' urn:ietf:wg:oauth:2.0:oob' - 见https://developers.google.com/identity/protocols/OAuth2InstalledApp
答案 2 :(得分:1)
在深入调查AppAuth库(https://openid.github.io/AppAuth-iOS/和https://openid.github.io/AppAuth-Android/之前花了两天时间研究了stackoverflow和google上的几乎所有问题,最后找到了答案。
所以,我发现了两条规则:
redirect_uri
应该是以下之一:
bundle_id
或package_name
+ :/
或://
+ *your_path*
(例如com.example.myapp://google_auth
)client_id
反向DNS表单+ :/
或://
+ *your_path*
(例如com.googleusercontent.apps.*account_id*:/my_path
)redirect_uri
)和授权代码交换请求(https://accounts.google.com/o/oauth2/v2/auth
)中的 https://www.googleapis.com/oauth2/v4/token
必须完全相同