我必须在两个不同公司托管的两个现有互联网应用程序之间实施一个简单的单点登录(SSO)解决方案。
应该做什么:
问题是,我不知道如何实施最后一步。对帖子(步骤5)的响应是欢迎页面和cookie。我尝试将此响应(HttpWebResponse
)复制到外观的Response
,但是当用户可以看到Welcom页面内容时,没有重定向...
HttpWebResponse applicationBResponse = PostApplicationB();
var reader = new treamReader(applicationBResponse.GetResponseStream());
string temp = reader.ReadToEnd();
reader.Close();
Response.Write(temp);
知道我应该如何实现这种重定向?
答案 0 :(得分:1)
这是使用Windows Identity Foundation实现所谓的被动联合的完美用例。身份联合使用集中服务或应用程序来管理用户身份验证用户凭据的概念。然后,依赖应用程序可以与身份服务建立信任关系,以便他们不再关心用户的身份验证方式。这种方法的一个好处是,如果由于某种原因您决定更改您的身份验证机制,例如从密码转移到客户端证书,您的应用程序都不需要更改 。只要他们信任的身份服务说用户是好的,他们就可以像往常一样保持卡车运输。
通过使用WIF,您尝试编写的几乎所有管道代码都将为您处理,并且可能会解决您的大多数情况。它支持许多不同的协议,具有高度的灵活性和可配置性,如果您在默认情况下未涵盖自定义要求,则可以轻松扩展。
如果您正在寻找一个好的开源身份服务,请查看Thinktecture's Identity Server v3。您可以在几分钟内启动并运行,并且可以轻松定制以满足您的组织和您的需求。我们在组织中使用Identity Server来处理Web和WPF应用程序的SSO,并取得了巨大的成功。
要获得Identity Federation的良好入门,请查看MSDN上的A Guide to Claims Based Identity and Access Control。
答案 1 :(得分:1)
这个方案唯一可行的方法就是摆脱外观。相反,应用程序A应检索用户的名称和密码,并将其呈现为包含在表单中的隐藏字段中的页面。该页面应以javascript片段结尾,以便将表单提交给应用程序B.应用程序B将直接回复浏览器,其中包含欢迎页面以及任何会话cookie。
如果您使用外观,则Cookie不会传播,最终用户浏览器将无法访问该网站。即使你修改你的外观以传递cookie,它们也会在错误的域中。
此外,我必须发表评论,从安全角度来看,这是非常糟糕的设计。