我正在尝试为位于同一域的两个网站设置单点登录
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>
元素
知道我可能缺少什么吗?
答案 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应用程序与定位早期版本的应用程序混合使用,则需要确保在所有地方都使用兼容的令牌。将此属性添加到任何面向.NET 4.5或更高版本的网站上的<machineKey>
上:
<system.web>
<machineKey compatibilityMode="Framework20SP2" />
</system.web>
有关更多详细信息,请参见this answer。特别感谢this comment向我指出了正确的方向。