记录以便使用 KeyCloak REST API 创建浏览器会话
Posted
技术标签:
【中文标题】记录以便使用 KeyCloak REST API 创建浏览器会话【英文标题】:Logging so as to create a browser session using KeyCloak REST API 【发布时间】:2021-01-25 23:09:14 【问题描述】:KeyCloak 通过 KeyCloak 登录页面支持 SAML SSO。在此处登录后,将创建一个浏览器会话,该会话允许重定向到客户端应用程序网页而无需进一步登录。这行得通。 但是,在将用户重定向到客户端应用程序网页之前,我想使用自己的登录页面和脚本。
我已经能够使用用户的登录凭据(具有管理员权限)成功地从 Keycloak 服务器请求不记名访问令牌。但这不会创建浏览器会话。
我在文档中没有找到任何看起来像是创建会话的登录端点的调用 (https://documenter.getpostman.com/view/7294517 或 https://documenter.getpostman.com/view/7294517)。
任何方向或建议将不胜感激。 到目前为止,我在 php 中工作,并且一直将我的 API 调用作为来自 PHP 的 cURL 请求提交,有时使用 Postman 进行测试。
【问题讨论】:
【参考方案1】:您想要编辑和添加逻辑到 keycloak 页面,或者使用另一个。
第一个选项是要走的路,keycloak 允许您自定义登录页面
查看https://www.baeldung.com/keycloak-custom-login-page
如果您仍想从现有令牌创建用户会话,则需要创建一个新端点来获取它。
这里有一个关于如何使用 keycloak spi 创建自定义端点的有用指南 https://medium.com/@gauravwadhone/keycloak-create-custom-rest-api-86e24bff4c1e
这里有我用来获取 cookie 的代码:
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response get()
final HttpHeaders headers = session.getContext().getRequestHeaders();
final String authorization = headers.getHeaderString(HttpHeaders.AUTHORIZATION);
if(authorization == null)
throw new ErrorResponseException(Errors.INVALID_TOKEN, "Null authorization header",
Response.Status.UNAUTHORIZED);
final String[] value = authorization.split(" ");
final String accessToken = value[1];
final AccessToken token = Tokens.getAccessToken(accessToken, session);
if (token == null)
throw new ErrorResponseException(Errors.INVALID_TOKEN, "Invalid access token", Response.Status.UNAUTHORIZED);
final RealmModel realm = session.getContext().getRealm();
final UriInfo uriInfo = session.getContext().getUri();
final ClientConnection clientConnection = session.getContext().getConnection();
final UserModel user = session.users().getUserById(token.getSubject(), realm);
final UserSessionModel userSession = session.sessions().getUserSession(realm, token.getSessionState());
AuthenticationManager.createLoginCookie(session, realm, user, userSession, uriInfo, clientConnection);
return Response.noContent().build();
【讨论】:
以上是关于记录以便使用 KeyCloak REST API 创建浏览器会话的主要内容,如果未能解决你的问题,请参考以下文章
如何通过执行操作电子邮件通过 keycloak admin rest api 更新密码
如何使用 REST API 在 keycloak 中重置用户密码
如何使用 httppost/rest-api 从 keycloak 获取用户列表
Keycloak - 使用 Rest API 验证用户的电子邮件