Platforms
프레임워크별 SSAFY 인증 적용
공식 지원 범위는 protocol, hosted page, backend exchange입니다. Swift/Kotlin/Flutter는 SDK가 아니라 deep link 설정 메모만 제공합니다.
공식 지원 문서
아래 문서는 SSAFY Verify가 책임지는 연동 계약입니다. 모바일은 플랫폼별 SDK가 아니라 hosted page와 backend exchange contract를 기준으로 지원합니다.
React
OfficialReact SPA, Next.js App Router, Vite React
Hosted SDK popup + backend token exchange
Vue
OfficialVue 3 SPA, Nuxt 3, Vite Vue
Hosted SDK popup + composable + backend token exchange
Mobile
OfficialiOS, Android, Flutter, React Native 등 모든 모바일 앱
System browser + deep link callback + backend token exchange
Backend
OfficialNext.js Route Handler, Nuxt server route, Express, Spring, Django, Rails 등
Client callback code + PKCE verifier -> backend -> SSAFY Verify /verify/token
참고 설정 메모
아래 문서는 SDK 유지보수 대상이 아닙니다. 각 플랫폼에서 deep link와 시스템 브라우저를 어떤 식으로 연결하는지만 짧게 정리합니다.
공통 아키텍처
사용자 앱의 플랫폼은 달라도 신뢰 경계는 같습니다. code 교환과 token 검증은 앱 서버가 책임집니다.
Web- React/Vue는 Hosted SDK가 popup, PKCE, callback 메시지를 처리
Mobile- iOS/Android/Flutter는 공통 mobile 문서의 시스템 브라우저 흐름 사용
Deep link- Universal Link 또는 verified App Link를 우선 사용하고 custom scheme은 fallback
Backend- 모든 플랫폼은 자기 backend에서 /verify/token 교환과 JWT 검증 수행
서버가 필요한 이유
플랫폼 공통 보안 체크리스트
공식 지원 범위
protocol, hosted page, backend token exchange만 공식 지원
WebView
Unsupported / Do not use. 인증 요청을 embedded WebView에서 열지 않음
secret 위치
client_secret은 confidential client의 서버 환경변수에만 저장
state 검증
authorize 시작 시 만든 state와 callback state를 반드시 비교
PKCE 보관
code_verifier는 callback 완료 후 서버 교환까지만 짧게 보관
token 검증
verification_token은 서버에서 iss, aud, exp, sub, client_id, verified, auth_time, amr, acr를 검증
저장 최소화
앱 DB에는 verified, sub, cohort, campus, verifiedAt 정도만 저장
Mattermost id
ssafy.mattermost_id는 기존 MM 인증 계정 매핑 목적일 때만 요청하고 저장
WebView는 지원하지 않습니다