redirect_uri_mismatch 请求中的重定向 URI 与授权给 OAuth 客户端的重定向 URI 不匹配

Posted

技术标签:

【中文标题】redirect_uri_mismatch 请求中的重定向 URI 与授权给 OAuth 客户端的重定向 URI 不匹配【英文标题】:redirect_uri_mismatch the redirect URI in the request does not match the ones authorized for the OAuth client 【发布时间】:2019-05-09 21:22:06 【问题描述】:

我有以下客户端密码


  "web": 
    "client_id": "testid",
    "project_id": "testproj",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://www.googleapis.com/oauth2/v3/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "test-sec",
    "redirect_uris": [
      "https://localhost:8080/oauth2callback"
    ]
  

我得到了

“错误:redirect_uri_mismatch 请求中的重定向 URI http://127.0.0.1:8414/authorize/ 与授权给 OAuth 客户端的不匹配。

要更新授权的重定向 URI,请访问:“。请您提出建议,如何解决它。

我正在使用 C#。我已经用这个创建了凭据 -

GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, scopes,
                                             "user",
                                              CancellationToken.None, 
                                              new FileDataStore(Directory.GetCurrentDirectory() + "\\AccessToken\\" , 
                                             true)).Result; 

但第一次,它会弹出登录名,一旦我登录,它就会在文件夹中创建Google.Apis.Auth.OAuth2.Responses.TokenResponse-user 文件。有没有办法绕过第一次登录?

谢谢。

【问题讨论】:

您发布的有效负载或响应是 JSON,您从哪里得到错误?如果错误来自服务器响应,请发布完整的响应。也只是从消息中我怀疑你必须将你的 redirect_uris 更改为你授权为 OAuth 回调的那些,所以你需要将 https://localhost:8080/oauth2callback 更改为 http://127.0.0.1:8414/authorize/ 【参考方案1】:

当您在https://console.developers.google.com 中创建凭据时:

点击Create credentials后选择OAuth client ID:

选择其他作为应用程序类型:

.

您应该拥有这种格式的凭据:


  "installed": 
    "client_id": "...",
    "project_id": "...",
    "auth_uri": "https://accounts.google.com/o/oauth2/auth",
    "token_uri": "https://oauth2.googleapis.com/token",
    "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
    "client_secret": "...",
    "redirect_uris": [
      "urn:ietf:wg:oauth:2.0:oob",
      "http://localhost"
    ]
  

现在,您的 OAuth2 链接应该可以在 redirection_uri 参数中使用任何端口,例如 http://localhost:8414(使用 8414 作为随机端口)。你不再是这个错误了:

错误:redirect_uri_mismatch 请求中的重定向 URI,http://localhost:8414/authorize/,与授权给 OAuth 客户端的不匹配。

【讨论】:

非常感谢,这个答案解决了我的问题。关键是“应用程序类型”使用“其他”。【参考方案2】:

在添加为授权重定向 URL 时,我只是忽略了错误消息中的端口。

 http://127.0.0.1/authorize/

【讨论】:

【参考方案3】:

重定向 uri 是您希望 Google 将身份验证返回到的 URL。这应该是您为处理 Oauth 响应而设置的文件。

当您在 Google 开发者控制台中创建项目时,您应该已经向 google 提供了一个重定向 uri,其中说明了您将从哪里发送以及您希望将响应返回到哪里。

“错误:redirect_uri_mismatch 请求中的重定向 URI,http://127.0.0.1:8414/authorize/,与 OAuth 客户端授权的不匹配。

表示您是从 http://127.0.0.1:8414/authorize/ 发送的,但这不是您在 Google 开发者控制台中添加的重定向 uri 之一。返回开发者控制台并添加 http://127.0.0.1:8414/authorize/http://localhost:8414/authorize/ 您可能需要也可能不需要结尾 /

绕过登录

您需要了解的是,大部分 Google 的 api 数据都是私人用户数据。为了访问私人用户数据,您必须征得拥有该数据的用户的同意。我们使用 Oauth2 请求用户同意我们的应用程序访问他们的数据。没有办法绕过 oauth2 同意。

很遗憾,没有其他方法可以访问 YouTube api。如果您想访问私人用户数据,您将始终必须至少征求用户一次同意,然后像现在使用文件数据存储一样保存凭据。

【讨论】:

感谢您的关注。这个 URL -127.0.0.1:8414/authorize 在所有机器上都是通用的吗?是否有指定重定向 URL 的通用方法?在此之后我是否需要重新生成凭据和机密? 当你运行它的本地主机和你设置的端口时,它是你从本地发送的机器。当您在网站上托管它时,您需要将其添加为重定向 URI。您无法创建需要添加用于网站的通用 URI 这是一个安全问题,即使您可以将重定向 URI 设置为通用地址,您也无法保留客户端 ID 和机密同样,您只是设置了有效的地址。 谢谢。每次端口都在变化。因此,尽管我正在注册重定向 URI,但下次运行它是一个不同的端口。有什么解决方案吗?注册它抛出的上一个 url - 请求中的重定向 URI,127.0.0.1:2523/authorize,与 OAuth 客户端授权的不匹配。 我不知道您使用的是什么语言,但很可能是您使用的开发应用程序为您提供了一个随机端口修复程序,您不会遇到问题 非常感谢您的帮助。我想,我已经解决了这个问题,只需注册 127.0.0.1:/authorize 和 localhost/authorize 作为重定向 url。

以上是关于redirect_uri_mismatch 请求中的重定向 URI 与授权给 OAuth 客户端的重定向 URI 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

错误:MVC 应用程序中的 Google 登录中的 redirect_uri_mismatch

ASP.Net - Google Calendar API V3 redirect_uri_mismatch 错误

在 laravel 中使用 oauth 会出现错误:redirect_uri_mismatch

在 React Native 中使用 Expo.Google.logInAsync 时如何解决“redirect_uri_mismatch”错误?

Google OAuth 2.0“错误”:“redirect_uri_mismatch”

我正在尝试在 asp.net c# 中使用 google API 发送电子邮件并收到错误 400 redirect_uri_mismatch