如何集成自带用户系统的开源库与当前系统登录态保持一致?
目前再给系统找一个网盘开源库,库有很多,但是都有自己对用户系统,如果我接入了它们对应的后台服务,就有鉴权问题,比如说
我在 A 网站要上传文件,但是这个文件要 B 网站的 cookie,我在确保 A 网站的鉴权通过的情况下怎么知道 B 网站是否登录呢?即使 A 网站登录操作时同时登录 B 网站的情况下,等到上传文件的时候 B 网站失效了怎么办?
目前想到的办法就是涉及 B 网站的 API 统一加上错误拦截器,在里面判断是不是拿到 401 错误码,然后保存 cookie 在 A 网站后台,下次请求再加上
回答:
对于这种情况,使用 OAuth2.0 协议进行用户认证和鉴权。OAuth2.0 协议允许用户授权第三方应用访问其受保护的资源API,而无需共享用户凭据。这样就可以解决您的问题,即在 A 网站登录后,用户可以在 B 网站进行授权,并将授权信息通过 OAuth2.0 协议传递过来。在上传文件时,只要验证授权信息是否有效即可。这样即使在上传文件时 B 网站失效了,授权信息也可以在一段时间内保持有效,从而保障用户体验。建议您在选取网盘开源库时,优先考虑支持 OAuth2.0 协议的库。
回答:
没有太理解AB网站的关系,A网站提供上传+鉴权功能,B网站只提供一个认证功能?
盲猜一下流程上是不是从B登陆,如果登陆成功,传递身份到A网站,进行鉴权并判断是否可以上传?
可能需要先明确下B网站只是认证还是需要鉴权,如果需要鉴权(证明你有没有上传的功能),那两个系统之间就需要有共同的权限中心来支撑,例OAUTH,SAML等,可以看一下KeyCloak,目前用的比较多,而且与Spring体系等互相集成也很方便。
如果只是认证(证明你是谁),那最简单的方式,两个系统之间需要共享一份身份认证的许可,这可以根据a,b网站实际的关系来选择相关的方案。这里需要考虑的,主要是支持的客户端类型,是否存在跨域,是否存在技术升级等。几种可用的方案:
- 多个网站相同的主域(a.test.com;b.test.com),可以通过Cookie改写(test.com)+ Session共享的方式(Tomcat的Session复制,Spring Session/Redis的分布式Session)
- 借助JWT的天然跨域,由B网站签发Token,并在payload中添加身份许可,次数限制等等信息,然后A网站实现相关的验签方法,所以只要请求中携带有效TOKEN,两个网站都能够承认调用者身份,问题可能如果需要对用户进行强制退出或者下线的话,需要借助REDIS等共享存储,类似方案1的session共享
- 更复杂的就需要借助SSO的相关方案,类似CAS,KeyCloak这种,实现集中的认证+鉴权中心,A,B或者更多的网站都可以通过统一的系统,进行访问和权限的验证,这个可以百度一下SSO,CAS,Yale CAS,OAUTH2这一类的关键词,了解下
以上是 如何集成自带用户系统的开源库与当前系统登录态保持一致? 的全部内容, 来源链接: utcz.com/p/945107.html