OAuth 2实施未按预期工作

时间:2016-10-12 05:53:16

标签: angular oauth playframework-2.5

我是实施OAuth2工作流程的新手。我正在测试Google OAuth2,我的设置如下。

  1. 服务器端的Play Framework。
  2. Angular 2 for client side。
  3. 两个应用程序都在同一个盒子上但在不同的端口下运行。但是,我已为我的客户端ajax请求设置代理。

    这项工作的主要工作是在服务器端完成的,我在那里交换谷歌发出的代码以获取令牌。当我手动测试它并直接在浏览器选项卡中输入我的授权端点时,一切正常。我被重定向到谷歌,登录,然后重定向到授权端点,然后发出一个令牌。首次点击授权端点时,它会发送303响应,浏览器会自动重定向到谷歌。成功登录后,Google会使用网址中的访问代码重定向到我的自动化终端。服务器读取访问代码并将其发送到谷歌以换取令牌。假设我的授权端点是http://localhost:8000/auth/google

    然而,当我尝试从我的角度2应用程序启动流程并在成功登录谷歌后发送谷歌发布的代码。在客户端,我发起了一个google请求,其redirect_uri设置为http://localhost:8000/auth/google的授权端点。成功登录后,我会阅读谷歌返回的授权码并将其发送到服务器。在这个例子中,我收到一个错误,说有一个redirect_uri_mismatch。

    我无法理解为什么这种设置不起作用。谷歌是否限制访问代码到特定域,这意味着如果我的角度应用程序在端口3000上运行,该访问代码是否仅对来自该端口的请求有效?

    任何帮助都会非常感激,因为我花了好几个小时试图弄清楚为什么这不起作用。

1 个答案:

答案 0 :(得分:0)

您是否在控制台中注册了redirect_url?注册后你有没有等一段时间?它完全一样吗?

见这里:https://developers.google.com/identity/protocols/OAuth2InstalledApp

  

您的应用必须向系统注册自定义URI方案才能接收授权响应。您的应用注册其自定义URI方案的方式因平台而异。我们的库和示例演示了一些特定于平台的自定义URI方案重定向的实现。

如果您正在处理来自客户端网络应用程序的身份验证,您还可以考虑使用隐式授权流程而不是更简单且旨在处理客户端身份验证的授权代码:{{3} }