OAuth 2.0 プロトコル上に構築された OpenID Connect(OIDC)は、ID 認証と承認のためのプロトコルです。一般的にシングルサインオン(SSO)を実装するために使用されます。イングレスゲートウェイで OIDC ベースの SSO を構成すると、Alibaba Cloud IDentity as a Service(IDaaS)または OIDC プロトコルに準拠した他の ID プロバイダー(IdP)から提供される ID 情報を使用して、単一の ID で複数の関連システムにログオンできます。さらに、アプリケーションを変更する必要はありません。これにより、アプリケーションのセキュリティが向上し、アプリケーションの開発と管理が簡素化されます。
前提条件
指定された名前空間で自動サイドカープロキシインジェクションが有効になっています。詳細については、「サイドカープロキシインジェクションポリシーの構成」をご参照ください。
Service Mesh(ASM)インスタンスにイングレスゲートウェイが作成され、イングレスゲートウェイの IP アドレスが取得されています。詳細については、「イングレスゲートウェイの作成」と「Istio リソースを使用してトラフィックをサービスの異なるバージョンにルーティングする」の手順 3 のサブステップ 1 をご参照ください。
IdP が構成されています。詳細については、「Alibaba Cloud IDaaS と ASM を統合してシングルサインオンを実装する」の手順 1 と 手順 2 をご参照ください。
IdP を構成した後、手順 5 で使用する以下の情報を取得できます。
redirect uri: http://${イングレスゲートウェイの IP アドレス}/oauth2/callback issuer: https://eiam-api-cn-hangzhou.aliyuncs.com/v2/idaas_tbn25osdlmz6gtqfq3j2pz****/app_ml5tzapsl7zmfo53wb3nwk****/oidc client id: ******** client secret: *********
手順
この例では、Alibaba Cloud IDaaS インスタンスを IdP として使用して、ASM 内のアプリケーションへの SSO を実装します。セルフマネージド OIDC IdP を使用する場合は、「Keycloak と ASM を統合してシングルサインオンを実装する」をご参照ください。
ASM コンソール にログオンします。左側のナビゲーションペインで、 を選択します。
[メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションペインで、 を選択します。
[イングレスゲートウェイ] ページで、使用するイングレスゲートウェイをクリックします。
左側のナビゲーションペインで、 を選択します。
構成ウィザードの [OIDC 構成] ステップで、[ゲートウェイ OIDC シングルサインオンを有効にする] をオンにし、パラメーターを構成して、[次へ] をクリックします。
パラメーター
説明
リダイレクトアドレス
この例では、[ingressgateway の IP アドレスを使用] と [http] が選択されています。
コールバックアドレス
ユーザーがリダイレクトされる URL です。
OIDC 発行者 URL
OIDC 発行者を識別および認証するために使用される URL です。
クライアント ID
発行者から提供されるクライアント ID です。
クライアントシークレット
発行者から提供されるクライアントシークレットです。
Cookie シークレット
セキュア Cookie のシード文字列。Base64 エンコードできます。
Cookie の有効期限
Cookie の有効期間です。この期間が経過すると、Cookie は期限切れになります。このパラメーターを 0 に設定すると、Cookie は期限切れになりません。
Cookie の更新間隔
Cookie が更新される間隔です。このパラメーターを 0 に設定すると、Cookie は更新されません。
スコープ
取得できるユーザー情報のタイプです。指定されたスコープは、発行者によってサポートされている必要があります。
構成ウィザードの [一致ルール] ステップで、パラメーターを構成し、[送信] をクリックします。
パラメーター
説明
一致モード
この例では、[一致した場合に認証] が選択されています。有効な値:
[一致した場合に認証]:ユーザーは、指定されたパス内のリソースにアクセスするためにログオンする必要があります。
[一致した場合に認証をバイパス]:ユーザーは、指定されたパス内のリソースにアクセスするためにログオンする必要はありません。
一致ルールの追加
[パス] スイッチをオンにし、このパラメーターを /productpage に設定します。この構成は、/productpage パス内のリソースにアクセスするためのリクエストに OIDC 認証が必要であることを示します。
次に、構成ウィザードの [完了] ステップで、OIDC ベースの SSO が正常に構成されたことを示すメッセージが表示され、ネイティブの Istio セキュリティリソースが表示されます。[YAML] をクリックして、リソース構成を表示できます。
ブラウザーを使用して http://${ASM ゲートウェイアドレス}/productpage にアクセスし、OIDC ベースの SSO 構成が有効になっているかどうかを確認します。
${イングレスゲートウェイの IP アドレス} を目的のイングレスゲートウェイの IP アドレスに置き換えます。次のページが表示された場合は、アクセスが成功し、OIDC ベースの SSO 構成が有効になっていることを示します。
FAQ
イングレスゲートウェイで OIDC ベースの SSO を構成した後、アプリケーションはアクセストークンを取得したり、IdP からユーザー情報をリクエストしたりする必要がありますか?
イングレスゲートウェイで OIDC ベースの SSO を構成した後、アプリケーションは IdP 承認と認証に関連するロジックを無視できます。アプリケーションは、キーが Authorization
のヘッダーを含むリクエストを受信します。このヘッダーは、リクエストがイングレスゲートウェイによって処理されるときに追加されます。このヘッダーは、IdP によって生成された JSON Web トークン(JWT)です。JWT ペイロードには、アプリケーションに必要なユーザー情報が含まれており、JWT はイングレスゲートウェイによって認証されます。したがって、アプリケーションは JWT を繰り返し認証する必要はありません。アプリケーションは、IdP からユーザー情報をリクエストすることなく、リクエストからこのヘッダーを直接解析できます。
OIDC ベースの SSO を構成した後、ブラウザーにログオンすると Cookie が追加されます。この Cookie はアプリケーションにとって重要ですか?
アプリケーションはこの Cookie を無視できます。この Cookie は、ゲートウェイが現在のセッションの状態を記録するために使用され、アプリケーションにとって意味がありません。アプリケーションはリクエスト内の JWT を取得するだけです。
IdP によって提供される拡張情報を取得するにはどうすればよいですか?
ASM で構成は必要ありません。対応する IdP の実装を参照する必要があります。この例では、Alibaba Cloud IDaaS が使用されています。
アプリケーションからログオフするにはどうすればよいですか?
次の手順を実行して、アプリケーションからログオフできます。
IdP からログオフします。IdP によって提供される方法を使用して IdP からログオフする必要があります。一般に、IdP はログオフ用の URI を提供します。URI にアクセスすることで IdP からログオフできます。
クライアントでイングレスゲートウェイによって設定された Cookie をクリアします。
/oauth2/sign_out
パスを直接呼び出すと、イングレスゲートウェイは対応する Cookie を自動的にクリアします。
ASM V1.18.147 以降では、イングレスゲートウェイで IdP ログオフエンドポイントを構成できます。OIDC 構成ページでエンドポイントを入力できます。次に、一致ルールの構成で、/oauth2/sign_out
パス内のリソースにアクセスするためのリクエストに OIDC 認証が不要であることを指定できます。構成が完了したら、ブラウザーを使用して /oauth2/sign_out
パスにアクセスすると、対応する Cookie がクリアされ、設定したログオフエンドポイントにリダイレクトされます。Alibaba Cloud IDaaS からログアウトする方法の詳細については、「SLO」をご参照ください。
参照資料
API操作、シークレットローテーション、IDaaSでサポートされているOIDCグラントタイプ、IDaaSでの構成、アプリケーションでの構成など、OIDCアプリケーションの構成項目の詳細については、一般的な構成、SSOの設定、OIDC SSO構成、およびOIDC id_token拡張フィールドのルールをご参照ください。
IDaaSからSSOを実装することでアプリケーションにログオンしたユーザーがログアウトする場合、アプリケーションでグローバルログアウトを開始して、アプリケーションセッションとプライマリIDaaSログオンセッションを終了できます。詳細については、SLOをご参照ください。