Postgrest API 可以通过内置的 JWT 令牌或第三方服务(如 Auth0、Okta 或 Keycloak)来保护(http://postgrest.org/en/v5.0/install.html)
我们只想使用 Keycloak 提供的 JWT,但是可用的文档非常有限。
谁能指导我如何通过 keycloak 保护 postgrest api?
谢谢
Postgrest API 可以通过内置的 JWT 令牌或第三方服务(如 Auth0、Okta 或 Keycloak)来保护(http://postgrest.org/en/v5.0/install.html)
我们只想使用 Keycloak 提供的 JWT,但是可用的文档非常有限。
谁能指导我如何通过 keycloak 保护 postgrest api?
谢谢
更新:带有 curl 示例的简单方法
curl https://$KEYCLOAK_URL/auth/realms/$REALM/protocol/openid-connect/certs
复制数组的第一个元素并在变量keys
的 postgrest 配置中使用它jwt-secret
.preferred_username
中的值role-claim-key
假设您已完成上述操作,您可以测试您的安装:
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"
curl -H "Authorization: Bearer $ACCESS_TOKEN" $POSTGREST_URL/your_table
有几种方法可以做到,我只描述一种:
"role": "username"
)细节
/#/realms/<realm name>/clients/<client id>/mappers
并设置您想要的声明#/realms/<realm name>/keys
您可以获取您的 rsa 公钥,将其转换为 jwk 格式并将其保存到 postgrest 配置中。为了把它翻译成jwk-----BEGIN PUBLIC KEY-----
-----END PUBLIC KEY-----
有无限的选择。一个使用 keycloak-connect 包的节点 js 示例:https ://github.com/keycloak/keycloak-nodejs-connect/tree/master/example
您可以阅读令牌req.kauth.grant
并将其放置在您发送到浏览器的 html 的隐藏字段中
从浏览器读取令牌并将其放置在带有承载前缀的身份验证标头中。如果你使用 axios:
axios({
method: 'get',
url: 'your url',
headers: { 'authorization': `Bearer ${token}` }
})