세션 활성화하기
토큰 발급하기 단계에서 발급한 액세스 토큰과 리프레시 토큰을 세션에 등록하면 로그인이 완료됩니다.
세션 활성화에는 AccessToken, RefreshToken, PlayerId, ExpiresAtSec를 사용합니다.
1. 세션 활성화 메서드 호출 파라미터 준비
세션 활성화에 필요한 파라미터를 준비합니다.
AccessToken, RefreshToken, PlayerId
ExpiresAtSec
액세스 토큰의 만료 시각을 Unix 초 단위로 전달합니다. 토큰 발급하기 응답의 Data.ExpiresIn은 발급 시점으로부터 남은 시간(초)이므로, 현재 시각에 더해 만료 시각을 계산합니다. issued는 토큰 발급 단계에서 받은 TokenIssueTokenResult.Success 객체입니다.
2. 세션 활성화
SetSession
ISessionManager.SetSession()을 호출해 토큰 발급으로 받은 액세스 토큰과 리프레시 토큰을 세션에 등록합니다.
호출 파라미터
| 필드명 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
| accessToken | string | Required | 인증 메서드 호출에 사용하는 액세스 토큰 |
| refreshToken | string | Required | 토큰 갱신에 사용하는 리프레시 토큰 |
| playerId | long | Required | 로그인한 Player ID |
| expiresAtSec | long | Required | 액세스 토큰 만료 시각(Unix 초) |
호출 예시
세션 매니저에 토큰을 등록합니다. SetSession()은 결과 객체를 반환하지 않습니다.
응답 데이터
성공 시 별도 반환 데이터가 없습니다.
응답 예시
응답 상태
SetSession()은 결과 객체를 반환하지 않습니다. 세션 등록 후에는 인증이 필요한 메서드 호출 시 여기에서 등록한 토큰이 사용됩니다.
전체 흐름 예시
토큰 발급은 IssueTokenAsync()로, 세션 등록은 ISessionManager로 수행합니다. 게스트 로그인, 토큰 발급, 세션 등록을 하나로 묶은 StartSessionAsync() 같은 메서드로 구현할 수 있습니다. 코드와 토큰을 분리하는 것은 토큰 노출 위험을 줄이기 위한 보안 절차입니다.
IssueTokenAsync()가 반환하는 요청 수행 불가 공통 실패(Failure)의 결과 모델과 처리 원칙은 공통 오류 처리를 참조하세요.
Note
세션을 확립한 뒤 토큰 만료 시 자동 갱신을 켜 두면 편리합니다. 자세한 내용은 자동 로그인의 AuthTokenRefresh.Enable을 참조하세요.
StartSessionAsync 구현 예시
using System;
using System.Threading.Tasks;
using Hive.Axyl.Auth;
using Hive.Axyl.Core;
// authorizationCode를 사용해 토큰을 발급하고 세션을 확립합니다.
static async Task StartSessionAsync(string authorizationCode, string codeVerifier, long playerId)
{
ITokenService token = HiveCore.Resolve<ITokenService>();
ISessionManager session = HiveCore.Resolve<ISessionManager>();
var issueResult = await token.IssueTokenAsync(new AuthorizationCodeTokenRequest {
GrantType = "authorization_code",
ClientId = "{clientId}",
AuthorizationCode = authorizationCode,
CodeVerifier = codeVerifier, // 로그인 호출에 보낸 codeChallenge와 짝
});
if (issueResult is not TokenIssueTokenResult.Success issued)
{
// 토큰 발급 실패 처리 (InvalidGrant, InvalidGrantCodeChallenge 등)
return;
}
// SDK는 로그인 시 세션을 자동 설정하지 않습니다. 직접 확립합니다.
session.SetSession(
issued.Data.AccessToken,
issued.Data.RefreshToken ?? string.Empty, // SetSession은 null을 허용하지 않습니다
playerId,
DateTimeOffset.UtcNow.ToUnixTimeSeconds() + issued.Data.ExpiresIn);
}
StartSessionAsync를 사용한 게스트 로그인 통합 예시
CreatePkce()는 게스트 로그인에서 정의한 헬퍼입니다. guestPlayerId·guestToken·deviceKey는 게스트 계정 생성에서 확보해 앱이 관리하는 값입니다.
using Hive.Axyl.Auth;
using Hive.Axyl.Core;
using UnityEngine;
IAuthService auth = HiveCore.Resolve<IAuthService>();
var (codeVerifier, codeChallenge) = CreatePkce();
// 앱이 같은 게스트 계정 흐름에서 관리 중인 값을 사용합니다.
var result = await auth.LoginGuestAsync(new GuestLoginRequest {
GuestPlayerId = guestPlayerId,
GuestToken = guestToken,
ClientId = "{clientId}",
CodeChallenge = codeChallenge,
CodeChallengeMethod = CodeChallengeMethod.S256,
DeviceKey = deviceKey,
});
switch (result)
{
case AuthLoginGuestResult.Success success:
// 로그인 성공 → 토큰 발급 후 세션 시작
await StartSessionAsync(success.Data.AuthorizationCode, codeVerifier, success.Data.PlayerId);
break;
case AuthLoginGuestResult.InvalidGuestToken:
// 입력한 게스트 토큰이 유효하지 않음 → 연동한 로그인 수단이 있으면 그 수단으로 로그인하도록,
// 연동한 적이 없으면 게스트 계정을 다시 생성하도록 안내
break;
// 공통 실패 처리 (네트워크·서버 오류)
case AuthLoginGuestResult.Failure failure:
HiveError err = failure.Problem;
Debug.LogError($"[{err.Code}] {err.Message} (trace: {err.TraceId})");
break;
// 안전망: 처리하지 않은 결과 및 알 수 없는 신규 결과(UnknownOutcome)
default:
Debug.LogWarning($"처리되지 않은 결과: {result.GetType().Name}");
break;
}