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

4
我有以下客户端密钥。
{
  "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不匹配。

要更新已授权的重定向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/ - Tobias Tengler
4个回答

5

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

 http://127.0.0.1/authorize/

5

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

Credentials

在选择 OAuth客户端ID 后,点击 创建凭据

Create credentials

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

Create 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链接应该可以在重定向URI参数中使用任何端口,例如http://localhost:8414(使用8414作为随机端口)。这样,您就不会再遇到以下错误信息:

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


非常感谢,这个回答解决了我的问题。关键是要使用“其他”作为“应用程序类型”。 - Franva

1
重定向 URI 是您希望 Google 返回身份验证的 URL。这应该是您设置用于处理 Oauth 响应的文件。
当您在 Google 开发者控制台中创建项目时,您应该向 Google 提供一个重定向 URI,指定您将从哪里发送请求以及希望响应返回到哪里。
“错误:redirect_uri_mismatch 请求中的重定向 URI http://127.0.0.1:8414/authorize/ 与 OAuth 客户端授权的 URI 不匹配。”这意味着您正在从 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 - http://127.0.0.1:8414/authorize/ 对于所有机器都是通用的吗?有没有一种通用的方法来指定重定向URL?我需要在此之后重新生成凭据和密钥吗? - Anindita Ghatak
我不知道你在使用什么编程语言,但很可能是你正在使用的开发应用程序给你分配了一个随机端口。解决这个问题,你就不会再遇到这种情况了。 - Linda Lawton - DaImTo
当然,谢谢。 - Anindita Ghatak
将来你应该开一个不涉及重定向URI的单独问题。这样你就有两个问题可以得分了。不过我已经编辑了我的答案以包括它。 - Linda Lawton - DaImTo
sure. Thank you so much. - Anindita Ghatak
显示剩余5条评论

0
如果您正在使用基于 Linux 的容器应用程序或 Web 应用程序,请参考此 answer。 这可能是由于身份验证重定向到未通过 HTTPS 提供服务的提供程序处理引起的。 查看 redirect_uri 的错误,如果链接超过 http,则按照相同的方式操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接