使用X.509证书认证客户端


layout: docs-default

使用X.509证书认证客户端

客户端一般使用共享的密钥来认真(也就是客户端secret),还有一个选择就是用X.509
client 证书.

注册客户端

通过ISecretValidator接口可以完全控制 映射一个客户端证书到对应的客户端密钥
默认实现是通过证书的指纹来映射合适的客户端。
下面的代码片段用来为客户端注册客户凭据:

var certClient = new Client
{
    ClientName = "Client Credentials Flow Client with Client Certificate",                   
    ClientId = "certclient",
    
    ClientSecrets = new List
    { 
        new Secret
        {
            Value = "61B754C541BBCFC6A45A9E9EC5E47D8702B78C29",
            Type = Constants.SecretTypes.X509CertificateThumbprint,
        }
    },

    Flow = Flows.ClientCredentials,
                    
    AllowedScopes = new List 
    {
        "read", 
        "write"
    },
}

配置主机

我们需要配置主机接受用户端证书,对于IIS,我们需要配置一个Location节来让令牌endpoint接受客户端证书和SSL设置:


  
    
      
    
  

备注 默认情况下, SSL设置是被IIS锁定的,需要在代理配置(delegation configuration)设置为可读写。

申请令牌

为了申请令牌,需要把客户端证书提供给HTTP Client并把客户端ID放在post body中。
下面是用IdentityModel OAuth2客户端的例子:

async Task RequestTokenAsync()
{
    var cert = new X509Certificate2("Client.pfx");

    var handler = new WebRequestHandler();
    handler.ClientCertificates.Add(cert);

    var client = new OAuth2Client(
        new Uri("https://identityserver.io/core/connect/token"),
        "certclient",
        handler);

    return await client.RequestClientCredentialsAsync("read write");
}

你可能感兴趣的:(使用X.509证书认证客户端)