所以这可能需要在“你做错了”下归档,但我无法获得默认 VS2013 MVC5/WebApi 项目模板返回的 OAuth access_token 来成功验证 WebApi 请求。有趣的是,VS2013 SPA 项目模板似乎运行良好。
这应该可以通过以下步骤重现:
- 在 VS2013 中,执行 File -> New Project -> Web -> Single Page Application
在 Startup.Auth.cs 中取消注释该行:
app.UseGoogleAuthentication();
创建一个新的 WebApi 控制器和一个 GET 操作以返回一些数据并将 [Authorize] 属性添加到控制器。
启动 Fiddler,F5 调试应用程序,然后浏览到:
http://localhost:<your_port>/api/account/ExternalLogins?returnUrl=%2F&generateState=true
- 打开从第 4 步返回的 json 文件,将整个 url 值(开头的“/”除外)复制并粘贴到地址栏中地址的末尾,然后按 Enter - 您应该被带到 Google 进行身份验证。
- 一旦您通过身份验证,您将被重定向回 SPA 应用程序 - 忽略“外部登录失败”。错误信息。
- 在通过 Google 进行身份验证后,查看 Fiddler 跟踪以了解对您的应用的第一个请求。突出显示该请求并单击 Inspectors 选项卡,然后查看响应的标头。
- 将 Transport 部分下的 Location 标头复制并粘贴到记事本中,然后仅复制 access_token 片段的值。
- 在 Fiddler 中,单击 Composer 选项卡并将默认 URL 修改为您在上面的步骤 3 中创建的控制器操作的 URL。
在请求标头区域中,在 User-Agent 标头下方添加以下内容:
Authorization: Bearer [access_token]
其中 [access_token] 是您从上述第 8 步复制的值。
执行请求,您应该会在 Fiddler 跟踪中看到 HTTP 200。在 Inspectors 选项卡中查看原始响应应该会显示您从 WebApi 方法返回的值。
如果您按照上面的步骤 1-11 进行操作,唯一的变化是您选择具有个人用户帐户的 MVC/WebApi 作为身份验证类型,那么您将在步骤 11 中获得 HTTP 401,而不是带有适当返回数据的 HTTP 200。
说了这么多,难道我做错了吗?据我所知,这两个项目模板在 OAuth/安全设置方面几乎相同(web.config 中的一些细微差异,但更改这些似乎没有什么不同)。
提前感谢您提供的任何帮助 - 在过去的几个晚上,我一直在用头撞桌子......
瑞安