C# 多重认证中间件
你好 我正在将API从使用转移到:C# 多重认证中间件,c#,asp.net,authentication,identityserver3,authorize-attribute,C#,Asp.net,Authentication,Identityserver3,Authorize Attribute,你好 我正在将API从使用转移到: app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 要验证令牌,请使用IdentityServer 但是,我希望也能够使用上述中间件验证之前发布的任何令牌 因此,首先我将上面的行替换为以下内容(IdentityServer3.AccessTokenValidation): 这可以正常工作并正确授权对受保护端点的请求,但仅适用于IdentityServer发出的令
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
要验证令牌,请使用IdentityServer
但是,我希望也能够使用上述中间件验证之前发布的任何令牌
因此,首先我将上面的行替换为以下内容(IdentityServer3.AccessTokenValidation):
这可以正常工作并正确授权对受保护端点的请求,但仅适用于IdentityServer发出的令牌。
因此,我相信我在IdentityServer中的设置很好,因为使用了正确验证和允许访问的引用令牌
然而,我希望旧的OAuth令牌也能被验证,这样就支持旧的OAuth令牌以及由我的IdentityServer发布的任何JwT或引用令牌
我发现这样做的方法(如果有更好的方法,请告诉我)是将两个中间件添加到管道中,如下所示:
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AuthenticationType = "BearerLegacy",
})
.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = WebConfigurationManager.AppSettings["AuthServer"],
RequiredScopes = new[] { "api.tablet" },
AuthenticationType = "BearerIdSrv",
ClientId = "TabletAPI",
ClientSecret = "secret",
});
这就是我被卡住的原因,似乎IdentityServer中间件总是尝试验证令牌的中间件,一旦失败,它似乎永远不会尝试“遗留”OAuth中间件
我是否需要向所有[Authorize]端点显式添加一些内容,以指示应该尝试这两种类型?或者有没有一种方法可以全局地指定这一点
如果您能向正确的方向提供帮助或推动,我们将不胜感激。我发现了这一点,他们建议从IdentityServerBearerTokenAuthenticationOptions中删除所需的作用域。我试过了,它开始起作用了。
因此,本质上:
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AuthenticationType = "BearerLegacy",
})
.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = WebConfigurationManager.AppSettings["AuthServer"],
RequiredScopes = new[] { "api.tablet" },
AuthenticationType = "BearerIdSrv",
ClientId = "TabletAPI",
ClientSecret = "secret",
});
需要做到这一点:
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AuthenticationType = "BearerLegacy",
})
.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = WebConfigurationManager.AppSettings["AuthServer"],
AuthenticationType = "BearerIdSrv",
ClientId = "TabletAPI",
ClientSecret = "secret",
});
我照你说的做了。请求的响应是正确的,但它在日志文件中写入idx10501错误。
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()
{
AuthenticationType = "BearerLegacy",
})
.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions
{
Authority = WebConfigurationManager.AppSettings["AuthServer"],
AuthenticationType = "BearerIdSrv",
ClientId = "TabletAPI",
ClientSecret = "secret",
});