密钥


layout: docs-default

密钥

密钥是机器(客户端或者作用域)得到IdentityServer授权的关键。

客户端密钥定义的例子:

var client = new Client
{
    ClientName = "Client Credentials Flow Client",
    
    ClientId = "client",
    ClientSecrets = new List
    { 
        new Secret("secret".Sha256())
    },

    Flow = Flows.ClientCredentials   
};

作用域密钥定义的例子:

var scope = new Scope
{
    Name = "api1",
    DisplayName = "Our API",
    Type = ScopeType.Resource,

    ScopeSecrets = new List
    {
        new Secret("secret".Sha256())
    }
};

上面的代码片段设置了一个共享的密钥值secret,并且用SHA256哈希处理。ClientSecret属性是一个列表,说明客户端可以又多个密钥,这是为了适应密钥轮换使用的场景。

让我们仔细了解Secret类的细节吧:

  • Value 密钥的值,这个会被密钥验证器解释处理。(比如,类似于密码的共享密钥,或者其它用来标识凭据的东西。)
  • Description 密钥的描述信息,用于附加一些信息到密钥上。
  • Expiration 密钥过期的时刻
  • Type 告诉密钥验证器,密钥的类型(比如:共享密钥,或者X590Certificate指纹)

密码提取

客户端有很多方法来传送密钥--OAuth2规范提到用HTTP基础认证或者使用Post的方法。IdentityServer还增加了X.590客户端证书的方法(详看 这里).

如果需要其它的方式来传送密钥,密钥提取(Parser)是一个扩展点。除了上面提到的方式,还可以实现一个ISecretParser接口,把实现类加到服务工厂的SecretParsers集合中。

密钥验证

密钥从请求中提取后,它必须被验证。
默认我们支持共享密钥使用SHA256或者SHA512的哈希值和X.509证书(默认使用证书指纹来验证调用方).
密钥验证也是一个扩展点--如果需要支持其它的验证方法,比如:X.509证书带有链式或者同行信任的可区分名。可以实现ISecretValidator接口,然后把实现加入到服务工厂的SecretValidators集合。

你可能感兴趣的:(密钥)