Dha*_*val 6 rest node.js keycloak keycloak-services keycloak-rest-api
我在我的node.js项目中实现了keycloak,并调用以下API在keycloak中添加用户:
{{keycloak_url}}/admin/realms/{{realm}}/users
这个API可以工作,我可以在keycloak中添加用户,但我需要userId来响应这个API,我怎样才能得到这个,任何替代方法
提前致谢
小智 18
我相信还有另一种方法可以做到这一点,这将为您节省额外的请求。如果您在创建用户时查看响应标头,您应该会找到一个名为“Location”的字段。它看起来像这样:
Location: http://keycloak_address/auth/admin/realms/realm/users/3a11cc77-9871-4f6e-805b-bf17ea79fa3a
Run Code Online (Sandbox Code Playgroud)
在本例中,值“3a11cc77-9871-4f6e-805b-bf17ea79fa3a”将是新用户的 ID。
更新:从Keycloak 17 Quarkus 发行版/auth开始,该路径已被删除。因此,您可能需要从该答案中显示的端点调用中删除 。/auth
您可以将Keycloak Admin REST API端点GET /{realm}/users与查询参数结合使用username。例如:
GET "{{keycloak_url}}/auth/admin/realms/{{realm}}/users/?username={{username}}"\nRun Code Online (Sandbox Code Playgroud)\n注意:在某些 Keycloak 版本中,它将返回用户名与 {{username*}} 匹配的所有用户。因此,可能需要对列表进行额外的过滤。对于那些使用 bash 脚本的人,我已经将一个关于当前如何进行过滤的示例上传到我的存储库。您只需从响应中提取字段即可id。
@Sillas Reis首先指出的方法允许在一次调用中创建用户并获取其 ID,这种方法的性能更高。然而,我不喜欢依赖未记录的行为。尽管如此,对于那些使用 bash 和curl 的人来说,该解决方案可能如下所示:
\n使用具有适当权限的用户的访问令牌调用Keycloak Admin REST API 。现在,我将使用领域中的用户:adminmaster
GET "{{keycloak_url}}/auth/admin/realms/{{realm}}/users/?username={{username}}"\nRun Code Online (Sandbox Code Playgroud)\n您将收到带有管理员令牌的 JSON 响应。access_token从该响应中提取属性值。让我们将其保存在变量中$ACCESS_TOKEN以供以后参考。
要在您的领域中创建用户$REALM_NAME并恢复其id执行:
curl \xe2\x80\x9chttps://${KEYCLOAK_HOST}/auth/realms/master/protocol/openid-connect/token\xe2\x80\x9d \\\n -d "client_id=admin-cli" \\\n -d "username=${ADMIN_NAME}\xe2\x80\x9d \\\n -d "password=${ADMIN_PASSWORD}" \\\n -d "grant_type=password"\nRun Code Online (Sandbox Code Playgroud)\n该标志--include将curl包含标头,并且该命令grep "Location: ${URL}"将提取位置和命令 grep -o \'[^/]\\+$\'用户 ID。
| 归档时间: |
|
| 查看次数: |
4991 次 |
| 最近记录: |