TLS クライアント認証 (tls_client_auth)

はじめに


本記事では、クライアント認証に「TLS クライアント認証」を用いるための、サービスおよびクライアントの設定について説明します。

Authlete における TLS クライアント認証のしくみ


Authlete の TLS クライアント認証機能は、「クライアント ID」と「サブジェクト識別名」を用いて、クライアントを認証します。

つまり Authlete をバックエンドに用いる認可サーバーは、クライアントから受信した「トークンリクエスト」(クライアント ID を含む)と、クライアントと TLS 双方向認証を確立して得た「クライアント証明書(サブジェクト識別名を含む)」とを、Authlete の /auth/token API に送信し、トークンリクエスト処理を任せることになります。

この Authlete の機能を用いるには、「TLS クライアント認証」サポートの有効化と、クライアントの「サブジェクト識別名」の登録が必要です。

サービス側の TLS クライアント認証設定


Authlete のサービス管理者コンソールにログインし、 「認可」タブの「トークンエンドポイント」セクションにおいて以下を設定します。
項目
サポートするクライアント認証方式
TLS_CLIENT_AUTH
サービス設定の「サポートするクライアント認証方式」



クライアント側の TLS クライアント認証設定


Authlete のクライアントアプリ開発者コンソールにアクセスし、 各タブにおいて以下を設定します。

「認可」タブの「トークンエンドポイント」セクション


項目
サポートするクライアント認証方式
TLS_CLIENT_AUTH

クライアント設定の「サポートするクライアント認証方式」


「JWK セット」タブ


項目
TLS クライアント認証のためのサブジェクト識別名
(例: CN=client.example.org, O=Client, L=Chiyoda-ku, ST=Tokyo, C=JP)

クライアント設定の「TLS クライアント認証のためのサブジェクト識別名」


以上の設定により、Authlete サービスは TLS 双方向認証によるクライアント認証に対応し、かつ上記のクライアントからのトークンリクエストについて、その認証方式を適用することになります。 また認証の際のサブジェクト識別名として CN=client.example.org, ... を用います。

動作例


以下は /auth/token API に送信するリクエストの例です(一部折り返しています)。clientId パラメーターの値としてクライアント ID を、clientCertificate パラメーターの値としてクライアント証明書を指定しています。


curl -s -X POST https://api.authlete.test/api/auth/token \
-u '174381609020:LszYEVDLM5Bu4lRjO9Vaj0tMSMVerWiPf_zcdy-vu4k' \
-H 'Content-Type: application/json' \
-d '{"clientId":"591205987816490",
"parameters": "grant_type=authorization_code&
 redirect_uri=https://client.example.org/cb/example.com&
 code=HVIza0dGG9nDKGStAzMObYH9GkXME0aRSaLEcToHEI8",
"clientCertificate":"-----BEGIN CERTIFICATE-----
MIIDPDCCAiQCCQDWNMOIuzwDfzANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJK
UDEOMAwGA1UECAwFVG9reW8xEzARBgNVBAcMCkNoaXlvZGEta3UxDzANBgNVBAoM
BkNsaWVudDEbMBkGA1UEAwwSY2xpZW50LmV4YW1wbGUub3JnMB4XDTE5MTAyODA3
MjczMFoXDTIwMTAyNzA3MjczMFowYDELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRv
a3lvMRMwEQYDVQQHDApDaGl5b2RhLWt1MQ8wDQYDVQQKDAZDbGllbnQxGzAZBgNV
BAMMEmNsaWVudC5leGFtcGxlLm9yZzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAK2Oyc+BV4N5pYcp47opUwsb2NaJq4X+d5Itq8whpFlZ9uCCHzF5TWSF
XrpYscOp95veGPF42eT1grfxYyvjFotE76caHhBLCkIbBh6Vf222IGMwwBbSZfO9
J3eURtEADBvsZ117HkPVdjYqvt3Pr4RxdR12zG1TcBAoTLGchyr8nBqRADFhUTCL
msYaz1ADiQ/xbJN7VUNQpKhzRWHCdYS03HpbGjYCtAbl9dJnH2EepNF0emGiSPFq
df6taToyCr7oZjM7ufmKPjiiEDbeSYTf6kbPNmmjtoPNNLeejHjP9p0IYx7l0Gkj
mx4kSMLp4vSDftrFgGfcxzaMmKBsosMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
qzdDYbntFLPBlbwAQlpwIjvmvwzvkQt6qgZ9Y0oMAf7pxq3i9q7W1bDol0UF4pIM
z3urEJCHO8w18JRlfOnOENkcLLLntrjOUXuNkaCDLrnv8pnp0yeTQHkSpsyMtJi9
R6r6JT9V57EJ/pWQBgKlN6qMiBkIvX7U2hEMmhZ00h/E5xMmiKbySBiJV9fBzDRf
mAy1p9YEgLsEMLnGjKHTok+hd0BLvcmXVejdUsKCg84F0zqtXEDXLCiKcpXCeeWv
lmmXxC5PH/GEMkSPiGSR7+b1i0sSotsq+M3hbdwabpJ6nQLLbKkFSGcsQ87yL+gr
So6zun26vAUJTu1o9CIjxw==
-----END CERTIFICATE-----"}'


How did we do with this article?