0

钥匙斗篷 11.0.2

  1. 有没有办法UserSessionModel在自定义身份验证器中分配给当前的 SSO 会话?

我可以采取List<UserSessionModel>

List<UserSessionModel> userSessions = context.getSession().sessions().getUserSessions(context.getRealm(), context.getUser());

但我不知道我可以使用哪个过滤属性AutheticationFlowContext来过滤列表并获取当前 SSO 会话的 UserSessionModel。

现在我通过UserSessionModel.id从身份验证请求 cookie KEYCLOAK_SESSION(它的最后一段)中获取进行过滤。也许有一种直接的方法可以以某种方式UserSessionModel.id使用AuthenticationFlowContext

  1. 我必须使用UserSessionModel.getNote()检索以前在同一 SSO 的另一个身份验证流中设置的 UserSessionNotes。

直接方法不适用于我UserSessionNotes在另一个身份验证流中设置(但在同一个 SSO 中):

@Override
public void authenticate(AuthenticationFlowContext context) {
    Map<String,String> sessionNotes = context.getAuthenticationSession().getUserSessionNotes();
    // sessionNotes does not reflect notes set in another Authentication flows of the same SSO
    ...

}

因此,如果有人知道另一种方式来采取UserSessionNotesw/oUserSessionModel它也将是解决方案。

4

1 回答 1

2

我在 Keycloak 论坛上收到了答复https://keycloak.discourse.group/t/getting-usersessionnotes-returns-null-while-data-persist/5172

在 Authenticator 中获取UserSessionModel当前的 SSO:

@Override
public void authenticate(AuthenticationFlowContext context) {
    UserSessionModel userSessionModel;
    AuthenticationManager.AuthResult authResult = AuthenticationManager.authenticateIdentityCookie(context.getSession(),
            context.getRealm(), true);
    if (authResult != null) {
        // That is it:
        userSessionModel = authResult.getSession();
    }
于 2020-10-05T07:20:13.230 回答