8.3. ユーザー管理のアクセス
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 の アカウントコンソールを使用して、リソースへのアクセスを管理できます。この機能を有効にするには、最初にレルムのユーザー管理アクセスを有効にする必要があります。
手順
- 管理コンソールにログインします。
- メニューで Realm Settings をクリックします。
- ユーザー管理アクセス を ON に切り替えます。
管理コンソールの右上にあるユーザー名をクリックし、Manage Account を選択します。
メニューオプションの My Resources をクリックします。以下のオプションを含むページが表示されます。
マイリソース の管理
このセクションには、ユーザーが所有するすべてのリソースのリストが含まれます。ユーザーは、リソースをクリックして詳細情報を検索し、リソースを他のユーザーと共有できます。承認待ちのパーミッション要求がある場合、リソースの名前の横にアイコンが表示されます。これらの要求は、特定のリソースへのアクセスを要求するユーザー (ユーザー) に接続されます。ユーザーはこれらのリクエストを承認または拒否できます。その場合はアイコンをクリックします。
共有されたリソース の管理
このセクションでは、ユーザーと共有する全リソースのリストを示します。
このリソースへのアクセス権限のあるユーザー の管理
本セクションでは、このリソースへのアクセスを持つユーザーのリストを説明します。ユーザーは、
Revoke
ボタンをクリックするか、特定のPermission
を削除してアクセスを取り消すことができます。リソースを他のユーザーと共有する
別のユーザーのユーザー名またはメールアドレスを入力し、ユーザーはリソースを共有し、アクセスを付与するパーミッションを選択できます。