为什么Google Oauth2在通过移动应用程序进行身份验证时拒绝客户端id ?



我们有一个多面应用程序遇到一些Google OAuth问题。有一个基于java的API,以及一个React前端和React Native移动应用程序。

一段时间以来,我们已经成功地使用OAuth2来允许谷歌用户通过React应用程序登录。我们使用离线/代码方法,所以我们首先请求一个授权码,它被发送到我们的API,然后通过谷歌服务器交换令牌。API负责额外的检查和帐户设置。

我们在移动应用程序(React native)中遇到了问题。应用程序"似乎"行为正确,因为它正在获得授权代码,然而,当我们将此发送到API并且API试图将代码交换为令牌时,我们得到的响应是

{
"error": "unauthorized_client",
"error_description": "Unauthorized"
}

我们可以在日志中看到,请求看起来很好。如果我们比较这个失败请求的post主体与一个正常请求的主体,我们可以看到除了授权代码之外,内容是相同的。这是意料之中的。所以unauthorized_client错误有点误导人。

在Google Oauth方面,Android凭据和Web凭据(API使用)都在同一个项目下,所以我的理解是,虽然它们有不同的客户端id,但应该不会有问题,因为Google Oauth支持跨客户端身份。

有没有人遇到过类似的情况,知道我们的问题到底是什么?

如果您在web应用程序上创建刷新令牌,然后尝试在已安装的应用程序上使用它,则会发生问题,因为该客户端id不是用于创建刷新令牌的客户端id。

然而,我知道有一个例外。移动应用程序客户端可以在同一项目中使用其他客户端类型创建的令牌,但这不能以其他方式工作。Web和已安装的客户端不能使用移动应用程序客户端创建的令牌。移动客户端中有一些东西是web和已安装客户端中没有的。

因此unauthorized_client表示该客户端id未被用户授权。

相关内容

  • 没有找到相关文章

最新更新