SpringBoot 相关问题请教!

2020-03-09 16:12:04 +08:00
 Vanes

想来请教一下各位大佬,如下场景如何实现:

现在服务器有两个 SpringBoot 应用 A 和 B,现在 A 应用需要调用 B 的相关读写接口对某一类数据读写, 但是不希望外部请求直接访问 A 应用提供的 API 来对该类数据进行读写,即该类数据只能由 B 来调用, 个人理解为就是应用 A 对应用 B 授权,然后只有授权了应用才能访问相应的 API,其他外部请求直接拒绝。

不知道这种场景有什么比较好的实现方式。或者业界有没有什么比较标准的做法?

4070 次点击
所在节点    Java
32 条回复
Resource
2020-03-09 16:14:53 +08:00
没看懂,我可能语文不太好
tcfenix
2020-03-09 16:16:37 +08:00
a 弄一个 auth key 的库,然后对每个可以调用 a 的业务身份随机生成一个 auth key,
b 请求的时候带着业务身份跟 auth key
lincya
2020-03-09 16:16:46 +08:00
感觉跟缺个登录机制一样。。。
zhenjiachen
2020-03-09 16:18:13 +08:00
你只要是接口就可能被别人调用,可以用签名或者 oauth2 调用,只要 key 不泄漏别人可以调用你的接口,但是肯定会被拦截
manami
2020-03-09 16:18:33 +08:00
怎么感觉就是单点登录集成机制?
Vanes
2020-03-09 16:22:41 +08:00
@Resource 可能是我描述的不太清楚。就是 想实现一个 API 只能让指定客户端来访问,不引入额外的用户角色
Vanes
2020-03-09 16:25:18 +08:00
@zhenjiachen 所以可能还是跟普通的带 token 来访问资源的一样是吗? 因为总感觉这样的话有后门
Vanes
2020-03-09 16:26:44 +08:00
@tcfenix 这样的话是不是还是 a 的业务身份在起关键作用。
goldpumpkin
2020-03-09 16:28:19 +08:00
请求的时候,带上系统标识,进行校验
Kontinue
2020-03-09 16:28:54 +08:00
API 做个认证不就行了?简单的搞个 token,负载的走阿里云 API 那套。
https://help.aliyun.com/document_detail/29475.html?spm=a2c4g.11186623.2.13.2aa44ae01LxLfD
Kontinue
2020-03-09 16:29:40 +08:00
复杂的
HangoX
2020-03-09 16:30:05 +08:00
不用那么麻烦啊。。。你内部用内部域名访问,不是来自这几个域名的直接 ban 掉不就好了。
tinybaby365
2020-03-09 16:31:48 +08:00
实现一个 HandlerInterceptor,验证请求方(基于 IP or JWT,随你怎么搞),验证通过的在 HttpServletRequest 里 setAttribute(加个 trusted 标记)。在你的那个 RestController 接口读取 HttpServletRequest 的那个 attribute,判断是否受信。
Vanes
2020-03-09 16:32:21 +08:00
@HangoX 那想请教下,如果本地改了 host 呢,是不是就可以伪装了?(当然内部域名好像别人也不知道
Vanes
2020-03-09 16:33:58 +08:00
@tinybaby365 就和楼上有位老哥的想法一致,用 request 的参数来控制。 然后是不是只需要担心参数是否被猜到?
tinybaby365
2020-03-09 16:35:39 +08:00
@tinybaby365 此方法的改进是,自定义一个 annotation,HandlerInterceptor 里面判断是否有这个 annotation,有则验证,否则直接 sendError。你的接口加上这个 annotation 就是限制内部访问。
sagaxu
2020-03-09 16:36:28 +08:00
硬是没看明白是 a 调用 b,还是 b 调用 a
tinybaby365
2020-03-09 16:38:25 +08:00
@Vanes JWT + https 了解一下。或者 Mutual TLS。
renyijiu
2020-03-09 16:39:13 +08:00
我们系统是 header 增加一个特定参数,带有系统 token 校验,另外自定义个注解 @Internal 标识内部接口
Vanes
2020-03-09 16:40:06 +08:00
@tinybaby365 所以就得改写原有的 Token 颁发机制,里面加一个类似于 trusted 的标记的属性是吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/651234

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX