我正在尝试编写一个启用 SAML 2 SSO 身份验证的小型 bitbucket 插件。
我一直在看 bitbucket 中的示例身份验证插件的源代码,看起来很简单。
但是,我的问题是处理跨越不同请求的身份验证的最佳方法是什么。
要执行 SAML SSO,您必须通过用户的浏览器向 IdP 发送一个 POST,然后它再次通过 POST 发送一个 SAML 令牌,但是您不再处于身份验证的中间。所以我试图找出最干净的方法来再次启动身份验证过程,我目前的想法如下:
- 让我实现
com.atlassian.bitbucket.auth.HttpAuthenticationHandler
的身份验证处理程序检查该方法中是否发生了 SAML 身份验证authenticate()
,然后在必要时将它们重定向到 IdP。(由于重定向,身份验证过程已停止) - 在单独的 servlet 上从 IdP 接收 SAML 令牌并检查 SAML 令牌是否可以使用。假设一切正常,使用已验证的用户名设置 servlet 请求属性(或会话属性),然后将用户转发到他们尝试访问的原始页面。这应该再次启动身份验证过程。
- 我的身份验证处理程序再次运行,检查请求/会话属性,这一次创建成功完成
ApplicationUser
所必需的。authenticate()
这听起来像是一个好方法吗?我查看了有关 Crowd SSO 处理程序如何工作的 bitbucket 源代码,但使用 Crowd SSO 它不需要将您重定向到外部登录页面,因此它没有此流程的示例。
想法?