keycloak + Kong API 网关
keycloak + Kong API Gateway
我们在 API 网关中使用 keycloak 来处理身份验证 (client/secret)。
Kong api 服务使用 konnect-managed-plugin 引用 keycloak 来验证客户端凭据和 return 持有者令牌。
未来对其他端点的调用使用 oauth2-introspection 通过 keycloak introspection 验证持有者令牌
我几乎可以正常工作了,但是,当我通过 Kong api 网关进行身份验证时,它 return 是一个不记名令牌,但是这个令牌无法自省。
如果我直接向 keycloak 授权,则不记名令牌用于自省。
例如
令牌来自:
http://kongapigateway.domain/getOAuthToken
- 注意:我们还没有在 kong api 网关上设置 ssl
Returns:
{"access_token":"ey..ZiUQyw","expires_in":900,"refresh_expires_in":0,"token_type":"Bearer","not-before-policy":0,"scope":"email profile"}
在使用内省的 kong 中调用 api 端点失败:
http://kongapigateway.domain/bookings
{
"error_description": "The access token is invalid or has expired",
"error": "invalid_token"
}
直接调用 keycloak 自省也失败了:
https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token/introspect
{
"active": false
}
但是,如果我直接从 keycloak 服务器获取令牌:
https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token
{"access_token":"eyJhb...4lT8w","expires_in":900,"refresh_expires_in":0,"token_type":"Bearer","not-before-policy":0,"scope":"email profile"}
令牌适用于两个端点:
http://kongapigateway.domain/bookings 和 https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token/introspect
那么,为什么在第一种情况下 returned 的令牌内省不起作用
您可以通过将 Keycloak 的前端 URL 设置为您的 public URL 来解决此问题。详情请参考.
我们在 API 网关中使用 keycloak 来处理身份验证 (client/secret)。
Kong api 服务使用 konnect-managed-plugin 引用 keycloak 来验证客户端凭据和 return 持有者令牌。
未来对其他端点的调用使用 oauth2-introspection 通过 keycloak introspection 验证持有者令牌
我几乎可以正常工作了,但是,当我通过 Kong api 网关进行身份验证时,它 return 是一个不记名令牌,但是这个令牌无法自省。
如果我直接向 keycloak 授权,则不记名令牌用于自省。
例如
令牌来自: http://kongapigateway.domain/getOAuthToken
- 注意:我们还没有在 kong api 网关上设置 ssl
Returns:
{"access_token":"ey..ZiUQyw","expires_in":900,"refresh_expires_in":0,"token_type":"Bearer","not-before-policy":0,"scope":"email profile"}
在使用内省的 kong 中调用 api 端点失败: http://kongapigateway.domain/bookings
{
"error_description": "The access token is invalid or has expired",
"error": "invalid_token"
}
直接调用 keycloak 自省也失败了: https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token/introspect
{
"active": false
}
但是,如果我直接从 keycloak 服务器获取令牌: https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token
{"access_token":"eyJhb...4lT8w","expires_in":900,"refresh_expires_in":0,"token_type":"Bearer","not-before-policy":0,"scope":"email profile"}
令牌适用于两个端点: http://kongapigateway.domain/bookings 和 https://keycloak.domain/auth/realms/{Realms}/protocol/openid-connect/token/introspect
那么,为什么在第一种情况下 returned 的令牌内省不起作用
您可以通过将 Keycloak 的前端 URL 设置为您的 public URL 来解决此问题。详情请参考