2 回答
TA贡献1854条经验 获得超8个赞
好吧,我在另一个问题中找到了解决方法。您可以通过设置 AuthenticationSchemeSelector 方法,在运行时为每个请求选择身份验证模式,而不是指定多个身份验证模式(这不起作用):
public void Configuration(IAppBuilder app)
{
HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"];
listener.AuthenticationSchemeSelectorDelegate = new
AuthenticationSchemeSelector(GetAuthenticationScheme);
}
private AuthenticationSchemes GetAuthenticationScheme(HttpListenerRequest httpRequest)
{
if(/* some logic... */){
return AuthenticationSchemes.Anonymous;
}
else{
return AuthenticationSchemes.IntegratedWindowsAuthentication;
}
}
虽然不理想(您必须手动检查请求 URL 或请求的其他一些参数来决定使用哪种方法)但它可以工作。
TA贡献1817条经验 获得超6个赞
由于您对问题的描述有限,我已经设置了一个演示应用程序,我在其中实现OAuthAuthorizationServerProvider为 Provider forOAuthAuthorizationServerOptions和 override GrantResourceOwnerCredentialsandValidateClientAuthentication
public void Configuration(IAppBuilder app)
{
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions
{
Provider = new ApplicationOAuthBearerAuthenticationProvider()
});
app.Use<AuthenticationResponseMiddleware>();
var options = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/api/xxxx"),
AccessTokenExpireTimeSpan = TimeSpan.FromDays(1),
Provider = new OwinAuthorisationProvider()
};
app.UseOAuthAuthorizationServer(options);
}
还尝试AuthorizeAttribute在配置类中自定义并添加为过滤器.Filters.Add(new AuthorizeAttribute());
在AuthenticationResponseMiddleware我继承OwinMiddleware的public override async Task Invoke(IOwinContext context)方法中,请检查请求的流程。
它OAuthBearerAuthenticationProvider首先在RequestToken方法中命中,然后在OwinMiddleware类中命中,在进入任何 DelegatingHandler管道之前,大部分身份验证都是在此层中实现的。
检查后请评论您的发现,同时我也修改API并更新您,希望它可以帮助您。
- 2 回答
- 0 关注
- 217 浏览
添加回答
举报