我正在使用 Keycloak 来保护我的 React 前端和 node.js 后端。这些客户端使用基于角色的授权进行保护。
我的前端应用程序在 Keycloak 中注册为公共客户端,后端注册为仅承载客户端。当用户登录到前端时,我正在获取该特定用户的访问令牌,并且我正在使用该访问令牌来调用后端 api 层。
当用户从前端注销时,我正在使用 keycloak 对象注销方法从 Keycloak 清除该特定用户的前端客户端会话。这工作正常,用户正在注销并重定向到 Keycloak 登录页面。
但问题是我仍然可以使用该注销用户的访问令牌来调用后端 api。即使用户注销,访问令牌仍然有效。
我尝试了这个端点来撤销用户访问令牌。但没有工作 /auth/admin/realms//users/
有没有办法在 Keycloak 中撤销特定用户的访问令牌?
node.js reactjs keycloak keycloak-nodejs-connect keycloak-rest-api
我们正在尝试将 keycloak 与本机应用程序集成,但使用 keycloak 的登录/注册 oauth2 流程显示默认登录页面,该页面不符合我们对材料设计用户屏幕的要求
我发现自定义登录屏幕的选项很少:
keycloak.grantManager.obtainDirectlyAPI,但这grantType=password在keycloak-connect包中使用 - keycloak-connect有关obtainDirectly
的更多信息第一个选项有点乏味,所以我们实现了第二个选项,但是它附带了grantType=passwordoauth 不推荐的流程
我想知道 keycloak 是否有任何解决方案来使用自定义登录Authorization Code
期望的结果:
用户应该能够注册,然后他应该能够通过移动应用程序登录(如果电子邮件地址未验证则发生),该应用程序会显示一条警告,表明电子邮件未验证并且某些应用程序功能被禁用
我拥有的:
注册功能由api 服务器完成,它是一个 keycloak 机密客户端,可以创建用户
登录由移动应用程序直接通过对 keycloak 的后调用来完成/token返回访问令牌来完成的
一切都好,现在我有一个可以由我的 api 服务器使用的令牌,并且我知道它是一个具有未经确认的电子邮件地址的注册用户
问题是用户没有收到任何欢迎/确认电子邮件,但是:如果用户转到 keycloak LogIn 网页并尝试使用新创建的用户登录,那么他会收到来自 Keycloak 的电子邮件,但对于通过 api 登录,则没有电子邮件。那么有什么办法解决这个问题吗?难道我做错了什么?
请求用户验证电子邮件的唯一方法是请求“验证电子邮件”操作,但如果我这样做,那么用户将无法再使用未经验证的电子邮件登录
登录通过POSTto/auth/realms/realm/protocol/openid-connect/token和 with完成{grant_type: 'password', password: 'string', username: 'string'}body完成的
呼叫的行为似乎与PUT /{realm}/users/{id}/send-verify-email请求相同Verify Email/execute-actions-email
尝试使用 iFrame 访问 Keycloak 时遇到登录问题。我收到以下错误:
2020-08-29 04:06:50,976 WARN [org.keycloak.events] (default task-9654) type=LOGIN_ERROR, realmId=34d62e4f-f267-4f1a-8ec7-075e5046543b, clientId=null, userId=null, ipAddress=192.168.66.183, error=invalid_code
Run Code Online (Sandbox Code Playgroud)
尝试通过 chrome 浏览器访问它时工作正常,
2020-08-29 04:08:44,310 INFO [org.keycloak.events] (default task-9658) type=LOGIN, realmId=34d62e4f-f267-4f1a-8ec7-075e5046543b, clientId=dxp-frontend, userId=6db38019-c323-4071-abc2-a39c705ed122, ipAddress=192.168.66.183, auth_method=openid-connect, auth_type=code, redirect_uri=https://dxp-model1.devopnet.in.telstra.com.au/csrtb/, consent=no_consent_required, code_id=ac77dc9d-9237-4c17-b74d-9f3c9582ebbd, username=dxpcsr1, authSessionParentId=ac77dc9d-9237-4c17-b74d-9f3c9582ebbd, authSessionTabId=3K3KgKVc2bc
2020-08-29 04:08:45,811 INFO [org.keycloak.events] (default task-9658) type=CODE_TO_TOKEN, realmId=34d62e4f-f267-4f1a-8ec7-075e5046543b, clientId=dxp-frontend, userId=6db38019-c323-4071-abc2-a39c705ed122, ipAddress=192.168.66.183, token_id=15905d22-c77f-4f6d-bce4-63c36ed04f0b, grant_type=authorization_code, refresh_token_type=Refresh, scope='openid profile email', refresh_token_id=a0b3437b-c2b3-4179-ad24-833459a847db, code_id=ac77dc9d-9237-4c17-b74d-9f3c9582ebbd, client_auth_method=client-secret
Run Code Online (Sandbox Code Playgroud)
使用部署了单个 Keycloak 实例的 K8 集群。
keycloak keycloak-gatekeeper keycloak-nodejs-connect keycloak-connect