我正在将SSO整合到多租户网站上。我们使用ACS作为RP-STS,我们的拓扑中有多个第三方IDP。
根据租户配置,我们更改了登录请求中的realm
和homerealm
参数,以便正确重定向并消除ACS上的IDP选择页面。在ACS上设置规则组,以将来自相应IDP的输入声明转换为正确的应用程序特定输出声明。到目前为止,我们已经确定了所有基本要求,但只有一个。
我们的一些租户希望他们的网站用户重定向到他们的IDP进行登录,而其中一些人不希望重定向到IDP进行登录。我不知道怎么告诉ACS不要重定向到IDP登录。
在我的应用程序中,我使用HttpContext.Current.User.Identity.IsAuthenticated
属性来验证LoggedIn用户。
例如,如果用户已登录GMAIL并且我们将Google用作我们的IDP之一。用户首次在同一浏览器的新标签页中访问我们的网站时,我们的网络应用中的IsAuthenticated
为false,用户被重定向到ACS。但ACS发现用户已登录GMAIL并将用户重定向回我们的网站并提供已翻译的声明。但是,如果用户未登录GMAIL,则在这种情况下,ACS会将用户重定向到Google进行登录。一旦用户登录Google,他就会被重定向到我们的网站并提供已翻译的声明。
因此,如果用户登录,我仍然希望ACS处理令牌创建,解析和声明转换的繁重工作,但如果用户未登录,只需将用户重定向回具有某种状态的网站。
这真的有可能吗?是否有任何特定的操作(wa)我应该使用而不是wa=wsignin1.0
?
更新: 如果我必须停止重定向,无论如何我可以在RelyingParty / webapp上自行处理SignInRequestMessage吗?现在我准备基于租户的SignInRequestMessage和RedirectResult的WriteQuerystring,它最终在ACS和谷歌上执行GET请求。相反,如果我可以在应用程序本身POST POST SignInRequestMessage并解析响应?这可能吗?