第7章 SSO プロトコル


本章では、認証プロトコルの概要と、Red Hat Single Sign-On 認証サーバーの概要と、そのプロトコルをセキュアにするアプリケーションについて概説します。

7.1. OpenID Connect

OpenID Connect (OIDC) は、OAuth 2.0 の拡張機能である認証プロトコルです。OAuth 2.0 は承認プロトコルを構築するためのフレームワークでしかなく、主に不完全ですが、OIDC は完全な認証および承認プロトコルです。OIDC は、JWT (Json Web Token) 標準セットも多用しています。これらの標準は、アイデンティティープロバイダーの JSON 形式を定義し、そのデータをコンパクトで Web フレンドリーで暗号化する方法を定義しています。

OIDC を使用する場合は、本当に 2 つのタイプのユースケースがあります。1 つ目のアプリケーションは、Red Hat Single Sign-On サーバーがユーザーを認証するよう依頼するアプリケーションです。ログインに成功すると、アプリケーションは ID トークンアクセストークン を受け取ります。ID トークン には、ユーザー名、電子メール、その他のプロファイル情報など、ユーザーに関する情報が含まれています。アクセストークン はレルムによってデジタル署名され、アプリケーションでユーザーがアクセスできるリソースを判別するためにアプリケーションが使用できるアクセス情報 (ユーザーロールマッピングなど) が含まれます。

2 つ目のタイプのユースケースは、リモートサービスへのアクセスを取得するクライアントのものです。この場合、クライアントはユーザーの代わりに他のリモートサービスで起動するのに使用できる アクセストークン を取得するよう Red Hat Single Sign-On に要求します。Red Hat Single Sign-On はユーザーを認証し、ユーザーに要求したクライアントにアクセスを付与するよう依頼します。その後、クライアントは アクセストークン を受け取ります。この アクセストークン はレルムによってデジタル署名されます。クライアントはこの アクセストークン を使用してリモートサービスで REST 呼び出しを行うことができます。REST サービスは、アクセストークン を抽出し、トークンの署名を検証した後、トークン内のアクセス情報に基づいて、リクエストを処理するかどうかを決定します。

7.1.1. OIDC 認証フロー

OIDC は、クライアントまたはアプリケーションがユーザーを認証し、アイデンティティー および アクセス トークンを受け取る方法は異なります。使用するパスは、アクセスを要求するアプリケーションまたはクライアントのタイプに大きく依存します。これらのフローはすべて OIDC および OAuth 2.0 仕様 に説明されるため、ここでは簡単な概要のみが提供されます。

7.1.1.1. 認可コードフロー

これはブラウザーベースのプロトコルであり、ブラウザーベースのアプリケーションの認証および承認に使用することが推奨されるものです。大量のブラウザーのリダイレクトを使用してアイデンティティーおよびアクセストークンを取得します。以下は簡単な概要です。

  1. ブラウザーはアプリケーションにアクセスします。このアプリケーションはユーザーがログインしていないことを認識し、ブラウザーを Red Hat Single Sign-On にリダイレクトして認証されます。アプリケーションは、このブラウザーリダイレクトのクエリーパラメーターとしてコールバック URL (リダイレクト URL) を渡します。このブラウザーリダイレクトでは、認証が終了すると Red Hat Single Sign-On が使用するようになります。
  2. Red Hat Single Sign-On がユーザーを認証し、1 回限り非常に短い一時的なコードを作成します。Red Hat Single Sign-On は、先に提供されたコールバック URL を使用してアプリケーションにリダイレクトし、さらに一時コードをコールバック URL にクエリーパラメーターとして追加します。
  3. アプリケーションは一時コードを抽出し、Red Hat Single Sign-On に帯域外 REST 呼び出しをバックグラウンドにし、アイデンティティーアクセスリフレッシュ トークンのコードを交換します。この一時的なコードはトークンを取得する一度使用した後、再度使用することができません。これにより、再生攻撃を防ぐことができます。

アクセストークンは通常、生み上回り、分単位で有効期限が切れてから期限切れになることに留意することが重要です。ログインプロトコルによって送信された追加のリフレッシュトークンにより、アプリケーションは有効期限が切れた後に新しいアクセストークンを取得できます。危険にさらされたシステムの状況では、この更新プロトコルが重要になります。アクセストークンの有効期間が短くなると、システム全体がアクセストークンの有効期間中は盗難トークンしか脆弱になります。admin のアクセスが取り消されると、今後の更新トークン要求は失敗します。これにより、より安全でより拡張性が高まります。

