Keycloak PUT-request trả về 401 (trái phép)

Jan 21 2021

Tôi đang sử dụng người đưa thư và tôi đã thử cập nhật hồ sơ của người dùng qua http: // localhost: 8180 / auth / admin / domains / demo / users / {userID} nhưng tôi nhận được 401phản hồi.

Quy trình tôi đã sử dụng:

  • Đã yêu cầu và nhận mã thông báo quản trị viên qua http: // localhost: 8180 / auth / domains / master / protocol / openid-connect / token

  • Đã thêm mã thông báo để yêu cầu tiêu đề theo cách thích hợp, tức là Ủy quyền: Bearer {access_token}

  • Đã gửi Yêu cầu Đưa với loại nội dung Json và thông tin của người dùng dưới dạng nội dung qua http: // localhost: 8180 / auth / admin / domains / demo / users / {userID}.

Rất tiếc, tôi đã nhận được 401 phản hồi liên tiếp.

Yêu cầu đầu tiên:

-Body (x-www-form-urlencoded)

client_id : admin_cli
username: ...
password: ...
grant_type: password
client_secret: ...

-Đến http://localhost:8180/auth/realms/master/protocol/openid-connect/token

Yêu cầu lần thứ hai:

-Người đứng đầu -> Ủy quyền: Người mang ...

-Body (JSON)

"email": "[email protected]",
"firstName": "divad",
"lastName": "d"

-Đến http://localhost:8180/auth/admin/realms/demo/users/{userID}

Trả lời

1 dreamcrash Jan 22 2021 at 03:58

Trong cuộc gọi đầu tiên của bạn, davidngười dùng phải là một người có các đặc quyền giống như quản trị viên . Nếu không, người ta sẽ nhận được phản hồi lỗi được ủy quyền cho các hành động mà davidngười dùng không có đặc quyền thực hiện. Hãy xem chuỗi SO này để kiểm tra cách chỉ định các đặc quyền giống như quản trị viên cho người dùng.

Còn bây giờ chúng ta hãy yêu cầu một mã thông báo trên thay mặt cho chủ sử dụng quản trị như sau:

từ phản ứng cơ thể trích xuất access_token.

Đối với cuộc gọi thứ hai trước tiên, hãy sao chép và dán access_tokenvào Authorization > Type Bearer Token:

Trong cuộc gọi thứ hai, thay vì

http://localhost:8180/auth/admin/realms/demo/users/{userID} 

bạn cần thay thế userIDtham số bằng thực tế userIDcủa người dùng mà bạn đang cập nhật. Để có được, userIDbạn có thể gọi điểm cuối sau:

GET <YOUR_KEYCLOAK_DOMAIN>/auth/admin/realms/<YOUR_REALM>/users/?username=<THE_USERNAME>

hoặc bạn có thể sao chép và dán từ Bảng điều khiển dành cho quản trị viên Keycloak, trong người dùng tab:

Vì vậy, trong Postman sẽ trông giống như: