2014-02-25 98 views
1

我的ASP.NET MVC 4应用程序受到SSO(OAM)的保护,并在IIS上运行ISAPI筛选器。收到我的应用程序的请求后,它将被ISAPI筛选器拦截并重定向到SSO。用户必须在SSO上登录,然后返回到我的应用程序。设置SSO身份验证后的FormsAuthentication

已通过身份验证的用户(通过SSO)的用户名与我的应用程序在HTTP请求标题中共享。

Request.Headers["username"] 

我所试图实现的是 - SSO身份验证后,我的username = Request.Headers["username"]应用程序中设置FormsAuthentication。通过这种方式,SSO对我的应用程序保持透明,用户身份可在HttpContext对象中使用,另外,我(开发人员)可以有效地为特定角色使用授权属性。

为了实现这一点 - 我连接到Session_Start(),阅读Request.Headers["username"],设置FormsAuthentication Cookie。我为我的应用程序获得此SSO用户的Forms-Authenticated。

但我的问题是,当我退出(FormsAuthentication.Signout),我把它重定向到另一页的应用程序中,这将触发新的会话(我可以看到在session_start触发时发生这种情况)

我在做的正确的事情 - SSO之后的FormsAuthentication?如果没有,为什么不,然后如何让我的应用程序知道SSO身份验证的用户?

回答

0

如果请求的URL是注销URL,我必须明确地终止Session_Start内部的会话。然后在下一个请求(如从注销到登录页面再次),它会生成一个新的会话,并顺利运行。

protected void Session_Start() 
    { 
     if (!Request.IsAuthenticated && !IsSignoutURL) 
      AcceptSessionRequest(); //process local authentication 

     else if (IsSignoutURL) 
      RejectSessionRequest(); //kill the sessions 
    } 

有关背景上SSO如何通过验证用户的身份对我的应用程序,请阅读我给tvanfosson的帖子发表评论。

该帖子仍然打开,以获得更好的主意。

1

使用FormsAuthentication cookie在使用Single-Sign-On提供程序进行身份验证后,可以跟踪应用程序中的登录用户是完全合理的。您不会显示它,但我希望您也可以获得一些凭证,您可以使用它来与SSO提供商带外验证签入用户,而不仅仅是相信username标头。

但是,您可能会看到,用户在签出应用程序时未从SSO提供程序注销。因此,只要他们拥有对SSO提供商有效的Cookie,他们就会保持登录状态,即用户将自动从SSO提供商退回到您的应用程序,而无需进行任何所需的身份验证。

这是不幸的,但正常。

如果您确实希望用户注销,则需要使用集中注销功能。我没有与OAM合作,但它似乎支持:http://docs.oracle.com/cd/E21764_01/doc.1111/e15478/logout.htm

+0

谢谢tvanfosson,它的真实。 SSO提供程序发出一个令牌(cookie),它已经保护了我的整个应用程序,除了一个资源是我的注销URL。 OAM配置为使我的注销URL上的SSO Cookie无效,仅此处用户失去其提供的SSO身份。目前很好。 这是问题开始的地方。由于此注销URL是我的应用程序的一部分,只要用户注销(会话被终止,FormsAuth.Signout调用)并重定向到此URL。 SSO Cookie无效,但认为它的新请求Session_Start再次被调用。 –