Google OAuth 2.0 invalid_request,缺少方案

Posted

技术标签:

【中文标题】Google OAuth 2.0 invalid_request,缺少方案【英文标题】:Google OAuth 2.0 invalid_request, Missing Scheme 【发布时间】:2017-06-15 00:41:56 【问题描述】:

我无法在 ios 上授权 Google OAuth,Safari 总是这样说

400 这是一个错误。

redirect_uri 的参数值无效: 缺少方案:com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8

我已经在 Google Console 页面上多次检查 API Key、Client_ID、client_secret 并在 xcode 中创建了 url 方案。

这是我的 Swift 代码:

oauthswift = OAuth2Swift( 消费者密钥:“xxxxx-3lmlrubo9345ng4qhtf62ud1i02m6ta8.apps.googleusercontent.com”, 消费者秘密:“xxxtg6qslUOC2np1sBg0hnWgBcpZb4”, authorizeUrl: "https://accounts.google.com/o/oauth2/v2/auth", 响应类型:“令牌” ) 让句柄 = oauthswift.authorize( withCallbackURL: URL(字符串: "com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8")!, 范围:“个人资料”,状态:“GOOGLE”, 成功:凭证,响应,参数 打印(凭证.oauthToken) // 做你的请求 , 失败:错误 打印(错误.localizedDescription) )

你能帮我吗?

【问题讨论】:

【参考方案1】:

解决这个问题非常简单: 只需在您的架构之前设置前缀。

示例: 您的架构参数:

com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8

您的 iOS 应用程序的标识符:

net.the-red-queen.www

所以,重定向 URI 参数的值为:

net.the-red-queen.www:com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8

【讨论】:

不知道谷歌后来是否改变了scheme格式,因为有些教程没有提到这一点。效果很好,非常感谢!【参考方案2】:

我认为实际的问题是您没有指定完整的 URI。 (架构没有冒号和路径。)尝试让你的 redirect_uri 看起来像下面这样(当然编码正确):

com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8:/oauth

【讨论】:

【参考方案3】:

您可能应该重新检查 Google 开发控制台。您的 clientID 可能被错误地注册为 javascript Web Apps 而不是 Mobile Apps

【讨论】:

我再次检查并删除了Web自动生成的密钥它仍然不起作用 我更改了 withCallbackURL: URL(string: localhost 它们允许登录谷歌但无法重新打开 ios 应用 您是否将 GoogleService-Info.plist 添加到您的应用,并将带有 REVERSED_CLIENT_ID 的 URL 类型添加到您的应用 plist?确保您的反向 ID 与您在 Google 开发控制台上的 iOS 客户端 ID 匹配 绝对是的,我已将方案更改为 com.googleusercontent.apps.984813079630-3lmlrubo9345ng4qhtf62ud1i02m6ta8:/oauth 然后它现在可以工作但另一个问题发生了:***.com/questions/44558561/…【参考方案4】:

我正在编写一个 android 客户端,这些信息有所帮助,但并不是我所需要的。我发现我必须使重定向 uri 有点不同。

将您正在使用的 uri 作为手机上的目标(通常是包名称,但如果在应用的 build.gradle 文件中的 applicationId 中重新定义,则它可能不同) .

在目标末尾追加::/oauth2callback

所以我的包裹是com.fooboy.testapp3。添加上述位,重定向 uri 变为:

com.foobly.testapp3:/oauth2callback.

还有很多其他事情需要恰到好处(尤其是在 google api 控制台中),但这是我的最后一招。

祝你好运(你需要它)!

【讨论】:

以上是关于Google OAuth 2.0 invalid_request,缺少方案的主要内容,如果未能解决你的问题,请参考以下文章

Google API OAuth 2.0 身份验证返回“invalid_grant” - 可能的私钥签名格式问题?

400 Invalid_request 您无法登录此应用,因为它不符合 Google 为确保应用安全而制定的 OAuth 2.0 政策

是获取Google Docs OAuth 2.0的任何方式。访问令牌,其存在时间超过3600秒?

google oauth1 到 oauth2 迁移 invalid_token 错误

Google OAuth 令牌请求返回“invalid_client”:“未授权”

Google OAuth 令牌请求返回“invalid_client”:“未授权”