解析token中的信息 ,比如token中的userid
Posted 追梦少年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解析token中的信息 ,比如token中的userid相关的知识,希望对你有一定的参考价值。
介绍
某些情况我们需要解析token中的信息,比如token中的用户id,方便我们后面用于查询。
上一篇 我们讲了如何生成token,登录鉴权,怎么验证接口权限的。接下来我们讲讲如何获取token中的信息
基本思路:
在过滤器中将token中的用户信息存放到context.HttpContext.User
或者Thread.CurrentPrincipal
中。使用时通过扩展方法或者静态方法获取用户信息。
本篇将演示通过context.HttpContext.User
存放用户信息
新建过滤器TokenActionFilter
,代码如下:
public class TokenActionFilter : ActionFilterAttribute
public override void OnActionExecuting(ActionExecutingContext context)
var test = context.HttpContext.Request.Path;
string bearer = context.HttpContext.Request.Headers["Authorization"].FirstOrDefault();
if (string.IsNullOrEmpty(bearer) || !bearer.Contains("Bearer")) return;
string[] jwt = bearer.Split(\' \');
var tokenObj = new JwtSecurityToken(jwt[1]);
var claimsIdentity = new ClaimsIdentity(tokenObj.Claims);
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
context.HttpContext.User = claimsPrincipal;
添加扩展方法GetUserId
,代码如下:
public static class TokenHelper
public static int GetUserId(this ClaimsPrincipal claimsPrincipal)
try
var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == "UserId");
if (claim == null || string.IsNullOrEmpty(claim.Value))
return 0;
return int.Parse(claim.Value);
catch
return 0;
然后就是获取用户id的方法:
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
private readonly IHttpContextAccessor _httpContextAccessor;
public UserController (IHttpContextAccessor httpContextAccessor)
_httpContextAccessor = httpContextAccessor;
/// <summary>
/// 获取UserId
/// </summary>
/// <returns></returns>
[HttpGet("GetUser")]
[TokenActionFilter]
[Authorize(AuthenticationSchemes = "Bearer")]
[Authorize(Roles = "Admin")]
public int GetUser()
var id = _httpContextAccessor.HttpContext.User.GetUserId();
return id;
此处需要注入IHttpContextAccessor 服务,通过IHttpContextAccessor 获取用户信息。
最后还需要在Startup,注册IHttpContextAccessor 服务和TokenActionFilter过滤器
public void ConfigureServices(IServiceCollection services)
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddScoped<TokenActionFilter>();
// 其他服务
注意:
一定要记得在Startup
中注册IHttpContextAccessor
。
如果需要获取用户其他信息,可以自行扩展。
app使用微信h5页面,获取url中的token并使用
参考技术A app中部分页面要使用微信h5页面,其中一些servise请求需要自定义token一开始想在ouath2.js里修改openid设置的,但是后来采用的其他的办法。
openidCache.set() 是存储用户信息的方法
先获取url,进行解析,看query中是否存在token
只有没有获取到用户信息且query中没有token,才进入登陆页面oauth2.js
如果query中有token,就重新请求接口,获取用户信息并缓存。
优先获取query中的token,其次获取缓存中的token
以上是关于解析token中的信息 ,比如token中的userid的主要内容,如果未能解决你的问题,请参考以下文章