Unity PC 클라이언트에서 SNS 로그인을 구현할 때 가장 일반적인 방식 중 하나는 OAuth2.0을 사용하는 것입니다. 특히, 서버가 이미 OAuth2 기반 로그인 시스템을 가지고 있다면, 클라이언트는 복잡한 인증 로직을 직접 구현할 필요 없이 서버와 안전하게 통신하는 방식으로 구성할 수 있습니다.
이 글에서는 xxx.com 도메인을 사용하는 OAuth2.0 인증 서버와 Unity 클라이언트를 연동하여 Google 로그인을 처리하는 전체 과정을 소개합니다.
✅ 전체 인증 흐름 요약
Unity Client → 서버에 로그인 요청 → 구글 로그인 URL 오픈 (WebView) ↓ 사용자 구글 로그인 완료 → 서버 상태 폴링 → accessToken 발급 |
1. 로그인 시작 요청
Unity 클라이언트는 먼저 서버에 로그인 요청을 보냅니다.
✅ 요청
POST https://dapi.xxx.com/auth/google/start |
✅ 응답 예시
{ "loginToken": "56cc9e13-c833-41e7-9d9f-9f9540f9d9d4", "loginUrl": "https://accounts.google.com/o/oauth2/auth?...&state=56cc9e13-c833-41e7-9d9f-9f9540f9d9d4" } |
loginUrl
: Unity WebView에서 열 URLloginToken
: 이후 상태 확인 및 토큰 요청 시 사용할 고유 키
2. Unity WebView로 로그인 진행
loginUrl을 Unity의 WebView(예: WebViewObject 또는 UniWebView)에서 띄우고 사용자가 로그인하도록 유도합니다.
구글 인증이 성공하면 아래와 같은 메시지를 포함한 페이지가 출력됩니다:
{ "code": "0000", "msg": "Login successful. You can return to the app." } |
이 시점에 WebView를 닫고, 클라이언트는 다음 단계로 진행합니다.
3. 로그인 상태 확인 (Polling)
유저의 로그인 완료 여부를 주기적으로 서버에 확인합니다.
✅ 요청
GET http://dapi.xxx.com/auth/google/status/{loginToken} |
✅ 응답 예시
{ "code": "0000", "data": "pending", "msg": "success" } |
"data": "pending"
→ 아직 로그인 대기 중"data": "complete"
→ 로그인 완료"code": "1100"
→ 잘못된 또는 만료된 토큰
Unity에서는 1~2초 간격으로 반복 요청하며 로그인 완료 여부를 체크합니다.
4. 로그인 토큰 발급
상태가 complete가 되면, 클라이언트는 최종적으로 액세스 토큰을 요청합니다.
✅ 요청
GET https://dapi.xxx.com/auth/google/token/{loginToken} |
✅ 성공 응답 예시
{ "code": "0000", "data": { "accessToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", "atExpires": 1747726950, "rtExpires": 1747899750 }, "msg": "success" } |
✅ 실패 시
{ "code": "1100", "msg": "Invalid or expired login_token" } |
5. Unity 클라이언트 내부 처리 흐름 요약
// Step 1: 로그인 시작 요청 // POST https://dapi.xxx.com/auth/google/start // Step 2: WebView로 loginUrl 띄우기 // 사용자가 로그인 완료하면 WebView 닫기 // Step 3: Polling으로 status 확인 // GET http://dapi.xxx.com/auth/google/status/{loginToken} // Step 4: 토큰 발급 요청 // GET https://dapi.xxx.com/auth/google/token/{loginToken} |
발급받은 accessToken은 이후 API 요청 시 Authorization: Bearer {accessToken}
형태로 사용됩니다.
🔐 보안 팁
- loginToken은 일정 시간이 지나면 만료됩니다. 유효 시간 내에 polling 및 token 요청을 완료해야 합니다.
- accessToken과 refreshToken은 보안 저장소(예: 암호화된 파일 또는 OS 키체인)에 저장하는 것이 좋습니다.
- 추후 refreshToken을 이용한 재인증 로직도 구현해두는 것이 바람직합니다.
✅ 마무리
OAuth2 방식의 SNS 로그인을 Unity PC 앱에 연동하는 것은 복잡하게 보일 수 있지만, 인증 서버에서 제공하는 login URL + 상태 polling + token 발급 API 조합을 잘 활용하면 쉽게 처리할 수 있습니다.
이제 여러분의 Unity 게임이나 앱에서도 Google 로그인을 편리하게 제공해보세요!