簡體   English   中英

KeyCloak用戶驗證和獲取令牌

[英]KeyCloak User validation and getting token

首先,我是Keycloak的新手,如果我問的問題可能是錯的,請原諒。

我已經安裝了Keycloak服務器,我可以使用以下方法訪問Web UI:

HTTP://本地主機:8008 / AUTH

我的要求是通過將領域用戶傳遞給k Keycloak API並從響應中獲取令牌來驗證領域用戶,然后將此標記傳遞給我的其他Web API調用。

但我無法找到一個關於如何做到這一點的簡單指南......

更新:


使用KEYCLOAK用戶界面:

到目前為止:

  • 我能夠創造一個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

有人可以指導我嗎?

您有兩個選擇:您可以代表某些用戶行事(如Adnan Khan指出的那樣),或者為此創建一個專用客戶端。

代表用戶

1)創建一個機密客戶端(我想你已經有一個)

2)創建用戶並為其分配適當的角色:例如,來自realm-management組的view-users

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)最后調用Admin REST API 用戶端點

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

代表客戶(服務帳戶)

1)創建一個機密客戶端,並確保將“啟用服務帳戶”設置切換為“ On

2)轉到“ Service account roles tab然后為該客戶端選擇適當的角色,例如,來自realm-management組的realm-admin

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

PS為了進行調試,我剛剛編寫了一個名為brauzie的CLI工具,可以幫助您獲取和分析您的JWT令牌(范圍,角色等)。 它可以用於公共和機密客戶端。 你也可以使用Postman和https://jwt.io

HTH :)

keycloak中的用戶是特定於領域的,並不是每個用戶都可以訪問它們。 在管理儀表板中為用戶分配特定角色后,您將能夠通過管理API獲取所有用戶。 簡單地做

  1. 在管理儀表板中,轉到

用戶> myuser>角色映射>客戶端角色>域管理

  1. 為用戶分配manage-usersview-users這兩個角色中的任何一個。

  2. 生成新令牌。

  3. 使用新令牌命中API

你將擁有你的用戶

Ps我認為您應該將問題標題更新為更相關的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM