我正在尝试使用nginx作为代理来设置Keycloak。
这个想法是使用javascript适配器登录到Web应用,然后对于每个API请求,nginx应该询问Keycloak令牌是否有效(会话可以被撤销,等等)。
我在本地没有设置nginx的情况下进行了设置-我的VM上有密钥斗篷,并且我使用了密钥斗篷Gatekeeper来代理API请求。它没有任何问题。
然后,我部署了在集群上和nginx中使用js适配器的Keycloak和Web应用程序,代理了登录所需的URL。接下来,我将auth模块配置为使用grant_type = urn:ietf:params:oauth:grant-type:uma-ticket调用/ auth / realms / cerulean-magnolia / protocol / openid-connect / token。可能会有更好的端点可以调用,但无论如何我总是得到invalid_grant无效的承载令牌。
登录有效,但是当我尝试使用生成的令牌时,该令牌将无效并且无法使用。
我将PROXY_ADDRESS_FORWARDING
设置为true。
任何使用此令牌的尝试都会导致获得:
{
"error": "invalid_grant",
"error_description": "Invalid bearer token"
}
如果我要使用密码手动(通过转发端口)生成此令牌:
curl -L -X POST 'https://localhost:8141/auth/realms/cerulean-magnolia/protocol/openid-connect/token' \
-H 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=lei' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'scope=openid' \
--data-urlencode 'username=...' \
--data-urlencode 'password=...' --insecure | jq
,然后使用此令牌执行操作:
http --verify=no -f https://localhost:8141/auth/realms/cerulean-magnolia/protocol/openid-connect/token grant_type=urn:ietf:params:oauth:grant-type:uma-ticket audience=lei-api response_mode=decision authorization:"Bearer ..."
工作正常。但是,如果我使用通过Web应用程序生成的令牌,则总会得到401。
如果有任何帮助或提示,我将不胜感激。
预先感谢, 帕特里克