【问题标题】:How to authenticate on an ASP.NET 4.0 application and Redirect to ASP.NET 3.5 app如何在 ASP.NET 4.0 应用程序上进行身份验证并重定向到 ASP.NET 3.5 应用程序
【发布时间】:2011-11-23 09:25:37
【问题描述】:

在运行 IIS 6 的 Windows Server 2003 机器上,我在其自己的网站 (http://authorize.com) 上有一个 ASP.NET 4.0 Web 应用程序,该应用程序具有 Login.aspx 页面。当按下登录按钮时,它会通过以下方式对用户进行身份验证:

FormsAuthentication.SetAuthCookie("spud", False)        
Response.Redirect("http://legacy.com/Default.aspx")

authorize.com 的 web.config 中,我的身份验证配置如下:

<authentication mode="Forms">
      <forms loginUrl="Login.aspx"
             timeout="5000000"
             ticketCompatibilityMode="Framework20"
             protection="Validation">
</authentication>
<authorization>
   <deny users="?"/>
</authorization>
<machineKey decryptionKey="AF96F355CEC57EFD2F996515BF465166075E596F19EB9B47"
   validationKey="5C9D7A8F3E336278F771C7FE45B65BF6E9B41BA9575F04672CCC4242B225DD399FAF7B806B2CD5545200CD0E63A8991CA6BFB2D77FE9C5B0D69889359574C5F3" 
   validation="SHA1" 
   decryption="3DES"/>

我在另一个网站 (http://legacy.com) 上也有一个 ASP.NET 3.5 Web 应用程序。 它的 web.config 为:

当前发生的情况是,当您访问 http://legacy.com/Default.aspx 时,它会将您重定向到 http://authorize.com/Login.aspx strong> 然后当您单击登录按钮时,它会将您带回到 Login.aspx 页面,就好像您没有经过身份验证一样。

如何配置我的站点,以便 ASP.NET 3.5 站点可以共享 ASP.NET 4.0 站点的身份验证令牌?

编辑:我必须在所有 web.config 的表单标签中显式添加 protection="Validation" 以使 ASPXAUTH cookie 的长度相同。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    浏览器不会将一个域的 cookie 传递到另一个域 - 因此在您的情况下,authroize.comlegacy.com 的 cookie 具有不同的范围,浏览器不会共享它们。所以你的方案行不通。

    但是,如果您可以将这两个站点作为同一个域的一部分(例如 authroize.myite.comlegacy.mysite.com),那么创建为父域 (mysite.com) 的 cookie 将在两个站点之间共享。请注意,ASP.NET 允许您为 cookie using domain attribute of forms configuration element 设置域。当然,您仍然需要为两台服务器使用相同的机器密钥集。

    要使跨域身份验证正常工作,您必须基本上实现单点登录功能。在您的情况下,实施大纲将是

    1. 旧站点将重定向到身份验证站点以通过返回 url 进行身份验证
    2. 身份验证站点将对用户进行身份验证,为自己设置 cookie,然后重定向到旧站点返回 url,将令牌传递给经过身份验证的用户。
    3. 令牌的简单实现可以是通过共享私钥加密的用户身份。但是,为了避免重放攻击等,您需要在令牌中添加时间戳。此外,旧网站还需要在请求将用于散列等的身份验证时传递一些随机盐值。
    4. 一旦旧网站收到用户令牌,它就会验证令牌(通过解密、检查哈希和时间戳等)并设置自己的身份验证 cookie。

    请参阅this link (for subdomain)this link (for cross domain),其中更详细地描述了上述方法。

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 2017-11-23
      • 2022-08-08
      • 2019-10-30
      • 2012-04-19
      • 1970-01-01
      • 2011-05-06
      • 2014-11-17
      • 1970-01-01
      相关资源
      最近更新 更多