我有 JWT Bearer 身份驗證的配置,但有時我不想使用 JWT 令牌,而是想在請求標頭中使用 API KEY 并在中間件中檢查此密鑰。
但在這種情況下,當我不將不記名令牌放在標頭中時,我總是以未經授權的回應代碼進行回應。
如何禁用不記名令牌檢查?
我的配置:
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
// options.RequireHttpsMetadata = false;
// options.SaveToken = true;
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtSettings.Secret)),
ValidIssuer = jwtSettings.Issuer,
ValidAudiences = jwtSettings.Audiences,
ClockSkew = TimeSpan.Zero // remove delay of token when expire
};
});
uj5u.com熱心網友回復:
您可以通過使用 multipe 來實作這一點,而不是以更慣用的方式檢查中間件AuthenticationSchemes。有關更多詳細資訊,請參閱 MSDN 鏈接,但在非常高的級別上,您可以分配添加多個身份驗證方案,每個都有不同的方案。然后在使用 autorize 屬性時參考此方案名稱(例如[Authorize(AuthenticationSchemes = "Api-Key-Scheme")])。
services
.AddAuthentication()
.AddJwtBearer(options => { .. })
.AddApiKey(options => { .. }); // custom code
上面的.AddApiKey()方法需要自定義AuthenticationHandler<T>實作,可以在此處找到如何執行此操作的示例 - https://josef.codes/asp-net-core-protect-your-api-with-api-keys/
uj5u.com熱心網友回復:
您可以使用[AllowAnonymous]方法上的屬性來禁用身份驗證檢查。
然后,創建一個ActionFilterAttribute并將其應用于相同的方法:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
namespace YourNameSpace
{
public class RequireYourKeyHeader : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(!filterContext.HttpContext.Request.Headers.TryGetValue("YourKey", out string headerValue))
{
filterContext.Result = new BadRequestObjectResult("missing headr value");
}
// TODO: check if value passed in the header is actually valid
}
}
}
申請[RequireYourKeyHeader]
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/426504.html
