如何在 Cockie 存储中存储 Jwt 令牌并允许 [Auhorize] 仅检查该 cookie
How to Store Jwt Token in Cockie Storage and Allow [Auhorize] to check only that cookie
希望你们都好。我在 asp.net 核心 2.1 中遇到会话超时,没有找到任何解决方案。现在我正在尝试使用 Jwt 进行身份验证我看到人们只将 Jwt 用于 Api 但我也想将它用于我的网站请求。问题是如何将生成的令牌存储在 cookie 存储中,并允许 [Authorize] 属性仅检查该 coockie 或令牌。我很困惑和卡住了。
根据这种情况,可以添加一个事件OnMessageReceived
从cookie中接收token。
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie(config=>
{
config.Cookie.Name = "authname";
})
.AddJwtBearer(o =>
{
o.Events = new JwtBearerEvents()
{
//get cookie value
OnMessageReceived = context =>
{
var a = "";
context.Request.Cookies.TryGetValue("authname", out a);
context.Token = a;
return Task.CompletedTask;
}
};
o.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = JwtClaimTypes.Name,
RoleClaimType = JwtClaimTypes.Role,
ValidIssuer = "http://localhost:5200",
ValidAudience = "api",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("---this is a long key---"))
//...
};
});
在控制器中,生成令牌时,将令牌附加到此 cookie。
public IActionResult Authenticate()
{
//...
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
Response.Cookies.Append("authname", tokenString);
return View();
}
在每次请求中,都会携带这个cookie。该事件将从请求中提取其值,并且 [Authorize] 属性将检查令牌是否有效。
希望你们都好。我在 asp.net 核心 2.1 中遇到会话超时,没有找到任何解决方案。现在我正在尝试使用 Jwt 进行身份验证我看到人们只将 Jwt 用于 Api 但我也想将它用于我的网站请求。问题是如何将生成的令牌存储在 cookie 存储中,并允许 [Authorize] 属性仅检查该 coockie 或令牌。我很困惑和卡住了。
根据这种情况,可以添加一个事件OnMessageReceived
从cookie中接收token。
services.AddAuthentication(x =>
{
x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie(config=>
{
config.Cookie.Name = "authname";
})
.AddJwtBearer(o =>
{
o.Events = new JwtBearerEvents()
{
//get cookie value
OnMessageReceived = context =>
{
var a = "";
context.Request.Cookies.TryGetValue("authname", out a);
context.Token = a;
return Task.CompletedTask;
}
};
o.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = JwtClaimTypes.Name,
RoleClaimType = JwtClaimTypes.Role,
ValidIssuer = "http://localhost:5200",
ValidAudience = "api",
IssuerSigningKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes("---this is a long key---"))
//...
};
});
在控制器中,生成令牌时,将令牌附加到此 cookie。
public IActionResult Authenticate()
{
//...
var token = tokenHandler.CreateToken(tokenDescriptor);
var tokenString = tokenHandler.WriteToken(token);
Response.Cookies.Append("authname", tokenString);
return View();
}
在每次请求中,都会携带这个cookie。该事件将从请求中提取其值,并且 [Authorize] 属性将检查令牌是否有效。