【问题标题】:Setting up FormsAuthentication after SSO authentication在 SSO 身份验证后设置 FormsAuthentication
【发布时间】:2014-03-06 18:55:35
【问题描述】:

我的 ASP.NET MVC 4 应用程序受到 SSO (OAM) 的保护,其中运行在 IIS 上的 ISAPI 过滤器。当收到对我的应用程序的请求时,它会被 ISAPI 过滤器拦截并重定向到 SSO。用户必须在 SSO 登录,然后才能返回到我的应用程序。

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

Request.Headers["username"]

我想要实现的是- 在 SSO 身份验证之后,在我的应用程序中将 FormsAuthentication 设置为 username = Request.Headers["username"]。这样 SSO 对我的应用程序保持透明,并且用户身份在 HttpContext 对象中可用,另外,我(开发人员)可以有效地为特定角色使用 Authorize 属性。

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

但我的问题是当我注销 (FormsAuthentication.Signout) 时,我将其重定向到应用程序内的另一个页面,这会触发一个新的 Session(发生这种情况时我可以看到 Session_Start 触发)

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

【问题讨论】:

    标签: c# asp.net-mvc-4 authentication forms-authentication


    【解决方案1】:

    使用单点登录提供程序对登录用户进行身份验证后,使用 FormsAuthentication cookie 跟踪应用程序中的登录用户是完全合理的。您没有显示它,但我希望您也能获得一些票证,您可以使用该票证通过 SSO 提供商验证已登录的用户带外,而不仅仅是信任 username 标头。

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

    这很不幸,但很正常。

    如果您确实希望用户退出,则需要使用集中退出功能。我没有使用过 OAM,但它似乎确实支持这一点:http://docs.oracle.com/cd/E21764_01/doc.1111/e15478/logout.htm

    【讨论】:

    • 感谢 tvanfosson,这是真的。 SSO 提供程序发出一个令牌 (cookie),它保护了我的整个应用程序,除了一个资源是我的注销 URL。 OAM 配置为使我的注销 URL 上的 SSO cookie 无效,并且仅在此处,用户丢失了他的 SSO 提供的身份。目前很好。这就是问题的开始。由于此注销 URL 是我的应用程序的一部分,因此一旦用户注销(会话被终止,FormsAuth.Signout 调用)并重定向到此 URL。 SSO cookie 失效,但认为是新请求,再次调用 Session_Start。
    【解决方案2】:

    如果请求的 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 帖子的评论。

    为了更好的想法,帖子仍处于打开状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多