无法使用 keycloak admin cli 端点接收客户端机密
Unable to receive Client Secret using keycloak admin cli endpoint
我正在使用以下端点:
http://localhost:8083/auth/admin/realms/Myrealm/clients/ltiobf/client-secret
并得到响应
{
"error": "HTTP 401 Unauthorized"
}
我正在使用以下方法从 Keycloak 获取访问令牌:
curl --location --request POST 'http://localhost:8083/auth/realms/Myrealm/protocol/openid-connect/token' \
--header 'cache-control: no-cache' \
--header 'content-type: application/x-www-form-urlencoded' \
--header 'postman-token: de7d68a0-5b21-1405-ed1a-9b7a6cb0da25' \
--header 'Cookie: JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistrate; XSRF-TOKEN=c620bf0f-a46a-41b4-bc30-558e96422123; JSESSIONID=gDz-86p4prmLkl12O7kx-8FdIcSAErBYhKitm5r8; JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistratehq' \
--data-urlencode 'client_id=ltiobf' \
--data-urlencode 'username=sairaj1417' \
--data-urlencode 'password=sairaj123' \
--data-urlencode 'grant_type=password'
并将其作为客户端密码的 GET 请求中的身份验证参数传递。
访问令牌应该是代表具有请求 Keycloak 省略的令牌的适当权限的用户请求的:
curl -d "client_id=admin-cli" \
-d "username=$ADMIN_NAME" \
-d "password=$ADMIN_PASSWORD" \
-d "grant_type=password" \
https://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token
以 admin-cli
作为客户 ID
。从该响应中(即一个Keycloak令牌对象),提取访问令牌,让我们命名为$ACCESS_TOKEN
。
如果您有权访问 Admin
控制台,您可以通过以下方式轻松获得 client secret
:
- 你的
Realm
;
- 然后点击
clients
和 select 你的 client
;
- 转到
credentials
选项卡。
但是,如果你想使用 Keycloak Rest API 来做到这一点,首先你需要知道客户端的 ID
,可以使用 :
获得
curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients?clientId=<CLIENT_ID> \
-H "Authorization: bearer $ACCESS_TOKEN"
(<CLIENT_ID>
基本上是客户端名称)您需要从该响应中提取所需的客户端 ID
。有了那个 ID
你可以提取客户端 secret
,使用:
curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients/<ID of the client>/client-secret \
-H "Authorization: bearer $ACCESS_TOKEN"
我在此 repo 中创建了脚本来自动执行此过程,以便社区可以按需要使用它们。
我正在使用以下端点:
http://localhost:8083/auth/admin/realms/Myrealm/clients/ltiobf/client-secret
并得到响应
{
"error": "HTTP 401 Unauthorized"
}
我正在使用以下方法从 Keycloak 获取访问令牌:
curl --location --request POST 'http://localhost:8083/auth/realms/Myrealm/protocol/openid-connect/token' \
--header 'cache-control: no-cache' \
--header 'content-type: application/x-www-form-urlencoded' \
--header 'postman-token: de7d68a0-5b21-1405-ed1a-9b7a6cb0da25' \
--header 'Cookie: JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistrate; XSRF-TOKEN=c620bf0f-a46a-41b4-bc30-558e96422123; JSESSIONID=gDz-86p4prmLkl12O7kx-8FdIcSAErBYhKitm5r8; JSESSIONID=Sqb7zNt9Bk8OAx4vEjhjUDKQU_qw6K9B4jjJq69i.magistratehq' \
--data-urlencode 'client_id=ltiobf' \
--data-urlencode 'username=sairaj1417' \
--data-urlencode 'password=sairaj123' \
--data-urlencode 'grant_type=password'
并将其作为客户端密码的 GET 请求中的身份验证参数传递。
访问令牌应该是代表具有请求 Keycloak 省略的令牌的适当权限的用户请求的:
curl -d "client_id=admin-cli" \
-d "username=$ADMIN_NAME" \
-d "password=$ADMIN_PASSWORD" \
-d "grant_type=password" \
https://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token
以 admin-cli
作为客户 ID
。从该响应中(即一个Keycloak令牌对象),提取访问令牌,让我们命名为$ACCESS_TOKEN
。
如果您有权访问 Admin
控制台,您可以通过以下方式轻松获得 client secret
:
- 你的
Realm
; - 然后点击
clients
和 select 你的client
; - 转到
credentials
选项卡。
但是,如果你想使用 Keycloak Rest API 来做到这一点,首先你需要知道客户端的 ID
,可以使用 :
curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients?clientId=<CLIENT_ID> \
-H "Authorization: bearer $ACCESS_TOKEN"
(<CLIENT_ID>
基本上是客户端名称)您需要从该响应中提取所需的客户端 ID
。有了那个 ID
你可以提取客户端 secret
,使用:
curl -X GET https://<KEYCLOAK_IP>/auth/admin/realms/<REALM_NAME/clients/<ID of the client>/client-secret \
-H "Authorization: bearer $ACCESS_TOKEN"
我在此 repo 中创建了脚本来自动执行此过程,以便社区可以按需要使用它们。