我正在尝试使用SAML SSO登录到第三方应用程序(本例中为Sentry)。在这里,我们选择Keycloak作为身份代理,我自己的应用程序(react中的前端和spring Boot 中的后端)作为身份提供者,它将包含用户并保持真实性的来源。
首先,下面是我创建的配置:
1.在Keycloak中创建了一个身份提供程序(XYZ),并提供了我的应用程序登录页面的SSO URL。
1.在Keycloak中为Sentry创建了一个客户端,细节很少。
- Sentry中的配置和从keycloak领域IDP元数据SAML 2.0数据导入的IDP元数据。
1.已将XYZ身份提供者设置为Keycloak中的默认提供者。
流:SP启动得流
1.登陆Sentry,显示使用SAML登录。
1.当我启动时,Sentry向keycloak发送SAML身份验证请求,它将我重定向到我的应用程序(XYZ)的登录页面。
1.我提供凭据,对用户进行身份验证,并在我的应用程序XYZ中生成SAML响应。
1.我重定向浏览器,然后从XYZ应用程序到Keycloak使用重定向URI,我从身份提供者,我配置。但是我得到了无效的saml响应的异常。
关于我描述的上述流程,我有几个问题,如果弄清楚了,可以帮助我完成这个流程,并创造我的理解周围相同。
1.在Sentry生成SAML身份验证请求后,Keycloak将SAML身份验证请求按原样重定向到我的XYZ应用程序。这是正确的行为吗?
1.如果我理解正确的话,我需要验证这个SAML authn请求并生成SAML响应。此SAML响应应针对Keycloak还是Sentry?我的意思是,既然Keycloak是一个代理,它不会解析我的SAML响应并为Sentry生成一个新的SAML响应吗?我是对的还是漏掉了什么。
1.如果Keycloak要解析和验证我的SAML响应,那么我的响应的确切结构应该是什么?我是否需要按照某种标准创建SAML响应,以便Keycloak可以验证它? - SAML响应不应该是对Sentry启动的SAML身份验证请求的响应吗?
- RelayState的值应该是多少?
- IDP配置是否也需要有与Sentry相关的数据?
所有这些棘手的问题都让我很坚韧。
1条答案
按热度按时间wwtsj6pe1#
我能够理解流程并实现SSO的完整流程。一件事是我们需要接受RelayState与服务提供者SSO请求一起发送。这里我忽略了这一点,通过添加这个并将有效的saml响应发送回Keycloak,keycloak验证我的saml响应,如果我创建了Map器,则Map这些属性并将响应发送回服务提供商。我需要为属性Map器和第一个代理登录的身份验证流进行一些额外的配置。我可以直接重定向到哨兵的帖子