单一登录与表单身份验证

时间:2010-03-16 10:50:27

标签: asp.net authentication forms-authentication single-sign-on

我正在尝试为位于同一域的两个网站设置单点登录

e.g。

http://mydomain(包含forms-auth登录页面的顶级网站)

http://mydomain/admin(单独开发的网站位于父网站的虚拟应用程序中)

已阅读有关单点登录的一些文章 e.g。

http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

http://msdn.microsoft.com/en-us/library/dd577079.aspx

他们似乎建议只是在每个web.config中使用相同的machinekey部分,以便每个应用程序的cookie加密和解密相同

我已经设置了这个,我从来没有被提示在子网站(虚拟应用程序)中提供凭据

我总是在父网站上收到提示。

除了使用相同的机器密钥外,我还尝试添加相同的<authentication><authorisation>元素

知道我可能缺少什么吗?

5 个答案:

答案 0 :(得分:1)

web.config的表单部分也必须相同。

Quote from - Forms Authentication Across Applications

  

要跨应用程序配置表单身份验证,请将Web.config文件的表单和machineKey部分的属性设置为参与共享表单身份验证的所有应用程序的相同值。

     

以下示例显示了   Web.config的身份验证部分   文件。除非另有说明,否则   name,protection,path,validationKey,   验证,decryptionKey和   解密属性必须是   所有应用程序都相同。   同样,加密和   验证密钥值和   加密方案和验证   用于身份验证票证的方案   (cookie数据)必须相同。如果   设置不匹配,身份验证   门票不能分享。

答案 1 :(得分:1)

我在httpModules部分使用了<clear/>,因为父级中的项目在子目录的bin目录中不存在(/ admin)

这样做(使用<clear/>)我无意中清除了web.config中指定的FormsAuthentication模块 C:\ Windows \ Microsoft.NET \框架\ V2.0.50727 \ CONFIG

所以我需要将这些显式重新添加到子(/ admin)config

答案 2 :(得分:0)

尝试在两个应用程序的web.config中配置httpCookies部分以使用相同的域。这样,当您登录到一个应用程序时,您获得的FormsAuthentication cookie将对其他应用程序可见。

答案 3 :(得分:0)

您需要在web.config中具有相同的身份验证元素。在包含的表单元素中,确保为每个应用程序赋予name属性相同的值。对于loginUrl属性,我使用相对路径并对所有应用程序使用相同的登录页面(例如loginUrl =“/ MainApp / login.aspx”)。

另外,您是手动创建身份验证票证吗?

答案 4 :(得分:0)

ASP.NET 4.5令牌生成发生了重大变化

如果将ASP.NET 4.5应用程序与定位早期版本的应用程序混合使用,则需要确保在所有地方都使用兼容的令牌。将此属性添加到任何面向.NET 4.5或更高版本的网站上的<machineKey>上:

<system.web>
  <machineKey compatibilityMode="Framework20SP2" /> 
</system.web>

有关更多详细信息,请参见this answer。特别感谢this comment向我指出了正确的方向。