Rails OAuth 2.0 系统基于 SAML 的身份验证中的会话丢失和空“user_redirect_to”变量

问题描述 投票:0回答:0

我正在开发一个基于OAuth 2.0 on Rails的认证系统。

我正在使用 Devise gem 来处理用户会话和登录,Doorkeeper gem 来管理 OAuth 2.0 工作流程。除了用户名和密码登录外,我还有社交和企业登录功能。这是由 OmniAuth gem 处理的。具体来说,对于 Google 登录,我使用 omniauth-google-oauth2 gem,而对于企业登录,我们已经为 Azure 实施了基于 SAML 的身份验证。

我们遇到的问题与基于 SAML 的工作流有关。当我们从客户端调用“/oauth/authorize”端点时,它会正确重定向到登录页面,并且“session['user_redirect_to']”变量已正确设置。登录过程完成后,它应该根据“/oauth/authorize”端点中提供的回调 URL 将用户重定向回客户端。

此流程对于用户名/密码登录和 Google 登录都完美无缺。但是,当触发 SAML 回调时,会话丢失,“session['user_redirect_to']”变量变为空。因此,应用程序无法将用户重定向回提供的回调 URL。

我能够通过将

user_redirect_to
作为状态参数传递给 saml 请求来使其工作,并且在回调中我能够从参数中获取回调 url 并将其设置回会话。但我知道它不安全,应该有一个更清洁的解决方案。

我知道这有点乱,但如果您需要更多详细信息,请告诉我

ruby-on-rails devise saml omniauth doorkeeper
© www.soinside.com 2019 - 2024. All rights reserved.