所以这可能需要在“你做错了”下提交,但我无法获得默认VS2013 MVC5 / WebApi项目模板返回的OAuth access_token,以成功验证WebApi请求。有趣的是,VS2013 SPA项目模板似乎运行良好。
这应该可以通过以下步骤重现:
在Startup.Auth.cs中取消注释行:
app.UseGoogleAuthentication();
创建一个新的WebApi控制器和一个GET操作以返回一些数据并将[Authorize]属性添加到控制器。
启动Fiddler,F5调试应用程序,然后浏览 到:
http://localhost:<your_port>/api/account/ExternalLogins?returnUrl=%2F&generateState=true
在“请求标头”区域中,在“用户代理”标题下添加以下内容:
Authorization: Bearer [access_token]
其中[access_token]是您从上面的步骤8复制的值。
执行请求,您应该在Fiddler跟踪中看到HTTP 200。在Inspectors选项卡中查看Raw响应应显示您从WebApi方法返回的值。
如果您按照上面的步骤1-11进行唯一更改,则选择具有个人用户帐户作为身份验证类型的MVC / WebApi,然后您将在步骤11中获得HTTP 401,而不是具有相应返回数据的HTTP 200。
说了这么多,我做错了吗?据我所知,两个项目模板在OAuth /安全设置方面几乎完全相同(web.config中的一些细微差别,但改变这些模板似乎没有什么区别)。
提前感谢您提供的任何帮助 - 过去几晚我一直在桌子上敲我的头......
赖安
答案 0 :(得分:0)
在我的情况下,我必须启用WebAPI才能使用承载令牌,否则我将始终获得401.WebAPIs与主MVC / Owin应用程序配置并行配置。 WebApiConfig.cs中的行config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
解决了我的问题:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
// Configure Web API to use only bearer token authentication.
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
...
}
}
这会导致WebApi通过Owin的承载令牌身份验证进行身份验证。