我已经使用 JWT + HttpOnly Cookies 在我的 AspNetCore API 应用程序中成功设置了身份验证,灵感来自this https://stormpath.com/blog/token-authentication-asp-net-core文件和this https://stackoverflow.com/questions/37398276/how-can-i-validate-a-jwt-passed-via-cookies topic.
现在我正在尝试集成刷新令牌功能。
我发现了this https://www.blinkingcaret.com/2018/05/30/refresh-tokens-in-asp-net-core-web-api/教程,但它仅基于 JWT 身份验证,我陷入了应该添加令牌过期响应的标头:
options.Events = new JwtBearerEvents
{
OnAuthenticationFailed = context =>
{
if (context.Exception.GetType() == typeof(SecurityTokenExpiredException))
{
context.Response.Headers.Add("Token-Expired", "true");
}
return Task.CompletedTask;
}
};
因为我使用的是基于 cookie 的身份验证,所以我使用重定向登录事件而不是身份验证失败时事件,以及上下文.Exception.GetType()我无法使用该方法。
所以我不知道如何确定是否需要刷新令牌。
我该如何解决这个问题?
UPDATE 1
这就是我实际做的:
options.Events.OnRedirectToLogin = context =>
{
if (context.Request.Path.StartsWithSegments("/api"))
context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
else
context.Response.Redirect(context.RedirectUri);
return Task.FromResult(0);
};
这是我要添加的地方令牌过期标题,但基于什么?
使用中间件将 cookie 添加到不记名标头,如下所示:
app.Use(async (context, next) =>
{
var token = context.Request.Cookies["access_token"];
if (!string.IsNullOrEmpty(token)) context.Request.Headers.Add("Authorization", "Bearer " + token);
await next();
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)