我认为这是一个非常小众的案例,但我希望有人遇到过类似的情况。
我将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的存在会导致它们被应用。
如何为此特定控制器禁用此身份验证中间件?我想知道答案是否是编写我自己的身份验证中间件,但我不确定如何阻止承载身份验证也被应用。