✅ A,B SSO 연결시 그룹코드 공유방법

    → A (refo.co.kr; SSO 서버 또는 ID 제공자_ Identity Provider; IdP),  B (refo.us; SSO 클라이언트) 라고 함. 

    → B에서 엔드포인트 주소 커스텀 설정 필요

“WP OAuth Server – CE”  플러그 인 사용시 설정법 (현재 설치, 운영중인 플러그인)

WP OAuth Server – CE” (OAuth2 / OpenID Connect)
사용자가 A에서 로그인한 뒤, A는 액세스 토큰(또는 ID 토큰)B에게 전달해 줘요.
B는 이 토큰만으로 사용자가 누구인지 확신할 수 없어요.
이 토큰을 A의 **/userinfo**나 토큰 검증 API에 다시 보내서 👉 “이 토큰 진짜야? 누구 거야?” 확인해야 해요.

✅ 만약 엔드포인트를 확인 안 하면
→ B는 “이 토큰이 진짜 A가 준 건지”, “이 사용자 ID가 맞는지”를 검증할 수 없어서 보안적으로 위험!
예를 들어 누군가 위조한 토큰을 B에게 보내면, B가 속을 수 있어요.

  결론
✔️ 엔드포인트를 통한 확인은 “이 토큰으로 A에서 로그인 인증된 사용자 정보를 가져오는” 표준 보안 절차예요.
✔️ BA의 엔드포인트를 확인하지 않으면, 사용자가 누구인지 정확히 확인할 수 없어요.

       B가 A의 엔드포인트 확인시 그룹코드를 반환 받을수 있음

그룹코드 공유 가능한 방식

그룹코드 포함하여 A(refo.co.kr서버)의 /userinfo 엔드포인트를 구현.

워드프레스 사용자 메타에서 group_code를 조회해서 JSON에 넣기를 완료함

✅OAuth2나 OpenID Connect에서는 /userinfo 엔드포인트 URL을 B(클라이언트)가 **“Discovery Document”**나 클라이언트 설정에서 직접 지정 필요.

✅ 즉, B의 개발자가 A의 기본 /oauth2/userinfo 말고,  아래 주소로  SSO 요청 로직을 바꿔주면 됩니다.


SSO 적용

1️⃣ 사용자 → B에서 로그인 시도
2️⃣ B는 A에서 인증받고 액세스 토큰 발급
3️⃣ B가 “/userinfo”를 기본이 아닌, 별도 코드로 만든 엔드포인트로 지정
👉 https://refo.co.kr/wp-json/custom/v1/userinfo
4️⃣ B가 이 엔드포인트를 호출 → A에서 group_code 포함된 JSON을 반환

 ✅ (참고) A에 적용 코드

/**
 * 1️⃣ REST API 초기화 시, 사용자 정보 제공 엔드포인트를 등록
 */
add_action( ‘rest_api_init’, function () {
    // ‘custom/v1/userinfo’ 엔드포인트를 GET 방식으로 등록
    register_rest_route( ‘custom/v1′, ‘/userinfo‘, array(
        ‘methods’  => ‘GET’,                             // GET 요청으로만 허용
        ‘callback’ => ‘my_custom_userinfo_endpoint’,     // 실제 데이터를 반환할 함수
        ‘permission_callback’ => ‘my_custom_userinfo_permission’, // 접근 권한 확인 콜백
    ) );
} );
/**
 * 2️⃣ 실제로 사용자 정보를 JSON으로 반환하는 콜백 함수
 */
function my_custom_userinfo_endpoint( WP_REST_Request $request ) {
    // 현재 로그인된 사용자 ID 가져오기
    $user_id = get_current_user_id();
    // 로그인이 안 된 경우, 에러를 반환 (401 Unauthorized)
    if ( ! $user_id ) {
        return new WP_Error( ‘no_user’, ‘No user is logged in.’, array( ‘status’ => 401 ) );
    }
    // 사용자 ID로 사용자 객체 조회
    $user = get_userdata( $user_id );
    $user_info = array(
        ‘ID’       => $user->ID,            // 워드프레스 사용자 ID
        ‘username’ => $user->user_login,    // 워드프레스 로그인 아이디 (사용자명)
    );
    // 사용자 메타에서 group_code 조회 (기본값 없이 그대로 반환)
    $group_code = get_user_meta( $user_id, ‘group_code’, true );
    $user_info[‘group_code’] = $group_code;
    // 최종 JSON 응답 반환 (200 OK)
    return new WP_REST_Response( $user_info, 200 );
}
/**
 * 3️⃣ 엔드포인트 접근 권한 확인
 */
function my_custom_userinfo_permission() {
    // 현재 사용자가 로그인된 상태인지 확인
    // (여기에서 JWT 검증, OAuth 토큰 검증 등을 추가할 수 있음!)
    return is_user_logged_in();
}
🚀 엔드포인트 주소(URL)
엔드포인트를 이렇게 등록했죠:
register_rest_route( ‘custom/v1’, ‘/userinfo’, array( … ));
👉 이때 워드프레스 REST API의 기본 URL 패턴은:
https://[도메인]/wp-json/{namespace}/{route}
✅ 여기서:
namespace: custom/v1
route: /userinfo
따라서 전체 주소는:
https://[A-사이트-도메인]/wp-json/custom/v1/userinfo
** 최종 엔드포인트 주소
https://refo.co.kr/wp-json/custom/v1/userinfo
✅ 이 주소로 B가 액세스 토큰을 포함해 GET 요청을 보내면,
✅ ID, username, group_code가 JSON으로 반환됩니다!