このフローのもう 1 つの重要な点として、パブリック機密性 のあるクライアントの概念があります。トークンの一時コードを交換する際にクライアントシークレットを提供するには、Confidential クライアントが必要です。パブリッククライアントは、このクライアントシークレットを提供するのには必要ありません。パブリッククライアントは、HTTPS が厳密に強制され、クライアントに登録されているリダイレクト URI が非常に厳格である限り問題ありません。クライアントシークレットをセキュアに送信する方法がないため、HTML5/JavaScript クライアントは常に public クライアントである必要があります。この場合も問題ありません。したがって、HTTPS を使用し、リダイレクト URI 登録を厳密に強制する限り問題となります。本ガイドは、『クライアントの管理』の章で詳しく説明しています。

Red Hat Single Sign-On は、任意の Proof Key for Code Exchange もサポートします。

7.1.1.2. インプリシットフロー

これは、リクエストが少なく、更新トークンがないこと以外は Authorization Code Flow に類似したブラウザーベースのプロトコルです。アクセス トークンがリダイレクト URI 経由で送信されるため、ブラウザー履歴でリークされる可能性が残るため、このフローは推奨しません (以下を参照)。また、このフローは更新トークンでクライアントを提供しないため、アクセストークンは有効期間が長くなるか、ユーザーの有効期限が切れたときに再認証する必要があります。このフローは OIDC および OAuth 2.0 仕様にあるためサポートされます。以下は、プロトコルの概要です。

  1. ブラウザーはアプリケーションにアクセスします。このアプリケーションはユーザーがログインしていないことを認識し、ブラウザーを Red Hat Single Sign-On にリダイレクトして認証されます。アプリケーションは、このブラウザーリダイレクトのクエリーパラメーターとしてコールバック URL (リダイレクト URL) を渡します。このブラウザーリダイレクトでは、認証が終了すると Red Hat Single Sign-On が使用するようになります。
  2. Red Hat Single Sign-On はユーザーを認証し、identity および access トークンを作成します。Red Hat Single Sign-On は、先に提供されたコールバック URL を使用してアプリケーションにリダイレクトし、さらにコールバック URL のクエリーパラメーターとして identity および access トークンを追加します。
  3. アプリケーションはコールバック URL から identity および access トークンを抽出します。

7.1.1.3. リソースオーナーパスワードクレデンシャルの付与 (直接アクセスグラント)

これは、管理コンソールで Direct Access Grants と呼ばれます。これは、ユーザーの代わりにトークンを取得する REST クライアントによって使用されます。HTTP POST リクエストには、ユーザーの認証情報とクライアントの ID (機密クライアントの場合) が含まれる HTTP POST リクエストがあります。ユーザーの認証情報は、フォームパラメーター内で送信されます。HTTP 応答には、identityaccess、および refresh トークンが含まれます。

7.1.1.4. クライアント認証情報の付与

これは REST クライアントでも使用しますが、外部ユーザーの代わりに機能するトークンを取得する代わりに、クライアントに関連するサービスアカウントのメタデータおよびパーミッションに基づいてトークンが作成されます。例と詳細な情報は、「サービスアカウント」の章を参照してください。

7.1.2. Red Hat Single Sign-On Server OIDC URI エンドポイント

以下は、Red Hat Single Sign-On がパブリッシュする OIDC エンドポイントの一覧です。これらの URL は、Red Hat Single Sign-On 以外のクライアントアダプターを使用して、認証サーバーと OIDC と通信させる場合に便利です。これらはすべて相対 URL と HTTP(S) プロトコル、hostname、通常は /auth で始まるパスである URL のルートです (例: https://localhost:8080/auth)。

/realms/{realm-name}/protocol/openid-connect/auth
これは、Authorization Code Flow で一時的なコードを取得する URL エンドポイントです。または、Implicit Flow、Direct Grants、または Client Grants でトークンを取得する URL エンドポイントです。
/realms/{realm-name}/protocol/openid-connect/token
これは、一時コードをトークンに変換する Authorization Code Flow の URL エンドポイントです。
/realms/{realm-name}/protocol/openid-connect/logout
これは、ログアウトを実行するための URL エンドポイントです。
/realms/{realm-name}/protocol/openid-connect/userinfo
これは、OIDC 仕様で説明されている User Info サービスの URL エンドポイントです。
/realms/{realm-name}/protocol/openid-connect/revoke
これは、RFC7009 に記載されている OAuth 2.0 Token Revocation の URL エンドポイントです。

これらはすべて、 {realm-name} をレルムの名前に置き換えます。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat