一、该问题的重现步骤是什么?
1. 通过第三方认证接口/oauth/render访问bladex的统一认证平台,无法通过/oauth/revoke注销,并且谁都可以调用注销接口,不够安全
这里提供一个改进思路,请指正
一、/oauth/authorize
读取session.getId,根据sessionId从redis查找统一认证用户信息,未找到,跳转登录统一认证页面,已找到或者统一认证登录后,跳转/oauth/authorize/perform
二、/oauth/authorize/perform
生成认证码code,执行saveCode时缓存用户和sessionId
三、/oauth/token,认证码登录模式
根据code读取到用户和sessionId,进行认证,认证完成后,根据生成的token缓存sessionId
四、/oauth/authorize/logout
接口调用时要求传入token参数(这里也确保执行注销的是已经认证过的用户),根据token读取缓存的sessionId,删除sessionId缓存的统一认证用户,完成注销操作
二、你期待的结果是什么?实际看到的又是什么?
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
第三方认证用的是justauth,他的接口可以看这里,使用的公司非常多,也没有看到说不安全的情况:https://justauth.cn/guide/quickstart/how-to-use/#%E5%8F%96%E6%B6%88%E6%8E%88%E6%9D%83
justauth的体系和bladex自带的oauth2没有任何关系,没法关联,你应该是理解错了。
bladex自带的oauth2模式也是采用的spring官方设计模式。并且现在很多大型系统的退出(如阿里云)也是通过url跳转至单点指定URL的方案,所以你这种 jwt+session+redis 揉杂在一起的想法不予采纳。如果你要和token关联,就不要用session,直接用jwt+redis来实现,但是这样的方案才是你上面说的谁都可以调用。
扫一扫访问 Blade技术社区 移动端