通过keycloak验证postgrest api

时间:2018-10-15 09:15:28

标签: postgresql oauth jwt keycloak postgrest

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

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

有人可以指导我如何通过密钥斗篷保护Postgrest api吗?

谢谢

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到,我只介绍一种:

  1. 设置密钥斗篷以在令牌中传递您想要的声明。 (可能您希望获得类型为"role": "username"的声明)
  2. 获取正在使用的密钥keycloak并将其传递到postgrest配置的jwt-secret部分
  3. 设置Web服务器与密钥斗篷进行通信并获取令牌。
  4. 将令牌传递给浏览器
  5. 使用令牌访问postgrest

详细信息

  1. 在密钥斗篷管理控制台中,转到:/#/realms/<realm name>/clients/<client id>/mappers并设置所需的声明
  2. #/realms/<realm name>/keys的keycloak管理控制台中,您可以获取rsa公钥,将其转换为jwk格式并将其保存到postgrest配置中。为了把它翻译成jwk
    • 通过将其括在-----BEGIN PUBLIC KEY-----中将其转换为pem格式 -----END PUBLIC KEY-----
    • 将其转换为jwk格式。一个不错的工具pem-jwk
  3. 有无限的选择。节点js示例:https://github.com/keycloak/keycloak-nodejs-connect/tree/master/example使用keycloak-connect软件包
  4. 您可以在req.kauth.grant处读取令牌,并将其放在发送给浏览器的html的隐藏字段中
  5. 从浏览器中读取令牌,并将其放置在带有承载前缀的身份验证标头中。如果您使用axios:

    axios({
      method: 'get',
      url: 'your url',
      headers: { 'authorization': `Bearer ${token}` }
    })
    

请注意,您并不是以这种方式保护postgrest api,而只是使用keycloak来管理用户并生成必要的令牌