Microsoft Entra External ID セルフサービス サインアップのユーザー フローで API コネクタとして使用される API をセキュリティで保護する
適用対象: 従業員テナント
外部テナント (詳細情報)
Microsoft Entra External ID セルフサービス サインアップのユーザー フロー内で REST API を統合する場合は、認証を使用して REST API エンドポイントを保護する必要があります。 REST API 認証により、Microsoft Entra ID などの適切な資格情報を備えたサービスだけが REST API エンドポイントを呼び出すことができます。 この記事では、REST API をセキュリティで保護する方法について説明します。
必須コンポーネント
チュートリアル「API コネクタをサインアップ ユーザー フローに追加する」ガイドの手順を完了している。
API エンドポイントを保護するには、HTTP 基本認証または HTTPS クライアント証明書認証を使用します。 どちらの場合も、API エンドポイントを呼び出すときに Microsoft Entra ID によって使用される資格情報を指定します。 次に、API エンドポイントは資格情報を確認し、承認の決定を行います。
HTTP 基本認証
ヒント
この記事の手順は、開始するポータルに応じて若干異なる場合があります。
HTTP 基本認証は RFC 2617 で定義されています。 基本認証は、次のように動作します。Microsoft Entra ID によって、クライアントの資格情報 (username
と password
) が Authorization
ヘッダーに含まれた HTTP 要求が送信されます。 資格情報は、Base64 でエンコードされた文字列 username:password
として書式設定されます。 その後、お使いの API によってこれらの値がチェックされ、他の承認決定が実行されます。
HTTP 基本認証を使用して API コネクタを構成するには、次の手順を実行します。
- Microsoft Entra 管理センターにユーザー管理者以上でサインインしてください。
- [ID]>[External Identities]>[概要] を参照します。
- [すべてのAPI コネクタ] を選択し、構成する [API コネクタ] を選択します。
- [認証の種類] で、 [基本] を選択します。
- REST API エンドポイントの [ユーザー名] と [パスワード] を指定します。
- [保存] を選択します。
HTTPS クライアント証明書認証
クライアント証明書の認証は証明書ベースの相互認証であり、クライアントである Microsoft Entra ID がクライアント証明書をサーバーに提供し、その ID を証明します。 これは、SSL ハンドシェイクの一部として発生します。 お使いの API によって、証明書が有効なクライアント (Microsoft Entra ID など) に属していることが確認され、承認の決定が実行されます。 クライアント証明書は、X.509 デジタル証明書です。
重要
運用環境では、この証明書は証明機関によって署名されている必要があります。
証明書を作成する
オプション 1: Azure Key Vault を使用する (推奨)
証明書を作成するには、Azure Key Vault を使用できます。これには、自己署名証明書のオプションと、署名された証明書の証明書発行者プロバイダーとの統合があります。 推奨設定には次が含まれます。
- [サブジェクト] :
CN=<yourapiname>.<tenantname>.onmicrosoft.com
- [コンテンツの種類] :
PKCS #12
- [有効期間のアクション タイプ] :
Email all contacts at a given percentage lifetime
またはEmail all contacts a given number of days before expiry
- [キーの種類] :
RSA
- [キー サイズ] :
2048
- エクスポート可能な秘密キー:
Yes
(.pfx
ファイルをエクスポートできるようにするため)
これで、証明書をエクスポートできます。
オプション 2: PowerShell を使用して自己署名証明書を準備する
証明書をまだ持っていない場合は、自己署名証明書を使用できます。 自己署名証明書は、証明機関 (CA) によって署名されていないセキュリティ証明書であり、CA によって署名された証明書のセキュリティ保証を提供するものではありません。
Windows では、PowerShell の New-SelfSignedCertificate コマンドレットを使用して証明書を生成します。
この PowerShell コマンドを実行して、自己署名証明書を生成します。
contosowebapp.contoso.onmicrosoft.com
などのアプリケーションと Azure AD B2C のテナント名に合わせて-Subject
引数を変更します。 また、証明書に別の有効期限を指定するように-NotAfter
日付を調整することもできます。New-SelfSignedCertificate ` -KeyExportPolicy Exportable ` -Subject "CN=yourappname.yourtenant.onmicrosoft.com" ` -KeyAlgorithm RSA ` -KeyLength 2048 ` -KeyUsage DigitalSignature ` -NotAfter (Get-Date).AddMonths(12) ` -CertStoreLocation "Cert:\CurrentUser\My"
Windows コンピューターで、 [ユーザー証明書の管理] を検索して選択します
[証明書 - 現在のユーザー] で、 [個人用]>[証明書]>yourappname.yourtenant.onmicrosoft.com を開きます。
証明書を選択し、 [アクション]>[すべてのタスク]>[エクスポート] の順に選択します。
[次へ]>[はい、秘密キーをエクスポートします]>[次へ] を選択します。
[エクスポート ファイルの形式] の既定値を受け入れて、 [次へ] を選択します。
[パスワード] オプションを有効にして、証明書のパスワードを入力し、 [次へ] を選択します。
証明書を保存する場所を指定するには、 [参照] を選択し、任意のディレクトリに移動します。
[名前を付けて保存] ウィンドウで、 [ファイル名] を入力して、 [保存] を選択します。
[次へ]>[完了] の順に選択します。
Azure AD B2C で .pfx ファイルのパスワードを受け入れるには、Windows 証明書ストアのエクスポート ユーティリティで、AES256-SHA256 ではなく、TripleDES-SHA1 オプションを使用してパスワードを暗号化する必要があります。
API コネクタを構成する
クライアント証明書認証を使用して API コネクタを構成するには、次の手順を実行します。
- Microsoft Entra 管理センターにユーザー管理者以上でサインインしてください。
- [ID]>[External Identities]>[概要] を参照します。
- [すべてのAPI コネクタ] を選択し、構成する [API コネクタ] を選択します。
- [認証の種類] で [証明書] を選択します。
- [証明書のアップロード] ボックスで、秘密キーを備えた証明書の .pfx ファイルを選択します。
- [パスワードの入力] ボックスに、証明書のパスワードを入力します。
- [保存] を選択します。
承認の決定を実行する
API エンドポイントを保護するために、API では、送信されたクライアント証明書に基づいて承認が実装される必要があります。 Azure App Service と Azure Functions については、TLS 相互認証の構成に関するページで、API コードから証明書を有効化および検証する方法をご覧ください。 または、Azure API Management をすべての API サービスの前のレイヤーとして使用して、クライアント証明書のプロパティを目的の値と照合することもできます。
証明書を書き換える
証明書の有効期限が切れることを知らせるリマインダー アラートを設定することをお勧めします。 使用されている証明書の有効期限が迫っている場合は、新しい証明書を生成し、上の手順を繰り返す必要があります。 新しい証明書の使用を "ロール" するために、新しい証明書がデプロイされている間、一時的に、お使いの API サービスで引き続き古い証明書と新しい証明書を受け入れることができます。
既存の API コネクタに新しい証明書をアップロードするには、[API コネクタ]で API コネクタを選択し、[新しい証明書のアップロード] を選択します。 直近でアップロードされ、開始日を過ぎていて有効期限が切れていない証明書が、Microsoft Entra ID によって自動的に使用されます。
API キー認証
一部のサービスは、"API キー" メカニズムを使用して、呼び出し元に HTTP ヘッダーまたは HTTP クエリ パラメーターとして一意のキーを含めることを要求することにより、開発中に HTTP エンドポイントへのアクセスを難読化します。 Azure Functions に対しては、お使いの API コネクタのエンドポイント URL に code
をクエリ パラメーターとして含めることで、これを実現できます。 たとえば、https://contoso.azurewebsites.net/api/endpoint
?code=0123456789
です。
これは、運用環境で単独で使用する必要があるメカニズムではありません。 そのため、基本認証または証明書認証の構成は常に必要です。 開発上の目的により、いずれの認証方法も実装しない場合 (推奨されません)、API コネクタの構成で "基本" 認証を選択し、適切な承認を実装する間、API が無視できる一時的な値を username
と password
に使用します。
次のステップ
- クイックスタートのサンプルからご覧ください。