在使用不记名 token 对 web api 调用进行身份验证时,是否可以为每个请求添加自定义验证?
我正在使用以下配置并且应用程序已经正确验证了 JWT token 。
app.UseOAuthAuthorizationServer(new OAuthAuthorizationServerOptions
{
AuthenticationType = "jwt",
TokenEndpointPath = new PathString("/api/token"),
AccessTokenFormat = new CustomJwtFormat(),
Provider = new CustomOAuthProvider(),
});
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
AllowedAudiences = new[] { "all" },
IssuerSecurityTokenProviders = new[] { new SymmetricKeyIssuerSecurityTokenProvider(Config.JWT_Issuer, Config.JWT_Key) },,
});
现在,由于 token 设置为永不过期,我想为使用不记名 token 发出的每个请求添加一个额外的自定义验证步骤,这样我就可以验证每个请求的一些额外信息并在需要时拒绝访问。
为每个请求添加此验证的正确位置在哪里?
最佳答案
添加额外的逻辑来验证传入的 token :
1) 使用身份验证提供程序
编写一个继承自
OAuthBearerAuthenticationProvider
的自定义提供程序或实现IOAuthBearerAuthenticationProvider
在您的自定义身份验证提供程序中,覆盖/实现
ValidateIdentity(...)
和/或RequestToken(...)
以检查传入的 token 每个请求通过将自定义提供程序分配给
JwtBearerAuthenticationOptions.Provider
来使用它属性(property)
例子:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
// ... other properties here
Provider = new MyCustomTokenAuthenticationProvider()
// ... other properties here
});
2) 使用 token 处理程序
编写一个继承自
JwtSecurityTokenHandler
的自定义 token 处理程序覆盖任何你想扩展的相关方法(有很多!)
通过将自定义 token 处理程序分配给
JwtBearerAuthenticationOptions.TokenHandler
来使用它属性(property)
例子:
app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
// ... other properties here
TokenHandler = new MyCustomTokenHandler()
// ... other properties here
});
关于c# - 如何在 ASP.NET WebApi 的每个请求上对 JWT token 应用自定义验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35586663/