【发布时间】:2016-10-12 16:20:44
【问题描述】:
我是实施 OAuth2 工作流程的新手。我正在针对 google OAuth2 进行测试,我的设置如下。
- 服务器端播放框架。
- Angular 2 用于客户端。
两个应用程序都在同一个机器上,但在不同的端口下运行。但是,我已经为我的客户端 ajax 请求设置了代理。
首当其冲的工作是在服务器端完成的,我用谷歌发布的代码交换令牌。当我手动测试它并直接在浏览器选项卡中输入我的授权端点时,一切正常。我被重定向到谷歌,登录,然后重定向到授权端点,然后发出一个令牌。当第一次访问授权端点时,它会发送一个 303 响应,并且浏览器会自动重定向到 google。成功登录后,谷歌使用 url 中的访问代码重定向到我的授权端点。服务器读取访问代码并将其发送给谷歌以换取令牌。假设我的授权端点是http://localhost:8000/auth/google
但是,当我尝试从我的 Angular 2 应用程序启动流程并在成功登录谷歌后将谷歌发布的代码发送到谷歌时。在客户端,我正在向 google 发起请求,并将 redirect_uri 设置为授权端点 http://localhost:8000/auth/google。登录成功后,读取google返回的授权码,发送到服务器。在这种情况下,我收到一条错误消息,指出存在 redirect_uri_mismatch。
我不明白为什么这个设置不起作用。谷歌是否将访问代码限制为特定域,这意味着如果我的 Angular 应用程序在端口 3000 上运行,那么该访问代码是否仅对来自该端口的请求有效?
任何帮助都将不胜感激,因为我花了几个小时试图弄清楚为什么这不起作用。
【问题讨论】:
标签: angular oauth playframework-2.5