一次身份验证代码验证在服务器端失败 - Android和PHP(Laravel框架)



我们正在开发一个Android应用程序和Web应用程序,以Laravel PHP框架作为后端,我们的应用程序允许谷歌登录。网络应用程序和Android应用程序都在谷歌应用程序控制台上注册。谷歌登录适用于网络应用程序。在Android中,我能够使用以下范围获得一次性身份验证

SCOPE = "oauth2:server:client_id:" + SERVER_CLIENT_ID + ":api_scope:" + scopeString;

scopeString 是 "https://www.googleapis.com/auth/plus.login"。我将这个一次性身份验证发送到我的服务器,它使用这个一次性身份验证代码从谷歌获取访问令牌。在后端,他们使用以下代码来获取访问令牌

$googleService->requestAccessToken($code)
为$googleService设置的客户端 ID 和客户端密钥

是在 Google 应用控制台上注册的 Web 应用程序的客户端 ID 和客户端密钥。现在的问题是服务器无法从谷歌获取访问令牌,并且它总是被重定向并要求再次登录。重定向 URL 是 Web 应用程序的 URL。当从Web应用程序发送一次性身份验证代码时,我们的服务器能够获得访问令牌,但是当从Android发送时会失败。为什么它不适用于Android,但它适用于Web应用程序?我们应该在哪里使用 Android 应用程序客户端 ID 及其重定向 URL?现在它没有在任何地方使用。谷歌文档似乎让我非常困惑。相同的API用于Web应用程序和Android应用程序。请帮忙。

在服务器端,您需要检查错误是什么。我假设您正在使用此库:https://github.com/artdarek/oauth-4-laravel

requestAccessToken 看起来像正确的方法,但您遇到了某种故障,然后触发了重定向。这在多个层面上都是错误的。在这种登录中,Web 服务器甚至不应重定向(因为你没有执行 Web 登录流,你只是对浏览器外客户端进行身份验证)。

您可能遇到的问题与redirect_uri有关(例如,消费者工厂的第二个参数)。这默认为您在服务器中所在的页面的 URL,但您需要将其设置为基于 Android 登录的其他内容 - 它要么不应该提供,要么应该设置为 oob 重定向 URI:urn:ietf:wg:oauth:2.0:oob 。如果您使用服务器端代码更新您的问题,如果不清楚,我可能会指出您的行。

如果这不是问题所在,请检查客户端 ID 是否匹配。您无法指定 Android 客户端 ID,它是从 Android 应用的包名称推断出签名密钥的 SHA1,因此请确保在与 Web 客户端 ID 相同的 console.developers.google.com 项目中设置了具有这些值的 Android 客户端 ID。

最新更新