我的 ASP.NET MVC 4 应用程序通过在 IIS 上运行的 ISAPI 筛选器受 SSO (OAM) 保护。当收到对我的应用程序的请求时,ISAPI 过滤器会拦截该请求并将其重定向到 SSO。用户必须登录 SSO,然后返回到我的应用程序。
经过身份验证的用户的用户名(通过 SSO)与我的应用程序在 HTTP 请求标头中共享。
Request.Headers["username"]
我想要实现的是- SSO认证后,设置FormsAuthentication
在我的申请中username = Request.Headers["username"]
。这样,SSO 对我的应用程序保持透明,并且用户身份在 HttpContext 对象中可用,此外,我(开发人员)可以有效地利用特定角色的 Authorize 属性。
为了实现这一点-我连接到Session_Start()
, read Request.Headers["username"]
, Set FormsAuthentication
曲奇饼。我为我的应用程序获得了经过表单验证的 SSO 用户。
但我的问题是当我注销时(FormsAuthentication.Signout
),我将其重定向到应用程序内的另一个页面,这会触发一个新的会话(我可以看到发生这种情况时 Session_Start 触发)
我是否在做正确的事情 - SSO 之后的 FormsAuthentication?如果不是,为什么不呢?然后我如何让我的应用程序了解 SSO 身份验证的用户?
在使用单点登录提供商进行身份验证后,使用 FormsAuthentication cookie 来跟踪应用程序中的登录用户是完全合理的。您没有显示它,但我希望您也能获得一些票证,您可以使用它来验证 SSO 提供商带外登录的用户,而不是简单地信任username
header.
但是,您可能会看到,当您从应用程序中注销用户时,用户并未从 SSO 提供商注销。因此,只要他们拥有 SSO 提供商的有效 cookie,他们就会保持登录状态,即用户将自动从 SSO 提供商弹回到您的应用程序,而无需任何所需的身份验证。
这很不幸,但却很正常。
如果您确实希望用户注销,则需要使用集中注销功能。我没有使用过 OAM,但它似乎确实支持这一点:http://docs.oracle.com/cd/E21764_01/doc.1111/e15478/logout.htm
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)