Dar*_*Jam 9 authentication token jwt .net-core
我正在构建一个.net核心web api.
前言 - 我已根据https://stormpath.com/blog/token-authentication-asp-net-core和https://dev.to/samueleresca/developing-token-authentication-using-aspnet-实施了令牌身份验证核心.我还在github上阅读了一些问题,在这里也是如此.
这也派上用场了https://goblincoding.com/2016/07/24/asp-net-core-policy-based-authorisation-using-json-web-tokens/.
实施之后,我感觉我错过了一些东西.
我创建了一个位于Web客户端的简单Angular应用程序.当我进行身份验证时,会向客户端发送令牌.我现在将它存储在会话中(仍然在开发中,因此将解决以后存储它的安全问题).
不确定这个(JWT(JSON Web Token)自动延长到期时间)是有用的,因为我没有实现刷新令牌,据我所见.
我注意到,当我调用logout,然后再次重新登录时,会向客户端发送一个新令牌 - 正如预期的那样.但是,如果令牌到期时间已过(我将其设置为1分钟进行测试)然后刷新页面,则令牌似乎在我的应用程序中保持不变.即好像令牌永不过期?!
我本来希望客户端返回401 Unauthorized错误,然后我可以处理强制用户重新进行身份验证.
这不是这应该如何工作?是否有一些自动刷新令牌魔法在默认的背景中进行(我没有在教程中明确设置任何刷新令牌的概念)?或者我错过了一些关于令牌身份验证的概念?
此外 - 如果这是一个永久刷新的令牌,如果令牌被泄露,我是否应该关注安全性?
谢谢你的帮助
DJD*_*JDJ 25
我相信这与JwtBearerOptions中的ClockSkew有关.
更改为TimeSpan.Zero,因为我认为默认设置为5分钟(尽管不是100%肯定).
我在下面发布了一些示例代码,放在Startup.cs => Configure中.
app.UseJwtBearerAuthentication(new JwtBearerOptions()
{
AuthenticationScheme = "Jwt",
AutomaticAuthenticate = true,
AutomaticChallenge = true,
TokenValidationParameters = new TokenValidationParameters()
{
ValidAudience = Configuration["Tokens:Audience"],
ValidIssuer = Configuration["Tokens:Issuer"],
ValidateIssuerSigningKey = true,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Tokens:Key"])),
ValidateLifetime = true,
ClockSkew = TimeSpan.Zero
}
});
Run Code Online (Sandbox Code Playgroud)
Thi*_*rry 12
如果您的到期时间是远远超过默认值(5分钟),或在一组像我时间了,它仍然认为过期的标记为有效,并设置ClockSkew到TimeSpan.Zero没有任何影响,请确保您有属性
ValidateLifetime
Run Code Online (Sandbox Code Playgroud)
设置true为我已经设置为false导致问题的原因,这完全有道理,但这是一个简单的疏忽。
services.AddAuthentication(option =>
{
option.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
option.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = Configuration["JwtToken:Issuer"],
ValidAudience = Configuration["JwtToken:Issuer"],
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes(Configuration["JwtToken:SecretKey"]))
};
});
Run Code Online (Sandbox Code Playgroud)
小智 8
图书馆本身还有 5 分钟的额外延迟。
如果您将到期时间设置为 1 分钟,则总数将为 6 分钟。如果您设置为 1 小时,则总数将为 1 小时 5 分钟。
| 归档时间: |
|
| 查看次数: |
5920 次 |
| 最近记录: |