使用特定Web API控制器的自定义身份验证覆盖OWIN OAuth承载身份验证

时间:2016-02-13 22:54:57

标签: c# authentication asp.net-web-api

我认为这是一个非常小众的案例,但我希望有人遇到过类似的情况。

我将ASP.NET Web API(v2)配置为使用OWIN中间件使用OAuth承载令牌,例如:

var oAuthAuthorizationServerOptions = new OAuthAuthorizationServerOptions
        {
            AllowInsecureHttp = true,
            TokenEndpointPath = new PathString("/token"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(60),
            Provider = new SimpleAuthorizationServerProvider(UnityConfig.Container.Resolve<ApplicationUserManager>())
        };

app.UseOAuthAuthorizationServer(oAuthAuthorizationServerOptions);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());

我为具有自己的身份验证机制的特定客户端实现了一些方法。所以我创建了一个自定义身份验证属性,我已将其应用于我用于其方法的控制器。

问题在于我仍然看到WWW-Authenticate: Bearer所以我知道中间件仍在运行,尽管我使用了[OverrideAuthentication][OverrideAuthorization]属性。我也尝试将自定义身份验证实现为授权属性,但我认为问题在于OWIN中间件中的AuthenticationHandlers优先于其他所有内容,因此AuthorizeAttribute的存在会导致它们被应用。

如何为此特定控制器禁用此身份验证中间件?我想知道答案是否是编写我自己的身份验证中间件,但我不确定如何阻止承载身份验证也被应用。

0 个答案:

没有答案