【问题标题】:IdentityServer4 storing Client SecretsIdentityServer4 存储客户端机密
【发布时间】:2019-11-27 22:22:16
【问题描述】:

我目前正在尝试构建一个单点登录服务器供几个客户端使用。因为我不完全知道会有多少客户端,所以我计划制作它,以便我可以在运行时使用 EntityFramework 配置存储添加客户端。

我现在的问题是如何设置客户端密码。我尝试生成一个新的 GUID 并将其用作秘密。现在的问题是,配置存储只想保存密钥的散列版本,我需要访问普通密钥才能将其添加到实际的客户端应用程序中。

我认为这是故意的,并且不鼓励保存秘密的普通版本?保存机密的首选解决方案是什么?

【问题讨论】:

  • 您不应该以明文形式保存秘密。为什么要访问纯文本密码?
  • 我想自动生成它们,然后我需要在某个地方读取它们,以便我可以将它们实际添加到我的应用程序中。这将与 Facebook oauth2 等工作流程相同。您转到开发人员页面,创建一个应用程序(此处为客户端),然后可以读取密钥并将其添加到您的应用程序中。为此,我需要将它们存放在某个地方?
  • 这些是您自己的应用程序吗?
  • 大部分是,但不一定。我想我只会在生成秘密时将秘密提供给用户一次,而不是存储它们。这应该是访问它们的一种保存方式
  • 这其实是个好主意。如果您的客户丢失了他们的秘密,您也可以随时生成一个新秘密。

标签: .net entity-framework identityserver4


【解决方案1】:

使用以下算法生成 sha256 哈希。这与IdentityServer4.Models.HashExtensions 类中使用的算法相同。

using System.Security.Cryptography;

static class Extentions
{

    public static string Sha256(this string input)
    {

        using (SHA256 shA256 = SHA256.Create())
        {
            byte[] bytes = Encoding.UTF8.GetBytes(input);
            return Convert.ToBase64String(((HashAlgorithm)shA256).ComputeHash(bytes));
        }
    }
}


void Main()
{
    Console.WriteLine( "secret-as-guid".Sha256());
}

【讨论】:

  • 感谢您的回答,但这不是我遇到的问题。我可以创建散列并保存散列秘密。我想做的实际上是以纯文本形式保存秘密,以便以后阅读。我想知道这是否是你不应该做的事情,因为在没有自定义数据库表等的 Identityserver 4 中是不可能的
  • 您最好生成秘密并立即将其提供给所有者,而无需以纯文本形式存储。以纯文本形式保存秘密是禁忌。无论如何,如果您以后真的需要访问它,请使用您自己的带有客户端 ID 的表到秘密映射。您应该尽力在存储之前对秘密进行加密,并在检索时对其进行解密,而不是以明文形式存储秘密。
  • 嗯。那可能是一个解决方案。我想我会在秘密生成时将其提供给用户一次,而不是永久保存。感谢您的输入!
  • 不客气。另外,我应该警告您不要将 GUID 用作机密。 stackoverflow.com/questions/4517497/…
  • 此算法适用于 IdentityServer4 Mongo 示例中的秘密。
【解决方案2】:

您不应以纯文本形式存储客户端密码。

始终假设您的配置数据库受到威胁 - 然后这些秘密可用于冒充您的客户。

这对您来说可能有点不方便 - 但这是一种最佳做法(并且也符合其他令牌服务的处理方式)。

如果您有其他保护静态秘密的方法 - 您可以将基于纯文本的秘密验证器添加到 DI

https://github.com/IdentityServer/IdentityServer4/blob/dev/src/IdentityServer4/Validation/PlainTextSharedSecretValidator.cs

【讨论】:

  • 有没有在线工具可以创建秘钥?我想在添加新客户端时使用它来配置它。否则我将不得不创建一个控制台应用程序?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-20
  • 1970-01-01
  • 2019-05-29
  • 2018-04-25
  • 2021-07-15
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多