Oauth VS2013 MVC/WebApi项目模板在使用承载令牌时返回401

Oauth VS2013 MVC/WebApi项目模板在使用承载令牌时返回401,oauth,asp.net-web-api,owin,Oauth,Asp.net Web Api,Owin,因此,这可能需要在您做错了的情况下进行归档,但我无法获取默认VS2013 MVC5/WebApi项目模板返回的OAuth access_令牌来成功验证WebApi请求。有趣的是,VS2013 SPA项目模板似乎运行良好 应通过以下步骤进行复制: 在VS2013中,执行文件->新建项目->Web->单页应用程序 在Startup.Auth.cs中,取消对行的注释: app.UseGoogleAuthentication(); 创建一个新的WebApi控制器和一个GET操作,以返回一些数据并向控制

因此,这可能需要在您做错了的情况下进行归档,但我无法获取默认VS2013 MVC5/WebApi项目模板返回的OAuth access_令牌来成功验证WebApi请求。有趣的是,VS2013 SPA项目模板似乎运行良好

应通过以下步骤进行复制:

在VS2013中,执行文件->新建项目->Web->单页应用程序 在Startup.Auth.cs中,取消对行的注释:

app.UseGoogleAuthentication();
创建一个新的WebApi控制器和一个GET操作,以返回一些数据并向控制器添加[Authorize]属性

启动Fiddler,F5调试应用程序,然后浏览 致:

其中[access_token]是您从上面的步骤8复制的值

执行请求,您应该会在Fiddler跟踪中看到HTTP 200。在Inspectors选项卡中查看原始响应应该会显示从WebApi方法返回的值

如果您按照上面的步骤1-11进行操作,唯一的更改是选择具有单个用户帐户的MVC/WebApi作为身份验证类型,那么您将在步骤11中获得HTTP 401,而不是包含相应返回数据的HTTP 200

说了这么多,我做错了吗?据我所知,就OAuth/security设置而言,这两个项目模板几乎是相同的。web.config中有一些细微的差异,但更改它们似乎没有什么不同

提前感谢您提供的任何帮助-在过去的几天晚上,我一直在用头撞桌子


Ryan

在我的例子中,我必须启用WebAPI来使用承载令牌,否则我将始终获得401。WebAPI与主MVC/Owin应用程序配置并行配置。行config.Filters.Addnew HostAuthenticationFilterAuthDefaults.AuthenticationType;在WebApiConfig.cs中修复了我的问题:

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的承载令牌身份验证进行身份验证。

这里也一样-您解决过这个问题吗?我正在从facebook取回一个承载令牌,但将其设置为授权标头不会通过WebAPI进行身份验证,返回的是“401”错误。老实说,我最终使用了SPA模板,该模板有效,并放弃了所有我不需要的东西。
Authorization: Bearer [access_token]
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();
        ...
    }
}