首页 文章

Google OAuth 2授权 - 错误:redirect_uri_mismatch

提问于
浏览
308

在网站https://code.google.com/apis/console我已经注册了我的应用程序,将生成的 Client ID:Client Secret 设置为我的应用程序并尝试使用Google登录 . 不幸的是,我收到了错误消息:

Error: redirect_uri_mismatch
The redirect URI in the request: http://127.0.0.1:3000/auth/google_oauth2/callback did not match a registered redirect URI

scope=https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
response_type=code
redirect_uri=http://127.0.0.1:3000/auth/google_oauth2/callback
access_type=offline
approval_prompt=force
client_id=generated_id

这条消息是什么意思,我该如何解决?我用的是宝石 omniauth-google-oauth2 .

29 回答

  • 2

    我需要在API和服务下创建一个新的客户端ID - >凭据 - >创建凭据 - > OAuth - >其他

    然后我下载并使用client_secret.json和我上传到我的youtube帐户的命令行程序 . 我试图使用Web App OAuth客户端ID,它在浏览器中给我重定向URI错误 .

  • 309

    对我来说这是因为在'Authorized redirect URIs'列表中我错误地将 https://developers.google.com/oauthplayground/ 而不是 https://developers.google.com/oauthplayground (最后没有 / ) .

  • 1

    当您在https://code.google.com/apis/console注册您的应用并创建客户端ID时,您有机会指定一个或多个重定向URI . auth URI上 redirect_uri 参数的值必须与其中一个完全匹配 .

  • 0

    2015年7月15日 - 登录时使用此脚本上周正在运行的登录信息

    <script src="https://apis.google.com/js/platform.js" async defer></script>
    

    停止工作并开始使用 Error: redirect_uri_mismatch 导致错误400

    在DETAILS部分: redirect_uri=storagerelay://...

    我改为:

    <script src="https://apis.google.com/js/client:platform.js?onload=startApp"></script>
    
  • 12

    重定向URI(返回响应的位置)必须在API控制台中注册,错误表明您没有这样做,或者没有正确完成 .

    转到项目的控制台,查看API Access . 您应该在那里看到您的客户端ID和密码,以及重定向URI列表 . 如果未列出所需的URI,请单击编辑设置并将URI添加到列表中 .

    编辑:(从下面评价很高的评论)请注意,更新谷歌api控制台和存在的更改可能需要一些时间 . 一般只有几分钟但有时似乎更长 .

  • 75

    就我而言,它是 wwwnon-www URL . 实际网站有 www 网址,Google Developer Console中的 Authorized Redirect URIsnon-www 网址 . 因此,重定向URI存在不匹配 . 我通过将Google Developer Console中的 Authorized Redirect URIs 更新为 www 来解决了这个问题 .

    其他常见的URI不匹配是:

    • 在授权重定向URI中使用 http:// ,在实际URL中使用 https:// ,反之亦然

    • 在授权重定向URI中使用尾部斜杠( http://example.com/ )而不使用尾部斜杠( http://example.com )作为实际URL,反之亦然

    以下是Google Developer Console的逐步截图,以便对那些难以找到开发人员控制台页面以更新重定向URI的人有所帮助 .

    转到https://console.developers.google.com选择您的项目

    Select your Project

    单击菜单图标

    Click on the menu icon

    单击API Manager菜单

    Select API Manager menu

    单击“凭据”菜单 . 在OAuth 2.0客户端ID下,您将找到您的客户端名称 . 在我的例子中,它是Web客户端1.单击它,将出现一个弹出窗口,您可以在其中编辑授权的Javascript源和授权的重定向URI .

    Select Credentials menu

    这是关于creating project and client ID的Google文章 .

  • 5

    如果您使用的是 Google+ javascript button ,那么您必须使用 postmessage 而不是实际的URI . 由于Google的文档由于某种原因没有明确说明,我花了差不多整整一天的时间来解决这个问题 .

  • 2

    对于我的网络应用程序,我通过写作纠正了我的错

    instead of : http://localhost:11472/authorize/
    type :      http://localhost/authorize/
    
  • 6

    确保检查协议“http://”或“https://”作为谷歌检查协议 . 最好在列表中添加两个URL .

  • 7

    在您在客户端检索 authorization code 的任何流程中,例如 GoogleAuth.grantOfflineAccess() API ,现在您想将代码传递到服务器,兑换它,并存储访问和刷新令牌,那么您必须使用文字字符串 postmessage 而不是redirect_uri .

    例如,在Ruby doc的代码段上构建:

    client_secrets = Google::APIClient::ClientSecrets.load('client_secrets.json')
    auth_client = client_secrets.to_authorization
    auth_client.update!(
      :scope => 'profile https://www.googleapis.com/auth/drive.metadata.readonly',
      :redirect_uri => 'postmessage' # <---- HERE
    )
    
    # Inject user's auth_code here:
    auth_client.code = "4/lRCuOXzLMIzqrG4XU9RmWw8k1n3jvUgsI790Hk1s3FI"
    tokens = auth_client.fetch_access_token!
    # { "access_token"=>..., "expires_in"=>3587, "id_token"=>..., "refresh_token"=>..., "token_type"=>"Bearer"}
    

    唯一提到 postmessage 的Google文档就是old Google+ sign-in doc . doc page for Offline Access没有提到这一点是绝对不可原谅的 . #FacePalm

  • 0

    这似乎很奇怪,也很烦人,没有"one"解决方案 . 对我来说http://localhost:8000没有成功,但http://localhost:8000/已经解决了 .

  • 36

    清单:

    • httphttps

    • &&amp;

    • 尾部斜杠( / )或打开 `` ?

    • (CMD/CTRL)+F ,在凭证页面中搜索完全匹配 . 如果没有找到,则搜索丢失的那个 .

    • 等到谷歌刷新它 . 如果您经常更换或者可能会留在游泳池中,可能会在每半个小时内发生一次 . 对我而言,生效将近半个小时 .

  • 1

    重定向网址区分大小写 .

    在我的情况下,我添加了两个:http://localhost:5023/AuthCallback/IndexAsync http://localhost:5023/authcallback/indexasync

  • 1

    Rails用户(来自omniauth-google-oauth2 docs):

    修复Rails中redirect_uri的协议不匹配只需根据Rails.env在OmniAuth中设置full_host . #config / initializers / omniauth.rbOmniAuth.config.full_host = Rails.env.production? ? 'https://domain.com':'http:// localhost:3000'

    记住:不要包括尾随的“/”

  • 29

    就我而言,我的凭证申请类型是"Other" . 所以我在凭据页面找不到 Authorized redirect URIs . 它似乎出现在应用程序类型中:"Web application" . 但是您可以单击 Download JSON 按钮以获取 client_secret.json 文件 .
    enter image description here

    打开json文件,你可以找到如下参数: "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"] . 我选择使用http://localhost,它对我来说很好 .

  • 78

    如果您使用本教程:https://developers.google.com/identity/sign-in/web/server-side-flow那么您应该使用"postmessage" .

    在GO中解决了这个问题:

    confg = &oauth2.Config{
            RedirectURL:  "postmessage",
            ClientID:   ...,
            ClientSecret: ...,
            Scopes:      ...,
            Endpoint:     google.Endpoint,
    }
    
  • -3

    提防 http://localhost:8000 末尾的额外 /http://localhost:8000/ 不同

  • 0

    让我完成@ Bazyl的回答:在我收到的消息中,他们提到了URI "http://localhost:8080/" (当然,这似乎是一个内部谷歌配置) . 我更改了那个的授权URI, "http://localhost:8080/" ,并且消息没有't appear anymore... And the video got uploaded... The APIS documentation is VERY lame... Every time I have something working with google apis, I simply feel 1710141 , but there'缺乏关于它的良好文档...... :(是的,我得到了它的工作,但是我不知道如果那里's a THIRD place where one should write the same URI... I find nor only the documentation but also the GUI design of Google' s api相当蹩脚 . ..

  • 0

    任何人都在努力寻找在新控制台中设置重定向网址的位置:API&Auth - >凭据 - > OAuth 2.0客户端ID - >单击链接以查找所有重定向网址

  • 2

    上述解决方案均不适合我 . 下面做了

    将授权重定向网址更改为 - https://localhost:44377/signin-google

    希望这有助于某人 .

  • 0

    尝试进行这些检查:

    • 控制台和应用程序中的捆绑ID . 我更喜欢像这样设置应用程序的Bundle ID "org.peredovik.$"

    • 检查是否在选项卡上添加了URL类型信息只需在标识符和URL方案中键入您的Bundle ID,将角色设置为Editor

    • 在cloud.google.com的控制台"APIs & auth" - > "Consent screen"填写有关您的应用程序的表单 . "Product name"是必填字段 .

    请享用 :)

  • 2

    在我的情况下,我必须检查Web应用程序/已安装应用程序的客户端ID类型 .

    已安装的应用程序:http://localhost [重定向URI]在这种情况下,localhost只能工作

    Web应用程序:您需要有效的域名[重定向URI:]

  • 0

    您需要做的是返回您的开发者控制台并转到API&Auth>同意屏幕并填写 . 具体来说,就是产品名称 .

  • 0

    不要忘记在域和ip之后包含路径 . 就我而言,我忘了:

    / oauth2callback

  • 0

    我在控制台中有两个请求URI,http://xxxxx/client/api/spreadsheet/authredirecthttp://localhost .

    我尝试了对这个问题的所有热门回复,并确认其中没有一个是我的问题 .

    我从控制台中删除了localhost,在我的项目中更新了我的client_secret.json,并且不匹配错误消失了 .

  • 0

    我有同样的问题与谷歌登录,我正要拉我的头发!我在google开发者控制台的google Credential面板中正确输入了我的回调,这里是我的重定向网址:

    https://www.example.com/signin-google

    https://www.example.com/signin-google/

    https://www.example.com/oauth2callback

    https://www.example.com/oauth2callback/

    一切似乎都没问题吧?但是直到我添加了一个 magical Url 我仍然没有工作 signin-google url(这是默认的谷歌回调) without www 并且问题解决了 .

    take it into account (depending of you domain) you may or may not need to add both with and without www urls

  • 4

    我有前端app和后端api .

    从我的后端服务器我通过点击谷歌api进行测试,并面临此错误 . 在我的整个时间里,我想知道为什么我需要给 redirect_uri ,因为这只是后端,因为它是有意义的前端 .

    我正在做的是从服务器给出不同的 redirect_uri (虽然有效)(假设这只是占位符,它只是要注册到谷歌)但我创建令牌代码的前端URL是不同的 . 因此,当我在服务器端测试中传递此代码时(redirect-uri与之不同),我遇到了这个错误 .

    所以不要犯这个错误 . 确保您的前端 redirect_uri 与您的服务器相同,因为谷歌使用它来验证真实性 .

  • 0

    以下是错误的原因:发生redirect_uri_mismatch问题:

    • 在Google项目中将URL网址重定向为空白 .

    • 重定向网址与您的网站不符

    • 重要!它只适用于example.com,book.com等工作域(不适用于本地主机或AWS LB URL)

    Recommended to use domain URL

  • 4

    UPDATED --> WORKING for Android apps

    只需使用:

    http:// localhost / oauth2callback

    如果您处理自己的逻辑而没有Web应用程序的重定向链接

相关问题