在 appsettings 中定义 Identity Server 客户端的未记录方式

Undocumented way to define Identity Server clients in appsettings

我在探索身份服务器配置时发现了一个有趣的特性。这是根据 the official document:

在 appsettings.json 中定义客户端的方式
{
  "IdentityServer": {
    "Clients": [
      {
        "ClientId": "TestClient1",
        "RedirectUri": "/redirect",
        "AccessTokenLifetime": 1800
      },
      {
        "ClientId": "TestClient2",
        "RedirectUri": "/redirect",
        "AccessTokenLifetime": 1800
      }
    ]
  }
}

如您所见,需要将一个数组传递到 IdentityServer 配置的 "Clients" 属性 中。

令人惊讶的是,以下代码也有效:

{
    "IdentityServer": {
        "Clients": {
            "TestClient1": {
                "Profile": "SPA",
                "RedirectUri": "/redirect",
                "AccessTokenLifetime": 1800
            },
            "TestClient2": {
                "Profile": "SPA",
                "RedirectUri": "/redirect",
                "AccessTokenLifetime": 1800
            }
        }
    }
}

它将对象传递到 "Clients" 属性。在这种情况下,sub属性 ("TestClient1", "TestClient2") 的名称映射到 ClientId。 RedirectUri 也可以正常工作,但会跳过其他属性(如 AccessTokenLifetime)。

那么,它为什么有效?在哪里可以找到描述这种 IdentityServer 配置方式的文档?

在 IdentityServer 代码上确实没有什么特别之处,这就是它没有记录的原因。 here is the line of code where it reads the config. As you see it uses Config.Bind 分机。