想来请教一下各位大佬,如下场景如何实现:
现在服务器有两个 SpringBoot 应用 A 和 B,现在 A 应用需要调用 B 的相关读写接口对某一类数据读写, 但是不希望外部请求直接访问 A 应用提供的 API 来对该类数据进行读写,即该类数据只能由 B 来调用, 个人理解为就是应用 A 对应用 B 授权,然后只有授权了应用才能访问相应的 API,其他外部请求直接拒绝。
不知道这种场景有什么比较好的实现方式。或者业界有没有什么比较标准的做法?
想来请教一下各位大佬,如下场景如何实现:
现在服务器有两个 SpringBoot 应用 A 和 B,现在 A 应用需要调用 B 的相关读写接口对某一类数据读写, 但是不希望外部请求直接访问 A 应用提供的 API 来对该类数据进行读写,即该类数据只能由 B 来调用, 个人理解为就是应用 A 对应用 B 授权,然后只有授权了应用才能访问相应的 API,其他外部请求直接拒绝。
不知道这种场景有什么比较好的实现方式。或者业界有没有什么比较标准的做法?
|
ResourceMar 9, 2020
1
没看懂,我可能语文不太好
|
|
tcfenixMar 9, 2020
2
a 弄一个 auth key 的库,然后对每个可以调用 a 的业务身份随机生成一个 auth key,
b 请求的时候带着业务身份跟 auth key |
|
lincyaMar 9, 2020
3
感觉跟缺个登录机制一样。。。
|
|
zhenjiachenMar 9, 2020
4
你只要是接口就可能被别人调用,可以用签名或者 oauth2 调用,只要 key 不泄漏别人可以调用你的接口,但是肯定会被拦截
|
|
manamiMar 9, 2020 via Android
5
怎么感觉就是单点登录集成机制?
|
|
7
@zhenjiachen 所以可能还是跟普通的带 token 来访问资源的一样是吗? 因为总感觉这样的话有后门
|
|
goldpumpkinMar 9, 2020
9
请求的时候,带上系统标识,进行校验
|
|
KontinueMar 9, 2020
10
API 做个认证不就行了?简单的搞个 token,负载的走阿里云 API 那套。
https://help.aliyun.com/document_detail/29475.html?spm=a2c4g.11186623.2.13.2aa44ae01LxLfD |
|
KontinueMar 9, 2020
11
复杂的
|
|
HangoXMar 9, 2020
12
不用那么麻烦啊。。。你内部用内部域名访问,不是来自这几个域名的直接 ban 掉不就好了。
|
|
tinybaby365Mar 9, 2020
13
实现一个 HandlerInterceptor,验证请求方(基于 IP or JWT,随你怎么搞),验证通过的在 HttpServletRequest 里 setAttribute(加个 trusted 标记)。在你的那个 RestController 接口读取 HttpServletRequest 的那个 attribute,判断是否受信。
|
|
15
@tinybaby365 就和楼上有位老哥的想法一致,用 request 的参数来控制。 然后是不是只需要担心参数是否被猜到?
|
|
tinybaby365Mar 9, 2020
16
@tinybaby365 此方法的改进是,自定义一个 annotation,HandlerInterceptor 里面判断是否有这个 annotation,有则验证,否则直接 sendError。你的接口加上这个 annotation 就是限制内部访问。
|
|
sagaxuMar 9, 2020 via Android
17
硬是没看明白是 a 调用 b,还是 b 调用 a
|
|
tinybaby365Mar 9, 2020
18
@Vanes JWT + https 了解一下。或者 Mutual TLS。
|
|
20
@tinybaby365 所以就得改写原有的 Token 颁发机制,里面加一个类似于 trusted 的标记的属性是吗?
|
|
0rayMar 9, 2020
23
为啥一定要用调 api, 作成 rpc 通信不好吗, 集成 dubbo 很容易的.
|
|
bigdogbigpigMar 9, 2020
24
给一把钥匙不就行了。。。
|
|
NizumaEijiMar 9, 2020
25
写过滤器\拦截器带个鉴权也行
或者直接 b 机器上本地改下 dns a 机器的 ng 上弄个规则 特定的接口拒绝外网 ip 访问也行吧 |
|
m1ch3ngMar 9, 2020
26
用 token 的机制不就可以(必须携带某些请求头)
|
|
mosliuMar 9, 2020
27
做鉴权不行么 ?
|
|
wozhizuiMar 10, 2020
28
这应该就是加权限的 api 吧,行业软件的 api 经常都这么搞,给个调用者一个 key,请求的时候带上 key,然后应用 B 返回 200 ok 或者 400 不 ok。
已经有挺专业的回答了。 |
|
CRUDMar 10, 2020
29
1、A 应用只对 B 应用提供服务的情况下可关闭外网访问,B 请求 A 走内网。
2、A 应用除了对 B 应用提供服务,还需要对其他应用提供服务的情况下引入鉴权机制,可以是 token 也可以是 auth key,本质上只是 A 服务颁发给调用它的客户端的一个凭证,请求时带上该凭证,验证通过执行剩余逻辑,验证错误拒绝请求而已。 |
|
LeiothrixMar 10, 2020
30
B 应用配置 Spring Security 规则,只暴露该暴露出去的接口,A 应用后台登录后可以无阻碍访问 B 应用未暴露(保护)接口。
|
|
HansCathyMar 10, 2020
31
我理解 B 是对外接口,A 是对内接口。在网关配置 A 为登录验证,B 为匿名验证 就可以了
|
|
xyshmilyMar 10, 2020
32
ng 白名单
|