인증/허가

Strix Cloud에서는 토큰 인증/허가가 가능합니다.

Strix Cloud의 게임 서버는 사용자 비밀번호 등 중요한 정보를 몰라도 토큰을 이용하여 다른 인증 서버로 인증할 수 있습니다.

본인 토큰, OAuth2, OpenID Connect 등을 이용할 수 있습니다.

인증/허가 순서

인증/허가의 원리는 아래 그림과 같습니다. 클라이언트 애플리케이션과 Strix Cloud 게임 서버, 외부 웹 API 서버를 서로 연결하여 허가를 처리합니다.

웹 API 서버는 미리 준비해야 합니다.

sequenceDiagram participant Client as 클라이언트 participant Strix Server as STRIX 서버 participant Web API Server as 웹 API 서버 Note over Client,Web API Server: 인증 (HTTPS) Client ->> Web API Server: 로그인 API Client ->> Web API Server: 토큰 획득 API Web API Server -->> Client: 액세스 토큰 Note over Client,Web API Server: 허가 (HTTPS) Client ->> Strix Server: 액세스 토큰 Strix Server ->> Web API Server: 사용자 정보 획득 요청 API Web API Server -->> Strix Server: 사용자 정보 Strix Server ->> Strix Server: 세션 만들기 Strix Server -->> Client: 세션 ID, 비밀번호 해시, NONCE Note over Client,Strix Server: STRIX 프로토콜 통신 Client ->> Strix Server: 세션 ID, 비밀번호 함수 Strix Server ->> Strix Server: 세션 ID에서 세션 가져오기 Strix Server ->> Strix Server: 비밀번호 해시 비교 Strix Server -->> Client: 로그인 결과

아래 웹 API를 위와 같이 준비합니다.

  • 로그인 API

  • 토큰 획득 API

  • 사용자 정보 획득 API

로그인 API

로그인 API는 HTTPS 통신을 인증하는 용도입니다. 인증 메서드로는 아무 메서드나 사용해도 되므로 ID/비밀번호 인증, UUID 인증 등 원하는 메서드로 로그인 프로세스를 만듭니다.

토큰 획득 API

토큰 획득 API는 Strix 인증용 액세스 토큰을 발급하는 API입니다. 로그인 상태인지 확인하고 응답으로 토큰을 리턴합니다.

요청

curl -X POST https://<Base URL>/api/access_token

응답

{
    "access_token": "jERkHgIcAfe9xpSpqHUVxBuvLQTV77cO"
}

사용자 정보 획득 API

사용자 정보 획득 API는 토큰과 연동된 사용자 정보를 리턴하는 API입니다. 이 API는 Strix Cloud의 게임 서버 측에서 사용자 정보를 획득할 때 액세스합니다.

이것은 POST 리퀘스트 API가 되어야 합니다. 또, Authorization 헤더에는 "Bearer <access token>"라는 형태로 액세스 토큰이 포함되어 있으므로, 액세스 토큰 부분을 빼고 해당 액세스 토큰과 연동된 사용자 정보를 응답에 넣어 리턴합니다.

요청

curl -X POST -H 'Authorization: Bearer jERkHgIcAfe9xpSpqHUVxBuvLQTV77cO' https://<Base URL>/api/user

응답

{
    "id": 123,       // 사용자 ID
    "name": "Alice"  // 사용자 이름
}

사용자 정보는 id와 이름을 리턴해야 합니다.

Strix Cloud 옵션 설정

먼저 Strix Cloud 옵션 화면에서 인증/허가 옵션을 활성화합니다.

Authorization enabled and related settings.

이어서 웹 API를 준비합니다. 토큰을 리턴하는 API와 사용자 정보를 리턴하는 API를 준비합니다.

사용자 리소스 획득 API URL은 웹 서버의 URL을 지정합니다.

{
    "id": 123,
    "name": "Alice"
}

StrixNetwork.authorizationAccessToken에 토큰을 설정하는 StrixNetwork.ConnectMasterServer를 호출합니다.

JoinRoom을 이용할 때는 RoomJoinArgs.authUrl에 인증 URL을 설정합니다.

StrixNetwork.SearchRoom 콜백 이벤트에는 authUrl이 포함되어 있으며 roomInfo.nodeProperties["authUrl"]에서 불러올 수 있습니다.

string authUrl = "";

if (roomInfo.nodeProperties != null && roomInfo.nodeProperties.TryGetValue("authUrl", out object authUrlValue)) {
    authUrl = authUrlValue.ToString();
}

RoomJoinArgs joinArgs = new RoomJoinArgs {
    host = roomInfo.host,
    port = roomInfo.port,
    protocol = roomInfo.protocol,
    roomId = roomInfo.roomId,
    authUrl = authUrl,
    memberProperties = memberProperties
};

StrixNetwork.instance.JoinRoom(joinArgs, handler, failureHandler, config);