4.5K Star 42.8K Fork 12.6K

GVPlengleng / pig

 / 详情

聊聊pigx、pig token生成的区别

已完成
成员
创建于  
2020-06-07 16:06
  • pigx 生成
{
    "access_token":"c79ad7c3-9ab1-472a-9c9f-ebcef9a517cd",
    "token_type":"bearer",
    "refresh_token":"0521360c-d028-4535-a454-ef61ce404bd8",
    "expires_in":41965,
    "scope":"server",
    "license":"made by pigx"
}
  • pig 生成
{
    "access_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWNlbnNlIjoibWFkZSBieSBwaWciLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInNlcnZlciJdLCJleHAiOjE1NDMwMDg3OTgsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BRE1JTiIsIlJPTEVfVVNFUiJdLCJqdGkiOiI5Njg0MTZjNy05YTY1LTRkM2YtYTUzZS1hN2ViOTUzMWFlNWEiLCJjbGllbnRfaWQiOiJwaWcifQ.-Ke8WdyfhvuJre3SMBxkAzmPtW0EtcGVlb9MlYNiQR8",
    "token_type":"bearer",
    "refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsaWNlbnNlIjoibWFkZSBieSBwaWciLCJ1c2VyX25hbWUiOiJhZG1pbiIsInNjb3BlIjpbInNlcnZlciJdLCJhdGkiOiI5Njg0MTZjNy05YTY1LTRkM2YtYTUzZS1hN2ViOTUzMWFlNWEiLCJleHAiOjE1NDU1NTc1OTgsInVzZXJJZCI6MSwiYXV0aG9yaXRpZXMiOlsiUk9MRV9BRE1JTiIsIlJPTEVfVVNFUiJdLCJqdGkiOiI1MDE2NTdkMS1lM2VkLTQ1ODItYTVlYi1kNDU0ODIwYzg0MmUiLCJjbGllbnRfaWQiOiJwaWcifQ.uQ9WMqezSReAPbRm177u6-oEPCO1pPPdSVW5EUTrz_o",
    "expires_in":40536,
    "scope":"server",
    "license":"made by pig",
    "userId":1,
    "jti":"968416c7-9a65-4d3f-a53e-a7eb9531ae5a"
}
  • 源码的角度来看 这两个实现类的区别
  1. pig 只有网关是资源服务器,这也就意味着只能在网关中获取的SecurityContext进而获取到用户的全部信息,而 下游的业务微服务只能通过,网关转发过的去请求从header中获取jwt token 解析哪位用户。
  2. 如下图,pigx 整体架构满足oauth2,所有的下游业务微服务都作为资源服务,在整个流程中都能从securityContext中获取到用户的全部信息,所以不依赖jwt解析。
  3. jwt 自身的安全问题,对一些业务场景 需要自己扩展实现,比如踢人等。
  4. 如何扩展pigx支持jwt ,非常简单 认证服务器配置配置 JwtAccessTokenConverter即可(后果自负)
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

	@Override
	public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
		//token增强配置
		TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
		tokenEnhancerChain.setTokenEnhancers(
			Arrays.asList(tokenEnhancer(),new JwtAccessTokenConverter());
		endpoints
			.tokenEnhancer(tokenEnhancerChain);
	}

评论 (8)

Github Action 创建了任务
Github Action 关联仓库设置为pig4cloud.com/pig
展开全部操作日志

不想聊,再见:smile:

pigx配置jwt之后,是否意味着一次请求只会在网关进行token认证,其余资源服务器还会向认证服务器发送认证请求吗

@carrypan pigx 不会再网关认证的 , 还是资源服务器去认证。和你token 什么格式没有关系

冷总,我从swagger上看:每个不同的微服务,去请求登陆的时候,都是用的网关的地址:
token-url-list:
- http://pigx-gateway:9999/auth/oauth/token

自己新建一个demo后,在当前demo的 swagger 的 Authorize 登陆,还是会进网关的那个TokenEndPoint,按照您说的,和pig的区别,后端服务也是资源服务器,会获得用户的全部信息;
我的理解是应该请求 demo 的那个TokenEndPoint,而不是网关...
现在的情况还是会走网关的...这样,网关还是起到了认证授权的作用,压力还是都在网关;下游的服务只是拿到全部的用户信息,而并没有分担网关的认证授权压力。麻烦冷总解惑一下...

网关只做了流量转发。

Github Action 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(1)
393021 springcloud777 1591517090
Java
1
https://gitee.com/log4j/pig.git
git@gitee.com:log4j/pig.git
log4j
pig
pig

搜索帮助