ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

asp.net core 自动刷新token还有跨域的问题

2022-04-24 16:35:03  阅读:143  来源: 互联网

标签:core asp 跨域 Value token context var Type


在服务端刷新token,放到响应header里面,前端死活得不到值。最后发现因为用的是自定义newtoken,前端在跨域中读不到。

加入扩展头跨域,解决问题。

两个问题

1>服务器自动刷新token

public class FlushTokenMiddleware
{
private readonly RequestDelegate _next;
private readonly JWTHelperService jWTHelperService;

public FlushTokenMiddleware(RequestDelegate next,
JWTHelperService JWTHelperService)
{
_next = next;
jWTHelperService = JWTHelperService;

}

public async Task InvokeAsync(HttpContext context)
{
JwtSecurityToken token = null;
string authorization = context.Request.Headers["Authorization"];

if (!string.IsNullOrEmpty(authorization)
&& authorization.StartsWith("Bearer "))
token = new JwtSecurityTokenHandler().
ReadJwtToken(authorization.Substring("Bearer ".Length));

//刷新Token
if (token != null
&& token.ValidTo > DateTime.UtcNow
&& token.ValidTo.AddMinutes(-100) <= DateTime.UtcNow)
{
Console.WriteLine(DateTime.UtcNow.ToString("F"));

var username = context.User.Claims.FirstOrDefault(q => q.Type == SysDefineConstValue.UserName);
var rolename = context.User.Claims.FirstOrDefault(q => q.Type == SysDefineConstValue.Role);
var roleid = context.User.Claims.FirstOrDefault(q => q.Type == SysDefineConstValue.RoleId);
var userid = context.User.Claims.FirstOrDefault(q => q.Type == SysDefineConstValue.UserId);
var deptid = context.User.Claims.FirstOrDefault(q => q.Type == SysDefineConstValue.ShopId);

var jwttoken = jWTHelperService.CreateOrFreshToken(null, username?.Value??"",
rolename?.Value??"", userid?.Value??"", deptid?.Value??"",
roleid?.Value??"");

context.Response.Headers.Add("newtoken",jwttoken);
}
await _next(context);

}

扩展

public static class FlushTokenMiddlewareExtend
{
public static IApplicationBuilder UseFlushToken(
this IApplicationBuilder builder)
{
return builder.UseMiddleware<FlushTokenMiddleware>();
}
}

 

注册

 

app.UseAuthorization();
app.UseFlushToken();

 

2>跨域设置

services.AddCors(options =>
options.AddPolicy(MyAllowSpecificOrigins,
p => p.AllowCredentials()
.AllowAnyMethod()
.SetIsOriginAllowed(_ => true)
.AllowAnyHeader()
.WithExposedHeaders("newtoken")
.SetPreflightMaxAge(TimeSpan.FromSeconds(60)))
);//跨域

 

3>vue拦截获取

if (response.headers.newtoken) {       setToken(response.headers.newtoken)     }

标签:core,asp,跨域,Value,token,context,var,Type
来源: https://www.cnblogs.com/forhell/p/16186379.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有