如何为 IdentityServer4 创建一个 client_secret?

How to create a client_secret for IdentityServer4?

我正在使用 IdentityServer4 创建身份验证服务器。

我正在创建一个将使用资源所有者密码凭据访问的客户端。

但我想知道 client_id 和 client_secret 应该是什么。

Should the client_id be a human-readable name of the client for e.g. app name or it should be a random number or string?

The client_secret is a string but what should be its value? A UUID? a random string? base64 string?

我浏览了 IdentityServer4 和 OpenId 文档,但找不到任何指导。

这是他们在文档中提供的示例。

new Client
{
    ClientId = "client",

    // no interactive user, use the clientid/secret for authentication
    AllowedGrantTypes = GrantTypes.ClientCredentials,

    // secret for authentication
    ClientSecrets =
    {
        new Secret("secret".Sha256())
    },

    // scopes that client has access to
    AllowedScopes = { "api1" }
}

正如您在示例中看到的,他们设置了一个人性化的 client_id。

  • client_id:是每个客户端的public标识符。在授权服务器处理的所有客户端中,它必须是 唯一的 。它是 public 但最好不要被第三方猜到。 示例:
Github: 6779ef20e75817b79602
Google: 292085223830.apps.googleusercontent.com
Instagram: f2a1ed52710d4533bde25be6da03b6e3
Windows Live: 00000000400ECB04
  • client_secret:只被客户端和授权服务器知道。它必须是随机的,不可猜测。生成的最佳方法是使用加密 安全库。您应该避免使用常见的 UUID 库。

阅读更多关于 IdentityServer4 的秘密here