您想要编辑和添加逻辑到 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();
}