【问题标题】:using different authentication schemes使用不同的身份验证方案
【发布时间】:2021-07-19 15:08:09
【问题描述】:

我被一个问题困住了,我不知道如何解决它。

我想向我的 API 添加两种不同的 JWT 授权方法。不要问我为什么,理由。

在我的 startup.cs 中我添加了

services.AddAuthentication()
    .AddJwtBearer("firstJwt", options =>
    {
        options.Audience = "FirstProtectedApi";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("mySecret")),
            ValidIssuer = "WebApiTest",
            ValidateAudience = true,
            ValidateLifetime = true,
            ClockSkew = TimeSpan.FromMinutes(1)
        };
    })
    .AddJwtBearer("secondJwt", options =>
    {
        options.Audience = "SecondProtectedApi";
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuerSigningKey = true,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("mySecret")),
            ValidIssuer = "WebApiTest",
            ValidateAudience = true,
            ValidateLifetime = true, 
            ClockSkew = TimeSpan.FromMinutes(1)
        };
    });

services
    .AddAuthorization(options =>
    {
        options.DefaultPolicy = new AuthorizationPolicyBuilder()
            .RequireAuthenticatedUser()
            .AddAuthenticationSchemes("FirstProtectedApi", "SecondProtectedApi")
            .Build();  
    });

并且此代码应该工作。

我现在的问题是,在控制器中。 出于测试目的,我有两个不同的登录名。如何在登录时调用第一个或第二个身份验证方案,以便导航到仅适用于 FirstProtectedApi 或 SecondProtectedApi 的受保护路由?

即使是一些文档也会很棒!

非常感谢!

【问题讨论】:

    标签: c# asp.net-core


    【解决方案1】:
    services
        .AddAuthorization(options =>
        {
            options.DefaultPolicy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .AddAuthenticationSchemes("FirstProtectedApi", "SecondProtectedApi")
                .Build();  
        });
    

    当使用AddAuthenticationSchemes()方法时,参数应该是认证方案,所以将上面的代码改成如下:

            services.AddAuthorization(options =>
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder()
                    .RequireAuthenticatedUser()
                    .AddAuthenticationSchemes("firstJwt", "secondJwt")
                    .Build();
            });
    

    我现在的问题是,在控制器中。出于测试目的,我有两个 不同的登录。我如何调用第一次或第二次身份验证 登录方案,以便我只能导航到受保护的路线 可用于 FirstProtectedApi 或 SecondProtectedApi?

    在控制器中,如果要使用特殊方案,可以使用[Authorize] 属性的AuthenticationSchemes 属性。或者您可以为每个方案创建策略,使用[Authorize] 属性的Policy 属性。像这样的代码:

        [HttpGet]
        [Authorize(AuthenticationSchemes = "secondJwt")]
        public IEnumerable<string> Get()
    

    更多详细信息,您可以参考以下链接:

    Use multiple JWT Bearer Authentication

    ASP.NET Core Using Multiple Authentication Methods

    Use multiple authentication schemes

    【讨论】:

    • 谢谢!我在敲我的头,找不到解决办法!也谢谢你的链接,是时候学习了! :D
    猜你喜欢
    • 2021-04-28
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-03
    相关资源
    最近更新 更多