Skip to main content
For Authlete 2.x documentation, see 2.x version.

はじめに

RFC 8705 の「2. Mutual TLS for OAuth Client Authentication」 では、認可サーバーが相互 TLS を用いてクライアントを認証する方法が定義されています。 Authlete は、認可サーバーが TLS のクライアント証明書を用いてクライアントを認証できる機能を提供しています。本記事では、この機能の概要と有効化の手順を説明します。

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

Authlete の TLS クライアント認証機能では、クライアントの認証に「クライアント ID (client ID)」と「サブジェクト名 (subject name)」(subject distinguished name / subject alternative name)を使用します。 トークンリクエストの処理時、認可サーバーは client IDsubject name のプロパティを Authlete に渡す責務を負います。クライアント ID はクライアントによるトークンリクエストの内容に含まれるため、認可サーバーが意識する必要はありません。一方「subject name」はリクエストの内容には含まれず、クライアント証明書に含まれており、クライアントと認可サーバーとの間の相互 TLS 接続から取得できます。 Authlete 側では、TLS_CLIENT_AUTH クライアント認証メソッドを有効にし、クライアントの subject name を登録する必要があります。mtls によるクライアント認証

サービスの設定

サービスで Authlete の TLS クライアント認証機能を有効にするには、次の手順を実施します。
  1. Authlete 管理コンソールにログインします。
  2. 組織名をクリックし、対象のサービスを選択します。
  3. 「サービス設定」>「エンドポイント」>「トークン」>「一般」に移動します。
  4. 「クライアント認証方式」で TLS_CLIENT_AUTH メソッドを選択します。
  5. 「変更を保存」をクリックしてサービス設定を更新します。
tls-client-auth_1

クライアントの設定

この例では subject name の一種として Subject Distinguished Name(Subject DN)を使用していますが、Authlete では Subject DN に加えて、さまざまな種類の Subject Alternative Name(SAN)にも対応しています。
クライアントで TLS_CLIENT_AUTH メソッドを有効にするには、次の手順を実施します。
  1. Authlete 管理コンソールにログインします。
  2. 組織名をクリックし、対象のサービスを選択します。
  3. 「クライアント設定」>「エンドポイント」>「トークン」>「一般」に移動します。
  4. 「クライアント認証方式」でドロップダウンメニューを開き、TLS_CLIENT_AUTH メソッドを選択します。
  5. 「変更を保存」をクリックして更新内容を適用します。
tls-client-auth_2 クライアントの subject name を登録するには、次の手順を実施します。
  1. 「クライアント設定」>「エンドポイント」>「トークン」>「MTLS」に移動します。
  2. 「サブジェクト識別名」に任意の値を入力します。クライアント認証に使用する、次のようなその他の name 値を指定することもできます。
    • 「サブジェクト代替名DNS」
    • 「サブジェクト代替名IPアドレス」
    • 「サブジェクト代替名URI」
    • 「サブジェクト代替名メール」
    • 「自己署名証明書キーID」
  3. 「変更を保存」をクリックして更新内容を適用します。
tls-client-auth_3 以上の設定により、Authlete はクライアント認証メソッドとして相互 TLS 認証に対応し、上記クライアントからのトークンリクエストの処理にそのメソッドを適用します。Subject DN の CN=client.example.org, … がクライアントの識別子として使用されます。

以下は、/auth/token へのリクエストの例です(読みやすさのために折り返しています)。認可サーバーはクライアントとの間で相互 TLS 接続を確立し、その接続からクライアントの証明書を取得して、API へリクエストを行います。 クライアント ID(client_id)を含むトークンリクエストの内容を “parameters” の値として指定し、クライアント証明書を “clientCertificate” の値として指定します。
Authlete はリクエストを処理し、次のような API レスポンスを認可サーバーに返します。clientAuthMethodTLS_CLIENT_AUTH となっており、クライアントが相互 TLS を用いて認証されたことがわかります。(可読性のため折り返しています)
認可サーバーは “responseContent” の値を取り出し、トークンレスポンスとしてクライアントに返します(詳細は省略します)。

関連情報

この記事では、Authlete におけるクライアント認証設定の基本を説明しています。
この記事では、「RFC 8705 OAuth 2.0 Mutual-TLS Client Authentication and Certificate-Bound Access Tokens」で定義された「相互 TLS による証明書バインドアクセストークン」を Authlete で利用するための設定手順を説明しています。
このビデオは、2018 年 7 月 24 日に東京で開催された「Financial APIs Workshop 2018 」のセッションの一つです。Authlete の Justin Richer が、OAuth インフラを構築するための Authlete 独自のセミホスト型アプローチと従来型アプローチの比較、そして Financial-grade API(FAPI)を実現するために Authlete がどのようにクライアント認証機能を拡張し相互 TLS に対応したかを解説しています。