现在有 2 个独立的项目 app1 和 app2 。都是采用 jwt 的方式进行认证。
如何带着 app1 的 token 去访问 app2 的接口时 无需再次认证。
我想要的方案如下:
1. 两个项目用一套认证逻辑,同样的 key 加密或解密 token.(感觉有点 low)
2. 集成 spring cloud 在网关进行权限认证
3. oauth2
4. cas
你们认为那种方案比较合适,或者还有其他什么方式,帮忙给点建议,谢谢。
1
MikeLei 2020-04-23 19:55:15 +08:00
我也是采用 jwt,集成 Shiro,把 token 跟权限缓存到 redis 里面,两个系统用同一个 redis 就不需要再次认证啦。
|
2
Jafee 2020-04-23 20:39:23 +08:00
可以用网关统一认证,然后再转发到相关服务。
|
3
xuanbg 2020-04-23 20:48:16 +08:00
正规的做法是 2 楼的方案。当然 1 楼的也能用,但不推荐。
|
4
CoderGeek 2020-04-23 20:51:59 +08:00
oauth2
|
5
CoderGeek 2020-04-23 20:52:23 +08:00
做统一鉴权服务 我的主页有类似的 demo
|
6
CoderGeek 2020-04-23 20:54:40 +08:00
仔细看了下 我说的不太好 , 这种 token 分发要收口在一个服务 还要维护鉴权关系 做一个分发鉴权的系统 或者网关拦截
两个 token 还要有权限配置 |
7
wangxiaoaer 2020-04-23 21:05:04 +08:00 via Android
@Jafee 如果网关做认证那是不是相当于网关开始涉及业务了?
|
8
huijiewei 2020-04-23 22:03:53 +08:00
@wangxiaoaer 网关只做认证
|
9
Kyle18Tang 2020-04-24 00:36:41 +08:00
OAuth2
|
10
jzmws 2020-04-24 08:52:20 +08:00
最外面套一个网关 其他模块都不做认证
|
11
mocxe2vwww OP @xuanbg 确实,还是网关最合适。
|
12
abcbuzhiming 2020-04-24 11:10:37 +08:00
想简单就 1 楼,redis 缓存 jwt,正统一点的是 2 楼
|
13
securityCoding 2020-04-24 11:20:37 +08:00 1
@wangxiaoaer 鉴权不算具体业务,正确的做法就是通过网关,对底层的微服务屏蔽登录态 /权限相关的逻辑. 网关层面鉴权成功将登录态属性设置到上下文中( http-header/rpc-context) ,底层服务直接获取属性就好 .
|
14
securityCoding 2020-04-24 11:21:49 +08:00
springboot 转 spring-cloud 几乎无成本 ,阿里开源的 nacos 同时做配置中心 /注册中心非常方便
|
15
mocxe2vwww OP @securityCoding 我看了下你说的 nacos,感觉是阿里云 API 网关的简化版。
|
16
securityCoding 2020-04-25 10:03:47 +08:00
@mocxe2vwww nacos 跟网关不是一个领域的东西 ,你可以这样理解他综合了 Zookeeper 和 Apollo
|