繁体   English   中英

服务提供商之间的SAML 2.0身份验证声明(C#、. net,MVC4,组件空间)

[英]SAML 2.0 authentication assertion between service providers (C#, .net, MVC4, Component Space)

我正在构建的系统有问题。 我已经成功实施了SP发起的SSO系统。 但是,当考虑到该系统具有多个必须能够交互和交换数据的唯一且完全隔离的服务提供商时,就会出现问题。 当一个SP(SP1)需要与另一SP(SP2)通信时,它们需要能够无缝过渡同时保持安全性。 因此,我认为他们需要能够断言或共享SAML数据。

例如,用户尝试通过SP1访问系统,并被重定向到IdP。 用户针对IdP进行身份验证,该IdP随后将通过http声明返回SP1。 用户现在在SP1上执行一系列任务,最终需要数据传输或浏览器重定向到SP2。 SP2不知道SP1已成功验证用户身份并从IdP接收到SAML响应。 这是我的问题出现的地方。 我需要实现一种机制,该机制将允许SP2知道用户在SP1上的状态。 更一般而言,我需要允许一组服务提供者中的任何服务提供者就用户的状态进行相互声明。 但是,我找不到有关完成此任务的“官方”方式的文档。

我已经想到了解决该问题的多种解决方案,但是我怀疑它们中的任何一种都至少是“官方的”。 一个将是在IdP上保留SAML声明的列表,该列表可被guid引用。 然后,从SP1到SP2传递一个链接,该链接将引用控制器操作和guid,这将允许IdP将数据重新声明为SP2。 这似乎很缓慢且令人费解。 在SP1上接收到SAML响应之后,有两种方法会持久保留SAML响应,并在重定向用户时以某种方式将数据传递给SP2。

我可能对此考虑过头,并使过程复杂化。 我可能需要转到由IdP发起的基于SSO的解决方案。 我可能正在看文档中的内容。

如果任何人都可以阐明这个话题,将不胜感激。 我很乐意提供有关该主题的任何其他信息。

如果您控制IdP(从某种意义上说,您可以在IdP端实现一些额外的功能),我会考虑在发布SAML令牌时在IdP端保留一些信息,然后将信息附加到SAML令牌。

假设SP1通过重定向到IdP登录。 您存储此信息(cookie,会话)。 然后,SP2通过重定向到IdP登录。 如果这是相同的浏览器会话,则该信息仍在IdP一侧,仅由于您先前已保存(cookie,会话)而可用。 然后,您可以使用此信息向SP2发出任何断言。

我不太明白为什么您必须存储此信息以供guid引用。

尽管上述想法仅在您的服务与IdP联系的顺序中起作用(SP1没有信息; SP2有关于SP1的信息; SP3有关于SP1和SP2的信息,但是SP1仍然没有有关SP2和SP3的信息,因为它不会启动与IdP进行另一次对话,因为它已经通过身份验证),我认为您可以通过让您的服务删除身份验证信息来轻松消除此限制,以便与服务的下一次联系要求它启动与IdP的对话。

例如,SP1没有信息,SP2具有关于SP1的信息,但是SP1想要获取有关SP2的信息。 为此,SP1在本地“签名”,以便它转到IdP并获取有关SP2(以及任何其他已登录方)的信息。

我们解决问题的方法是根据IdP对用户进行身份验证。 然后,一旦用户通过身份验证,我们将允许会话保持一段时间。 通过对IdP的身份验证完全独立于SP,此解决​​方案将使SSO成为可能。 换句话说,SP不会跟踪其他已认证的SP,因为这是IdP的工作。 如果用户从浏览器登录到IdP并将该浏览器重定向到任何一个分布式SP,则只要该SP向IdP发送其身份验证请求,它将针对自己的会话进行验证并断言回SP。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM