如果我们*需要*加密的共享密钥,我们如何支持ADFS?

时间:2014-02-12 13:23:18

标签: security encryption adfs

编辑:(摘要):我首先想要一种方法,将一个自定义的,特定于用户的属性作为ADFS登录的一部分传递给我们;如果这是合理的,我会深入研究如何保护它。

编辑:(澄清):我不想在登录时通过AD传递内容 - 如果用户必须输入密码并且然后进行身份验证再次反对AD,他们最终会得到令人困惑的,不匹配的密码。相反,我希望我们注册这样:

  1. 用户输入详细信息(电子邮件等)
  2. 我们生成一个长随机字符串,加密它,然后将其作为客户端AD的唯一ID的一部分提供
  3. 然后在每次登录时:

    1. 我们将用户重定向到客户端的AD以进行身份​​验证
    2. 一旦用户获得授权,他们就会被用户重新定向回我们。索赔信息
    3. 该信息包含我们生成的唯一ID - 因此我们从中提取用户ID并解密密码。
    4. 这比我们通常提供的安全性要低,但如果涉及到AD,这是我能想到的最好的安全性。这可能吗?

      长版本:客户要求我们为我们的网络应用程序添加对单点登录的支持,实施Microsoft ADFS(Active Directory联合服务)。

      问题是我们依靠用户的密码来解密他们的记录;他们的私钥用他们的密码加密,所以我们无法在没有密码的情况下访问他们的记录。

      我一直在深入研究文档,例如http://msdn.microsoft.com/en-us/library/bb897402.aspx - 但目前我还没有办法使用AD FS安全地管理某种秘密加密密钥。

      当然,它不一定是密码本身 - 我们通过生成具有与密码相同属性的随机访问令牌来实现OAuth2(可用于解密用户的记录)...但是传入经过身份验证的用户需要使用某种类型的安全私有令牌。

      非常感谢任何指导!

2 个答案:

答案 0 :(得分:0)

如果您使用的是ADFS 2.0,则可以customize the pages

所以你可以,例如获取密码,将其修改,在调用SignIn之前将其写入AD,然后使用声明规则通过此密码。然后在您的应用程序中反转该过程。

注意 - 我并不是说这是一个“好”的解决方案 - 只是你可以做的一个例子。

显然安全需要至关重要!

答案 1 :(得分:0)

有两种方法可以解决您的问题。

  1. 自定义ADFS SignOn页面(您应该进行备份)以创建接收用户密码的表单。这是一个webforms aspx页面,所以你应该没有问题。从那里,您必须构建自己的STS以向ADFS发出声明,以便ADFS可以将这些声明传递给您的依赖方。将自定义STS作为属性存储映射到ADFS

  2. 你手边拿着安全,只是做错了。 ADFS使用HTTPS进行传输级别的安全性,使用SAML 2.0进行安全加密来处理您的信息,因此另一种加密方式也很简单。

  3. 让我知道你喜欢哪种方式