我们正在编写一个带有 Jwt 身份验证的 REST Api,需要了解如何允许非产品环境跳过 Jwt 身份验证功能。
我们无法在控制器上添加 [AllowAnonymous],因为我们只想让它在非产品环境中跳过 Jwt 身份验证。这是我们控制器上的当前属性:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Policy = AuthorizationDefaults.PsAuthorizePolicy)]
我尝试使用 if() 语句省略 .AddJwtBearer 并将 TokenValidationParameters 设置为 null,但我们仍然无法遵守该策略。
我考虑过编写自己的 AuthorizationHandler,如下所示: 使用 IAuthorizationRequirementData 自定义授权策略,但不确定如何使其适用于非生产和生产环境。
有什么想法吗?有没有更简单的方法?
我遇到了类似的问题,我在owin管道中添加了我的中间件。
app.UseMyAuthMethod();
app.UseStandardAuthMethod();
我的中间件非常简单(省略了实际的验证方法):
public class MyAuthMiddleware : OwinMiddleware
{
public AgilityPassMiddleware(OwinMiddleware next) : base(next) { }
public override async Task Invoke(IOwinContext context)
{
if (AuthenticateByToken(context, out ClaimsPrincipal user))
{
context.Authentication.User = user;
}
await Next.Invoke(context);
}
}