gpt4 book ai didi

c# - 在 Hangfire 中设置 JWT Bearer Token 授权/认证

转载 作者:可可西里 更新时间:2023-11-01 08:29:24 25 4
gpt4 key购买 nike

如何在 Hangfire 中配置 Bearer Token 授权/认证?

我有一个自定义身份验证过滤器,它在初始请求时读取身份验证 token ,但所有其他请求(Hangfire 调用)都返回 401。

如何将 Auth Token 附加到每个请求的 header Hangfire是吗?

token 过期后如何刷新?

最佳答案

可能有点晚了,但这里有一个可能的解决方案。这个想法来自这篇文章:https://discuss.hangfire.io/t/using-bearer-auth-token/2166

基本思想是将您的 jwt 添加为查询参数,然后将其收集在 JwtBearerOptions.Events 中并将 MessageReceivedContext.Token 设置为等于它。这将适用于第一个请求,但随后的请求不会附加查询参数,因此我们需要在获取它时将 jwt 添加到 cookie。所以现在我们检查查询参数中的 jwt。如果我们找到它,则将其添加到 cookie 中。如果没有在 cookie 中检查它。在配置服务中:

services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;

})
.AddJwtBearer((Action<JwtBearerOptions>)(options =>
{
options.TokenValidationParameters =
new TokenValidationParameters
{
LifetimeValidator = (before, expires, token, param) =>
{
return expires > DateTime.UtcNow;
},
IssuerSigningKey = JwtSettings.SecurityKey,
ValidIssuer = JwtSettings.TOKEN_ISSUER,
ValidateIssuerSigningKey = true,
ValidateIssuer = true,
ValidateAudience = false,
NameClaimType = GGClaimTypes.NAME
};

options.Events = new JwtBearerEvents
{
OnMessageReceived = mrCtx =>
{
// Look for HangFire stuff
var path = mrCtx.Request.Path.HasValue ? mrCtx.Request.Path.Value : "";
var pathBase = mrCtx.Request.PathBase.HasValue ? mrCtx.Request.PathBase.Value : path;
var isFromHangFire = path.StartsWith(WebsiteConstants.HANG_FIRE_URL) || pathBase.StartsWith(WebsiteConstants.HANG_FIRE_URL);

//If it's HangFire look for token.
if (isFromHangFire)
{
if (mrCtx.Request.Query.ContainsKey("tkn"))
{
//If we find token add it to the response cookies
mrCtx.Token = mrCtx.Request.Query["tkn"];
mrCtx.HttpContext.Response.Cookies
.Append("HangFireCookie",
mrCtx.Token,
new CookieOptions()
{
Expires = DateTime.Now.AddMinutes(10)
});
}
else
{
//Check if we have a cookie from the previous request.
var cookies = mrCtx.Request.Cookies;
if (cookies.ContainsKey("HangFireCookie"))
mrCtx.Token = cookies["HangFireCookie"];
}//Else
}//If

return Task.CompletedTask;
}
};

}));

HangFire 身份验证过滤器:

 public class HangFireAuthorizationFilter : IDashboardAuthorizationFilter
{

public bool Authorize(DashboardContext context)
{
var httpCtx = context.GetHttpContext();

// Allow all authenticated users to see the Dashboard.
return httpCtx.User.Identity.IsAuthenticated;

}//Authorize

}//Cls

关于c# - 在 Hangfire 中设置 JWT Bearer Token 授权/认证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39350980/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com