单点登录时认证失败

Blade 已结 1 269
pump
pump 剑者 2025-02-25 11:46

一、该问题的重现步骤是什么?

1.  服务器上部署了一套环境 地址是 192.168.100.68

2.  本地idea启动了一套环境 地址是 192.168.100.46 (本地环境和服务器连接的是同一个postgres,不同的redis )

3. 本地saber配置了 192.168.100.68 作为sso认证地址 

image.png

4. 登录本地环境,使用单点登录认证,点击之后跳转到 192.168.100.68 进行认证,输入账号密码之后,点击 同意认证,之后跳转回 192.168.100.46 时提示报错 “认证信息错误或无效”924b4c91274d8aa8bc6b3151198585ff.png

二、你期待的结果是什么?实际看到的又是什么?

期望时认证通过,实现单点登录功能

三、你正在使用的是什么产品,什么版本?在什么操作系统上?

本地和认证服务器的版本都是 4.3.0 

四、请提供详细的错误堆栈信息,这很重要。

debug之后发现是从redis查询用户未查到(应该是通过code查询)
1740105747075_d.png

五、若有更多详细信息,请在下面提供。
redis键值
1740117745124_d.png

1条回答
  •  admin
    admin (最佳回答者)
    2025-02-25 14:23

    你们如果采用了其他服务器的sso,那么认证服务也需要是sso所在的服务器。

    他的认证流程是这样的:

     1. 登录sso点击跳转

     2. sso服务将登陆后的用户保存到redis,且自动生成一个code来作为key保存

     3. sso跳转到本地系统后,携带code,本地系统获取code去调用sso的auth服务

     4. sso的auth服务根据code到redis找用户,找到后则认证成功,返回token

     5. 本地系统获取token后执行登录成功的操作


    其中需要确定的是,blade-auth服务认证code,是需要链接sso redis才行,否则无法认证通过。

    也就是说采用了sso,那么blade-auth服务也需要同步。否则将认证失败。

    作者追问:2025-02-25 14:23

    是不是要客户端和服务端共用一个auth服务,但是两个平台不在一个nacos上,怎么弄呢

    回答: 2025-02-25 14:23

    不需要在一个naocs,只要auth服务能被客户端访问到就行。

    正常场景也是服务点提供sso+auth服务,各个不同的客户端远程调用校验。调用sso的auth服务返回token,那整个流程就结束了。

    作者追问:2025-02-25 14:23

    那是不是要改造下前端sso换token的函数image.png

    回答: 2025-02-25 14:23

    是的,这里改成线上地址,记得后端把跨域功能开启

    作者追问:2025-02-25 14:23

    好的,后端跨域是在哪里配置的

    回答: 2025-02-25 14:23

    gateway应该有配置,也可以百度搜一下,或者问下deepseek,这个比较简单的

    0 讨论(1)
代码语言
提交回复