Skip to content

KeycloakのUser Attributeを追加する

ユーザに紐づく情報の属性を追加する設定と、業務アプリ側からそれを取得するサンプルです。

Keycloak設定

  • Realm settings -> User profileからattributeを作成します。
  • Clients -> {対象のClient} -> Client scopes -> {対象のClient}-dedicatedからmapperを追加します。

業務アプリ実装

下記サンプルではbirth_dateを取得し、それを元に年齢を計算しています:

package nob.example.easyapp.controller.impl;

import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.Period;
import java.time.ZoneId;

import org.springframework.security.core.annotation.AuthenticationPrincipal;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.RestController;

import nob.example.easyapp.controller.UserController;
import nob.example.easyapp.controller.model.MeResponse;

/**
 * UserControllerの実装です。
 *
 * @author nob
 */
@RestController
public class UserControllerImpl implements UserController {

    @Override
    public MeResponse me(@AuthenticationPrincipal OAuth2User user) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        try {
            // 誕生日から年齢を計算
            return new MeResponse(user.getAttribute("preferred_username"), Period.between(
                    sdf.parse(user.getAttribute("birth_date")).toInstant().atZone(ZoneId.systemDefault()).toLocalDate(),
                    LocalDate.now()).getYears());

        } catch (Exception e) {
            return new MeResponse(user.getAttribute("preferred_username"), 0);
        }
    }
}