我们正在开发一个Android应用程序和Web应用程序,使用Laravel PHP框架作为后端,我们的应用程序允许谷歌登录.Web应用程序和Android应用程序都在谷歌应用程序控制台上注册。 Google登录适用于Web应用程序。在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和客户端密码是在谷歌应用控制台上注册的网络应用程序。现在问题服务器无法从谷歌获取访问令牌,它总是被重定向并要求再次登录。重定向网址是网络应用的网址。我们的服务器能够在从Web应用程序发送一次性身份验证代码时获取访问令牌,但在从Android发送时失败。为什么它不适用于Android,但它适用于Web应用程序?我们应该在哪里使用Android应用程序客户端ID及其重定向网址?现在它没有被任何地方使用。谷歌文档似乎让我很困惑。 Web应用程序和Android应用程序使用相同的API。请帮忙。
答案 0 :(得分:0)
在服务器端,您需要检查错误是什么。我假设您正在使用此库:https://github.com/artdarek/oauth-4-laravel
requestAccessToken看起来是正确的方法,但是您会遇到某种失败,然后触发重定向。这在多个级别上都是错误的。在这种登录方式中,网络服务器甚至不应该重定向(因为您没有在网上签名,您只是对浏览器外的客户端进行身份验证)。
您可能遇到的问题是使用redirect_uri(例如,消费者工厂的第二个参数)。这默认为您在服务器中所处的页面的网址,但您需要将其设置为其他基于Android的登录信息 - 它不应该被提供,或者应该设置为oob重定向URI:urn:ietf:wg:oauth:2.0:oob
。如果你用服务器端代码更新你的问题,如果不清楚,我可能会指出你在哪一行。
如果问题不是,请检查您的客户ID是否匹配。您无法指定Android客户端ID,它是从您的Android应用程序的包名称中推断出签名密钥的SHA1,因此请确保在同一控制台中设置了这些值的Android客户端ID。开发人员.google.com项目作为网络客户端ID。