web-dev-qa-db-ja.com

KeyCloakユーザーの検証とトークンの取得

まず第一に、私はKeycloakに非常に慣れていないので、質問していることが間違っているのかどうかすみません。

Keycloakサーバーをインストールしましたが、次のものを使用して同じWeb UIにアクセスできます。

http:// localhost:8008/auth

私の要件は、レルムユーザーをk Keycloak APIに渡して検証し、そこから応答でトークンを取得し、このトークンを他のWeb API呼び出しに渡すことです。

しかし、私はこれを行う方法に関する簡単なガイドを見つけることができませんでした...

更新:


KEYCLOAKからのUIの使用:

これまでのところ:

  • realmを作成できます:例:DemoRealm

  • Realmの下に、クライアントを作成しました:例:DemoClient

  • クライアントの下にユーザーを作成しました:例:DemoUser

POSTMANの使用:

を使用してトークンを正常に取得することもできます

http://localhost:8080/auth/realms/DemoRelam/protocol/openid-connect/token

POST:
{
"grant_type": "client_credentials",
"username": "",
"password": "",
"client_secret":"",
"client_id":"DemoClient"
}

これに対して、トークンを取得しています。

{
    "access_token": "eyJhbGciOiJSUzI1NiIsINVSHGhepnDu13SwRBL-v-y-04_6e6IJbMzreZwPI-epwdVPQe-ENhpvms2WdGM_DmgMLZ8YQFS4LDl9R7ZHT8AgXe-WCFV6OFkA7zvdeFwQ4kVVZE0HlNgHgoi4DrgMfwwz_ku1yJNJP3ztTY1nEqmA",
    "expires_in": 300,
    "refresh_expires_in": 1800,
    "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJRRnB5YlloMGVEektIdlhOb3JvaFUxdlRvWVdjdP3vbfvk7O0zvppK9N4-oaUqZSr0smHv5LkuLDQYdPuxA",
    "token_type": "bearer",
    "not-before-policy": 0,
    "session_state": "bb1c586a-e880-4b96-ac16-30e42c0f46dc"
}

さらに、私はより詳細に飛び込んでいて、このAPIガイドを見つけました:

http://www.keycloak.org/docs-api/3.0/rest-api/index.html#_users_resource

このガイドでは、Get usersを使用してレルムのユーザーを取得できると述べています。クエリパラメーターに従ってフィルター処理されたユーザーのリストを返します。

GET /admin/realms/{realm}/users

ただし、POSTMANを使用してユーザーを取得すると、403エラーコードが表示されます。前のステップで取得した認証と同じトークンを渡します。

http://localhost:8080/auth/admin/realms/DemoRelam/users

誰でも私を案内してもらえますか?

7
Rohitesh

選択肢は2つあります。ユーザーに代わって(Adnan Khanが指摘したように)行動するか、専用のクライアントを作成できます。

ユーザーに代わって

1)機密クライアントを作成します(すでに入手していると思います)

2)ユーザーを作成し、適切なロールを割り当てます。 view-users から realm-managementグループ

3)トークンを取得します(curlと jq を使用しています):

KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=confidential-client
CLIENT_SECRET=xxxxxxx-yyyyyy-zzzzzzzz
UNAME=user
PASSWORD=passwd

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "username=$UNAME" -d "password=$PASSWORD" \
  -d "grant_type=password" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4)最後に管理者を呼び出すREST API sers endpoint

curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

クライアントに代わって(サービスアカウント)

1)機密クライアントを作成し、[サービスアカウントを有効化]設定をOnに切り替えてください。

2)Service account roles tabそして、このクライアントに適切なロールを選択します。 realm-admin から realm-managementグループ

3)アクセストークンを取得する

KCHOST=https://yourkeycloak.com
REALM=realm
CLIENT_ID=protector-of-the-realm
CLIENT_SECRET=xxxxxxx-yyyyyyyy-zzzzzzzzz

ACCESS_TOKEN=`curl \
  -d "client_id=$CLIENT_ID" -d "client_secret=$CLIENT_SECRET" \
  -d "grant_type=client_credentials" \
  "$KCHOST/auth/realms/$REALM/protocol/openid-connect/token"  | jq -r '.access_token'`

4)REST APIエンドポイントを呼び出します:

curl -X GET -H "Authorization: Bearer $ACCESS_TOKEN" $KCHOST/auth/admin/realms/$REALM/users | jq

追伸デバッグのために、JWTトークン(スコープ、ロールなど)をフェッチして分析するのに役立つ brauzie というCLIツールを作成しました。パブリッククライアントと機密クライアントの両方に使用できます。 Postmanと https://jwt.io を使用することもできます

HTH :)

3
maslick

Keycloakのユーザーは領域固有であり、すべてのユーザーがそれらにアクセスできるわけではありません。管理ダッシュボードで特定のロールをユーザーに割り当てた後、管理APIを使用してすべてのユーザーを取得できます。単にやる

  1. 管理ダッシュボードで、

ユーザー> myuser>ロールマッピング>クライアントロール>レルム管理

  1. ユーザーに2つの役割のいずれかを割り当てますmanage-usersまたはview-users

  2. 新しいトークンを生成します。

  3. 新しいトークンでヒットAPI

そして、あなたはあなたのユーザーを持つことになります

質問のヘッダーをより関連性の高いものに更新する必要があると思います。

0
Adnan Khan