【问题标题】:Google OAuth Redirect Uri Mismatch (authorization_code)Google OAuth 重定向 Uri 不匹配(authorization_code)
【发布时间】:2017-12-10 03:10:21
【问题描述】:

我无法理解重定向 uri 的正确用途。按照 Google 教程,javascript API 允许我在没有任何重定向 URI 的情况下获得授权代码。

然后我将此代码发送到我的服务器并尝试使用此代码调用 /token 端点。但随后它将返回“重定向 URI 不匹配”,这可能意味着我需要为此端点定义与使用 javascript API 相同的 redirect_uri。我唯一的问题是我没有在我的网站上指定任何内容。

有人知道如何正确使用它们吗?

我试图实现的流程如下: - Javascript网站请求用户许可,获取授权码 - 代码发送到我的服务器 - 服务器使用此代码接收访问/刷新令牌并将其安全存储

【问题讨论】:

    标签: authentication oauth authorization google-oauth


    【解决方案1】:

    “我试图实现的流程如下:-Javascript 网站请求用户许可,获取授权码 - 代码发送到我的服务器 - 服务器使用此代码接收访问/刷新令牌并将其安全存储”

    这是不可能的。 Google 不会向 JavaScript 客户端发出验证码。这样做将是一个重大的安全问题。您需要编写服务器代码来请求离线访问,这将为您提供您正在寻找的 Auth Code 和 Refresh Token。

    您的应用仍然可以是 JavaScript SPA(如果这是您的目标),但您需要从应用服务器(Java、PHP 等)为应用提供服务,以处理授权。

    作为替代方案,您可以在 JavaScript 中完成所有操作,但您将没有刷新令牌。如果您的应用程序完全是 JS,那应该不是问题,并且对用户是透明的。 gapi 库负责根据需要获取访问令牌。

    【讨论】:

      【解决方案2】:

      重定向 uri 的目的是告诉身份验证服务器将身份验证代码返回到哪里。

      已安装的应用程序

      例如,如果我有一个已安装的应用程序 Windows,它知道将它返回到它原来的位置。

      https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code
      

      上面的链接将向用户显示一个身份验证窗口,并且它返回的身份验证代码将被发送回请求的确切来源。

      网络应用程序

      对于 Web 应用程序。请求来自什么位置?它的客户电脑?这只是一个运行您的 Web 应用程序的 Web 浏览器。客户端无法处理身份验证代码,您的 Web 服务器上必须有一个可以处理身份验证代码的文件。

      添加 http://webapplication120170125114757.azurewebsites.net/authorize/ 的重定向 uri 告诉身份验证服务器将身份验证代码返回到您的网站以便处理。

      重定向 URI 不匹配

      未匹配意味着您在上面的链接中输入的重定向 uri 不是您在 Google 开发者控制台中注册的。它必须完全匹配,包括任何端口号。

      Js 起源

      如果您使用的是 JavaScript 客户端,您需要设置一个有效的 JavaScript 来源,以便 google 授权您。

      如果您使用的是 3-legged OAuth 2.0 流,授权的重定向 URI 是它们作为回调调用的端点。 https://developers.google.com/accounts/docs/OAuth2#webserver

      【讨论】:

      • 重定向 uri 在谷歌控制台中注册,我设法让它与表单提交方法一起工作,其中两个重定向 uri 相同(授权和令牌端点)。这里的问题是,使用 javascript 弹出窗口我不需要指定重定向 uri
      • 使用 JavaScript 你有不同的 Js 来源。
      【解决方案3】:

      当您交换代码时,请在“redirect_uri”参数中传递您的 javascript 来源。这应该可以。

      【讨论】:

        猜你喜欢
        • 2021-12-10
        • 2015-08-09
        • 1970-01-01
        • 2014-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多