gpt4 book ai didi

c# - 没有 Exp 和默认 Prop 的 dotnet 中的 Jwt token

转载 作者:行者123 更新时间:2023-12-04 03:31:40 26 4
gpt4 key购买 nike

我正在使用 .Net core 3.1 制作一个身份 api,我注册并让我的用户登录,并且我需要传递一个 JWT token 供前端使用。

我已经用我需要的声明生成了我的 token ,但我需要 token 永不过期(我知道这不是一个好习惯,但我只是在执行命令),而且我还需要删除 token 的默认属性,例如nbf 和 iat。

我正在使用 Microsoft.AspNetCore.Authentication.JwtBearer 库我在文档中没有找到太多,所以我什至不知道这是否可能

最佳答案

您是否尝试过在 TokenValidationParameters 中将 ValidateLifetime 设置为 false?这将允许任何到期日期。

您可以做的另一件事是将 RequireExpirationTime 设置为 false,这意味着 exp 不需要出现在 token 中。

因此,如果您想将其配置为允许 token 不包含过期时间,但如果 exp 属性存在,您仍要验证过期时间,您可以这样做:

.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateLifetime = true,
RequireExpirationTime = false,
};
});

此外,如果需要,您可以在同一位置设置自定义生命周期验证器:

.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
// ... Other settings

LifetimeValidator = (notBefore, expiration, token, parameters) =>
{
// Decide if expiration is valid. Don't forget about clock skew.
}
};
});

虽然不清楚您是否控制了 token 发行者或 token 消费者或两者。上述所有解决方案都假设您可以控制 token 消费者。

如果您只控制发行人,那就有点困难了。我想到的是设置一个非常遥远的 future 的 exp 日期。如果以后需要使 token 无效,我想您可以做的一件事是更改发行者和消费者用来创建/验证签名的加密 key 。

在颁发者端删除 exp、iat 和 nbf

至于从 token 中删除属性,您可以将它们从 token 生成中保留下来。假设您正在进行手动 token 生成,您需要配置它,例如像这样:

var tokenOptions = new JwtSecurityToken(
issuer: jwtIssuer,
audience: jwtAudience,
claims: new List<Claim>() {
new Claim(JwtRegisteredClaimNames.Sub, userName),
},
// 'expires' not set
signingCredentials: new SigningCredentials(new SymmetricSecurityKey(Convert.FromBase64String(someKey)), SecurityAlgorithms.HmacSha256)
);

以这种方式生成它不会包含 exp、iat 或 nbf(本地确认)。

当然,如果您碰巧通过例如生成它Identity Server,这是一个不同的故事,但后来你忘了提到它(你提到了 Identity,它是一个没有内置 JWT token 生成功能的成员(member)系统)。

关于c# - 没有 Exp 和默认 Prop 的 dotnet 中的 Jwt token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66691366/

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