まず第一に、私はKeycloakに非常に慣れていないので、質問していることが間違っているのかどうかすみません。
Keycloakサーバーをインストールしましたが、次のものを使用して同じWeb UIにアクセスできます。
私の要件は、レルムユーザーを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
誰でも私を案内してもらえますか?
選択肢は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 :)
Keycloakのユーザーは領域固有であり、すべてのユーザーがそれらにアクセスできるわけではありません。管理ダッシュボードで特定のロールをユーザーに割り当てた後、管理APIを使用してすべてのユーザーを取得できます。単にやる
ユーザー> myuser>ロールマッピング>クライアントロール>レルム管理
ユーザーに2つの役割のいずれかを割り当てますmanage-users
またはview-users
。
新しいトークンを生成します。
新しいトークンでヒットAPI
そして、あなたはあなたのユーザーを持つことになります
質問のヘッダーをより関連性の高いものに更新する必要があると思います。