sequenceDiagram
participant Browser
participant Client as Client (헤어샵 서버)
participant AuthorizationServer as Authorization Server
participant DB
Browser->>Client: 로그인 요청 (/oauth2/authorization/{provider})
Client->>AuthorizationServer: OAuth2 인증 요청
AuthorizationServer->>Browser: 로그인 페이지 표시
Browser->>AuthorizationServer: SNS 로그인 진행
AuthorizationServer->>Client: 로그인 성공 (OAuth2 인증 정보 제공)
Client->>DB: 사용자 존재 여부 확인 (SNS ID, 이메일, Provider ...)
alt 이미 가입한 회원
Client->>Client: JWT 생성, OAuth2 세션 제거
Client->>Browser: JWT 포함하여 /홈 페이지로 이동
else 가입하지 않은 회원
Client->>Browser: /회원가입 페이지로 이동
Browser->>Client: 추가 정보 입력 후 POST /회원가입 호출
Client->>Client: OAuth2 세션에서 SNS ID, Provider 추출
Client->>DB: 회원 정보 저장
Client->>Client: JWT 생성, OAuth2 세션 제거
Client->>Browser: JWT 포함하여 /홈 페이지로 이동
end
sequenceDiagram
participant App as App (iOS/Android)
participant Client as Client (헤어샵 서버)
participant OAuth2Provider as Authorization Server
participant DB
App->>OAuth2Provider: SDK를 통한 OAuth2 로그인 요청
OAuth2Provider->>App: Access Token or ID Token 반환
App->>Client: OAuth2 토큰을 가지고 GET /회원가입-여부 호출
Client->>OAuth2Provider: 토큰 검증 요청
OAuth2Provider->>Client: 사용자 정보 반환 (SNS ID, 이메일)
Client->>DB: 사용자 존재 여부 확인 (SNS ID, 이메일, Provider ...)
alt 이미 가입한 회원
Client->>Client: JWT 생성
Client->>App: JWT 반환 (쿠키 또는 Authorization 헤더)
else 가입하지 않은 회원
Client->>App: 회원 가입 필요 응답
App->>Client: 추가 정보 입력 후 POST /회원가입 호출
Client->>DB: 회원 정보 저장
Client->>Client: JWT 생성
Client->>App: JWT 반환
end
애플 로그인 OpenID Connect 메타데이터:
Public Key 조회 URL:
name은 최초 로그인 시 또는 revoke 후 재로그인 시에만 제공됨https://appleid.apple.com/auth/keysid_token 헤더의 kid, alg 값을 사용하여 적절한 Public Key 선택 후 검증authorization_code 변조 검증을 위해 id_token 내 c_hash 값 비교
참고:client_secret 생성 방법 참고:
authorization_codeclient_secret