gpt4 book ai didi

postgresql - 通过 keycloak 验证 postgrest api

转载 作者:行者123 更新时间:2023-12-04 15:53:41 30 4
gpt4 key购买 nike

Postgrest API 可以通过内置的 JWT token 或通过第三方服务(如 Auth0、Okta 或 Keycloak(http://postgrest.org/en/v5.0/install.html))来保护

我们只想使用 Keycloak 提供的 JWT,但可用的文档非常有限。

有人可以指导我如何通过 keycloak 保护 postgrest apis 吗?

谢谢

最佳答案

更新:带有 curl 示例的简单方法

  • 安装keycloak,添加realm和客户端
  • 获取 key

  • curl https://$KEYCLOAK_URL/auth/realms/$REALM/protocol/openid-connect/certs
    复制 keys 的第一个元素数组并在 jwt-secret 的 postgrest 配置中使用它多变的
  • 使用 .preferred_username作为 role-claim-key 的值在 postgrest 配置中

  • 假设您已完成上述操作,您可以测试您的安装:
  • 获取代币

  • curl -X POST https://$KEYCLOAK_URL/auth/realms/$REALM/protocol/openid-connect/token \
    -H "Content-Type: application/x-www-form-urlencoded" \
    -d "username=$USERNAME" \
    -d "password=$PASSWORD" \
    -d 'grant_type=password' \
    -d "client_id=$CLIENT"
  • 将回复的 access_token 元素用于您对 postgrest 的请求

  • curl -H "Authorization: Bearer $ACCESS_TOKEN" $POSTGREST_URL/your_table

    有几种方法可以做到,我只描述一种:
  • 设置 keycloak 以在 token 中传递您想要的声明。 (可能你想要一个 "role": "username" 类型的声明)
  • 获取 keycloak 正在使用的 key 并将其传递到 postgrest 配置的 jwt-secret 部分
  • 设置 Web 服务器以与 keycloak 通信并获取 token 。
  • 将 token 传递给浏览器
  • 使用 token 访问 postgrest

  • 详情
  • 在 keycloak 管理控制台中转到:/#/realms/<realm name>/clients/<client id>/mappers并设置您想要的声明
  • #/realms/<realm name>/keys 的 keycloak 管理控制台中您可以获取 rsa 公钥,将其转换为 jwk 格式并将其保存到 postgrest 配置中。为了把它翻译成jwk
  • 通过将其包含在 -----BEGIN PUBLIC KEY----- 中将其转换为 pem 格式-----END PUBLIC KEY-----
  • 将其转换为 jwk 格式。不错的工具pem-jwk
  • 有无限的选择。一个节点js示例:https://github.com/keycloak/keycloak-nodejs-connect/tree/master/example使用 keycloak-connect 包
  • 您可以在 req.kauth.grant 阅读 token 并将其放置在您发送到浏览器的 html 的隐藏字段中
  • 从浏览器读取 token 并将其放置在带有承载前缀的身份验证 header 中。如果你使用 axios:
     axios({
    method: 'get',
    url: 'your url',
    headers: { 'authorization': `Bearer ${token}` }
    })
  • 关于postgresql - 通过 keycloak 验证 postgrest api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52813380/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com