允许非产品环境进行匿名身份验证

问题描述 投票:0回答:1

我们正在编写一个带有 Jwt 身份验证的 REST Api,需要了解如何允许非产品环境跳过 Jwt 身份验证功能。

我们无法在控制器上添加 [AllowAnonymous],因为我们只想让它在非产品环境中跳过 Jwt 身份验证。这是我们控制器上的当前属性:

[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Policy = AuthorizationDefaults.PsAuthorizePolicy)]

我尝试使用 if() 语句省略 .AddJwtBearer 并将 TokenValidationParameters 设置为 null,但我们仍然无法遵守该策略。

我考虑过编写自己的 AuthorizationHandler,如下所示: 使用 IAuthorizationRequirementData 自定义授权策略,但不确定如何使其适用于非生产和生产环境。

有什么想法吗?有没有更简单的方法?

c# asp.net-web-api
1个回答
1
投票

我遇到了类似的问题,我在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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.