簡體   English   中英

Header 中自定義字段的 Bearer Token

[英]Bearer Token by custom field in Header

我的端點使用令牌來授權執行,但 header“授權”字段用於網關令牌。 我想設置一個不同的 header 密鑰來傳遞和讀取我端點中的令牌並避免沖突。

這是我的 controller 代碼:

        [HttpPost]
        [ApiVersion("1.0")]
        [ProducesResponseType(typeof(ErrorMessageDto), 500)]
        [Authorize(AuthenticationSchemes = "Bearer")]
        [ProducesResponseType(typeof(NavMenuItemReturnDto), 201)]
        public IActionResult CreateNavMenuItem(NavMenuItemUpdateCreateDto newNavMenuItem)
        {
            try
            {
                return StatusCode(201, _navMenuItemsBL.CreateNewNavMenuItem(newNavMenuItem).Result);
            }
            catch (Exception ex)
            {
                return StatusCode(500, new ErrorMessageDto { Error = ex.Message });
            }
        }

這是我的啟動代碼:

 services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer("Bearer", options =>
                {
                    options.Authority = Configuration.GetSection("JwtAuthority").Get<string>();

                    options.TokenValidationParameters = new TokenValidationParameters
                    {
                        ValidateIssuerSigningKey = false,
                        ValidateAudience = false,
                        RequireExpirationTime = false,
                        ValidateLifetime = false,
                        ValidateIssuer = false,
                    };
                });

有什么建議么? 謝謝您的幫助

您能否通過添加多個身份驗證模式來實現您的目標?

一個例子如下:

    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Audience = "https://localhost:5000/";
            options.Authority = "https://localhost:5000/identity/";
        })
        .AddJwtBearer("AzureAD", options =>
        {
            options.Audience = "https://localhost:5000/";
            options.Authority = "https://login.microsoftonline.com/eb971100-6f99-4bdc-8611-1bc8edd7f436/";
        });
}

默認認證方案JwtBearerDefaults.AuthenticationScheme只注冊了一個JWT承載認證。 必須使用唯一的身份驗證方案注冊其他身份驗證。

下一步是更新默認授權策略以接受兩種身份驗證方案。 例如:

        services.AddAuthorization(options =>
        {
            var defaultAuthorizationPolicyBuilder = new AuthorizationPolicyBuilder(
                JwtBearerDefaults.AuthenticationScheme,
                "AzureAD");
            defaultAuthorizationPolicyBuilder = 
                defaultAuthorizationPolicyBuilder.RequireAuthenticatedUser();
            options.DefaultPolicy = defaultAuthorizationPolicyBuilder.Build();
        });

由於默認授權策略被覆蓋,因此可以在控制器中使用 [Authorize] 屬性。 然后 controller 接受第一或第二發行人發出的帶有 JWT 的請求。

現在您有了默認值和 AzureAD

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM