検索

8.3. ユーザー管理のアクセス

download PDF

Red Hat build of Keycloak Authorization Services は、ユーザー管理アクセス (略して UMA) に基づいています。UMA は、以下の方法で OAuth2 機能を強化する仕様です。

  • プライバシー

    今日、ユーザーのプライバシーは、より多くのデータやデバイスが利用でき、クラウドに接続しているため、ユーザーのプライバシーの懸念となります。UMA および Red Hat build of Keycloak を使用すると、リソースサーバーの機能が強化されます。ユーザーが定義したポリシーに基づきパーミッションが許可され、ユーザープライバシーの観点からリソースの保護方法が向上します。

  • サードパーティー間の認可

    リソースの所有者 (通常のエンドユーザー) は、リソースへのアクセスを管理し、他のリソースにアクセスするために他のユーザーが (例: 通常のエンドユーザー) を認可できます。これは、ユーザーの代わりに動作しているクライアントアプリケーションに、UMA リソースの所有者が完全に非同期でアクセスすることが許可される OAuth2 とは異なります。

  • リソース共有

    リソースの所有者はリソースに対するパーミッションを管理し、特定のリソースにアクセスできるユーザーや方法を決定できます。その後、Red Hat build of Keycloak は、リソース所有者がリソースを管理できる共有管理サービスとして機能します。

Red Hat build of Keycloak は、ほとんどの UMA 機能を提供する、UMA 2.0 準拠の認可サーバーです。

たとえば、Alice というユーザー (リソース所有者) は、インターネットバンキングサービス (リソースサーバー) を使用して自分の銀行口座 (リソース) を管理しているとします。ある日、Alice は自分の銀行口座を会計専門家の Bob (要求側) に開示することにしました。ただし、Bob は Alice の口座の閲覧権限 (スコープ) しか持っていません。

リソースサーバーとして、インターネットバンキングサービスは Alice の銀行口座を保護できる必要があります。このため、Red Hat build of Keycloak の Resource Registration Endpoint を使用して、Alice の銀行口座を表すサーバーでリソースを作成します。

現在、Bob が Alice の銀行口座にアクセスしようとすると、アクセスは拒否されます。インターネットバランシングサービスは、銀行取引アカウントのデフォルトポリシーをいくつか定義します。その 1 つは、所有者 (この場合は Alice) のみが銀行取引アカウントにアクセスできます。

ただし、インターネットボーシングサービスは、Alice のプライバシーに伴い、銀行取引アカウントの特定のポリシーを変更することもできます。変更可能なこれらのポリシーの 1 つとして、銀行取引アカウントを閲覧できるユーザーを定義することです。このため、インターネットバンキングサービスは Red Hat build of Keycloak を使用して、Alice が誰にどのような操作 (またはデータ) の権限を許可するかを選択できる領域を提供します。いつでも、Alice は追加のパーミッションを Bob に付与するか、付与できます。

8.3.1. 認可プロセス

UMA では、クライアントが UMA 保護リソースサーバーにアクセスしようとすると、認可プロセスが起動します。

UMA 保護リソースサーバーでは、トークンが RPT である要求内のベアラートークンが必要です。クライアントが RPT を使用せずにリソースサーバーでリソースを要求する場合:

クライアントで、RPT を送信せずに保護されているリソースを要求

curl -X GET \
  http://${host}:${port}/my-resource-server/resource/1bfdfe78-a4e1-4c2d-b142-fc92b75b986f

リソースサーバーは、パーミッション ticket と、RPT 取得のためのチケット送信先である Red Hat build of Keycloak サーバーの場所が指定された as_uri パラメーターを含む応答を、クライアントに送信します。

リソースサーバーはパーミッションチケットで応答

HTTP/1.1 401 Unauthorized
WWW-Authenticate: UMA realm="${realm}",
    as_uri="https://${host}:${port}/realms/${realm}",
    ticket="016f84e8-f9b9-11e0-bd6f-0021cc6004de"

パーミッションチケットは、Red Hat build of Keycloak Permission API が発行する特殊なトークンです。これらは、要求されるパーミッション (リソースやスコープなど) や、要求に関連するその他の情報を表します。リソースサーバーのみがこれらのトークンを作成できます。

これで、クライアントはパーミッションチケットと Red Hat build of Keycloak サーバーの場所情報を取得したため、ディスカバリードキュメントを使用してトークンエンドポイントの場所を取得し、認可要求を送信できます。

クライアントは、認可要求をトークンエンドポイントに送信して RPT を取得

curl -X POST \
  http://${host}:${port}/realms/${realm}/protocol/openid-connect/token \
  -H "Authorization: Bearer ${access_token}" \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "ticket=${permission_ticket}

Red Hat build of Keycloak アセスメントプロセスでパーミッションが発行されると、パーミッションが関連付けられている RPT が発行されます。

Red Hat build of Keycloak は RPT でクライアントに応答します

HTTP/1.1 200 OK
Content-Type: application/json
...
{
    "access_token": "${rpt}",
}

サーバーからの応答は、他の付与タイプを使用する場合にトークンエンドポイントからの他の応答と同様になります。RPT は access_token 応答パラメーターから取得できます。クライアントがパーミッションを持つことを認可されていない場合、Red Hat build of Keycloak は 403 HTTP ステータスコードで応答します。

Red Hat build of Keycloak は認可要求を拒否します

HTTP/1.1 403 Forbidden
Content-Type: application/json
...
{
    "error": "access_denied",
    "error_description": "request_denied"
}

8.3.2. パーミッション要求の送信

認可プロセスの一環として、クライアントはまず Red Hat build of Keycloak の Token Endpoint で RPT と交換するために、UMA で保護されたリソースサーバーからパーミッションチケットを取得する必要があります。

デフォルトでは、Red Hat build of Keycloak は 403 HTTP ステータスコードで応答し、クライアントに RPT を発行できない場合は request_denied エラーを返します。

Red Hat build of Keycloak は認可要求を拒否します

HTTP/1.1 403 Forbidden
Content-Type: application/json
...
{
    "error": "access_denied",
    "error_description": "request_denied"
}

このような応答は、Red Hat build of Keycloak がパーミッションチケットで表されるパーミッションで RPT を発行できなかったことを意味します。

場合によっては、クライアントアプリケーションは非同期認可フローを開始し、アクセスを付与するべきかどうかを判断するリソースの所有者をリクエストする場合があります。そのため、クライアントは、トークンエンドポイントへの認可要求と共に submit_request 要求パラメーターを使用できます。

curl -X POST \
  http://${host}:${port}/realms/${realm}/protocol/openid-connect/token \
  -H "Authorization: Bearer ${access_token}" \
  --data "grant_type=urn:ietf:params:oauth:grant-type:uma-ticket" \
  --data "ticket=${permission_ticket} \
  --data "submit_request=true"

submit_request パラメーターを使用すると、Red Hat build of Keycloak はアクセスが拒否されたリソースごとにパーミッション要求を永続化します。作成されると、リソースの所有者は、アカウントを確認し、パーミッション要求を管理できます。

この機能はアプリケーションの Request Access ボタンと考えることができます。ここでは、他のユーザーにリソースへのアクセスを要求できます。

8.3.3. ユーザーリソースへのアクセス管理

ユーザーは、Red Hat build of Keycloak の アカウントコンソールを使用して、リソースへのアクセスを管理できます。この機能を有効にするには、最初にレルムのユーザー管理アクセスを有効にする必要があります。

手順

  1. 管理コンソールにログインします。
  2. メニューで Realm Settings をクリックします。
  3. ユーザー管理アクセスON に切り替えます。
  4. 管理コンソールの右上にあるユーザー名をクリックし、Manage Account を選択します。

    My Resources

  5. メニューオプションの My Resources をクリックします。以下のオプションを含むページが表示されます。

    • マイリソース の管理

      このセクションには、ユーザーが所有するすべてのリソースのリストが含まれます。ユーザーは、リソースをクリックして詳細情報を検索し、リソースを他のユーザーと共有できます。承認待ちのパーミッション要求がある場合、リソースの名前の横にアイコンが表示されます。これらの要求は、特定のリソースへのアクセスを要求するユーザー (ユーザー) に接続されます。ユーザーはこれらのリクエストを承認または拒否できます。その場合はアイコンをクリックします。

      Resource Detail

    • 共有されたリソース の管理

      このセクションでは、ユーザーと共有する全リソースのリストを示します。

    • このリソースへのアクセス権限のあるユーザー の管理

      本セクションでは、このリソースへのアクセスを持つユーザーのリストを説明します。ユーザーは、Revoke ボタンをクリックするか、特定の Permission を削除してアクセスを取り消すことができます。

    • リソースを他のユーザーと共有する

      別のユーザーのユーザー名またはメールアドレスを入力し、ユーザーはリソースを共有し、アクセスを付与するパーミッションを選択できます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.