接下来我们在来看下AddJwtBearer,这个与AddOpenIdConnect不太一样,后者是远程发起身份认证请求是一种主动发起式的,多用于web等客户端,验证发生在身份认证服务端,而前者是一种被动接受,比如接受一个Token并根据某种规则校验,多用于服务性质的接口,而校验发生在服务本生
与前面一样,我们只关注JwtBearerHandler的处理即可
在JwtBearer中,我们可以通过自定义Token,并不一定需要接受来之Headers中 Authorization 中的 Bearer
先说第一种情况
public virtual Task MessageReceived(MessageReceivedContext context) => OnMessageReceived(context); public virtual Task TokenValidated(TokenValidatedContext context) => OnTokenValidated(context);
我们重写JwtBearerEvents中的相关方法就可以指定我们自己的Token接受来源以及校验方式,这里需要注意的如果我们的服务需要跟对的用户身份信息的话还需要将需要的身份信息写入到token中以便于解析后写入到Principal身份信息中,最后在代码中处理业务
当然第二种方式就是通用的接受Headers中 Authorization 中的 Bearer,通过JwtBearer中的配置的信息SigningKeys、ValidIssuers 然后使用SecurityTokenValidators去读取Token信息,如果OK 那么同之前一样将身份信息写到 Principal,如果需要保存Token,这里采用的就是 Token信息写入到了 access_token 中,这里服务中如果需要得到这个access_token的话需要这样来处理
string token = await httpContextAccessor.HttpContext.GetTokenAsync("access_token");
通过得到这个token,我们就可以在一个服务中去请求其他的服务