替换 Azure 的 Easy Auth:在哪里检查基于 JWT 的身份验证是否失败或成功?

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

到目前为止,我们一直在使用 Azure 内置的 Easy Auth 为 Azure 部署的 Web 应用程序提供身份验证,但决定实现我们自己的 AuthN,因为我们需要更大的灵活性。

所以我在

Program.cs
中添加了以下配置:

string stsDiscoveryEndpoint = "https://login.microsoftonline.com/common/v2.0/.well-known/openid-configuration";
ConfigurationManager<OpenIdConnectConfiguration> configurationManager = new ConfigurationManager<OpenIdConnectConfiguration>(
    stsDiscoveryEndpoint, new OpenIdConnectConfigurationRetriever());
OpenIdConnectConfiguration openIdConfig = configurationManager.GetConfigurationAsync().Result; //Please ignore .Result
builder.Services.AddAuthentication()
    .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, opts =>
    {
        opts.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuers = new[]
            { 
                "Issuer1",
                "Issuer2"
            },
            ValidateIssuerSigningKey = true,
            IssuerSigningKeys = openIdConfig.SigningKeys,
            //TryAllIssuerSigningKeys = true,
            ValidateLifetime = true,
            ValidAudiences = new[]
            {
                "Audience1",
                "Audience2"
            },
        };
    });

使用 Easy Auth,如果 AuthN 失败,控制将无法到达我的 AuthZ 过滤器实现。通过这些设置,无论 JWT 验证失败还是成功,控制权都会到达我的 AuthZ 过滤器。

问题1:如何判断AuthN是否失败?

此外,通过 Easy Auth,我可以使用以下方法提取呼叫者的身份:

string? userId = authorizationFilterContext.HttpContext.User.Identity?.Name;

在我的 AuthZ 过滤器中,但这不适用于

JwtBearer
中间件。

问题 2: 如何使用

JwtBearer
中间件进行等效操作?

c# azure authentication jwt easy-auth
1个回答
0
投票

我来解答你的两个问题:

要检查身份验证是否失败,请查看过滤器中的用户对象:

if (!context.HttpContext.User.Identity?.IsAuthenticated ?? false)
{
    // Auth failed
}

要使用 JWT 获取用户 ID,您需要从声明中获取它。确切的声明取决于您的令牌设置,但通常:

string? userId = context.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
// or
string? userId = context.HttpContext.User.FindFirstValue("preferred_username");

别忘了添加:

csharpCopyusing System.Security.Claims;

希望这有帮助!如果您还需要什么,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.