c# - 如何在 ASP.NET WebApi 的每个请求上对 JWT token 应用自定义验证?

标签 c# asp.net-web-api jwt

在使用不记名 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) 使用身份验证提供程序

  1. 编写一个继承自 OAuthBearerAuthenticationProvider 的自定义提供程序或实现 IOAuthBearerAuthenticationProvider

  2. 在您的自定义身份验证提供程序中,覆盖/实现 ValidateIdentity(...) 和/或 RequestToken(...) 以检查传入的 token 每个请求

  3. 通过将自定义提供程序分配给 JwtBearerAuthenticationOptions.Provider 来使用它属性(property)

例子:

app.UseJwtBearerAuthentication(new JwtBearerAuthenticationOptions
{
    // ... other properties here
    Provider = new MyCustomTokenAuthenticationProvider()
    // ... other properties here
});

2) 使用 token 处理程序

  1. 编写一个继承自 JwtSecurityTokenHandler 的自定义 token 处理程序

  2. 覆盖任何你想扩展的相关方法(有很多!)

  3. 通过将自定义 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/

相关文章:

c# - sizeof 运算符在 C# 中给出结构的额外大小

c# - asp.net如何判断Session是否过期

c# - 如何将指向从托管代码到非托管代码的结构的指针数组的指针编码(marshal)?

AngularJS 中的 JavaScript 运行时错误 : Not enough storage is available to complete this operation.

.net - 分析 Service Fabric 应用程序

c# - 如何处理数据库异常/问题?

c# - 在 WebApi 中使用 Unity 解析每个请求的 dbcontext

java - 无法在JAVA中生成RSAPublicKey

express - Cookie 未与 Fetch 一起存储

oauth-2.0 - 如何防止刷新被盗的访问 token