MPSD S2S 인증
XBOX 서비스 멀티플레이어 서비스에 대한 S2S 호출의 인증은 다른 XBOX 서비스와 다릅니다.Delegation 토큰을 사용한 호출은 지원되지 않으며 서비스 인증을 사용한 호출만 작동합니다. 이 인증 유형을 통해 추가적인 MPSD S2S 기능이 활성화됩니다.
다른 S2S 호출과 마찬가지로 비즈니스 파트너 인증서가 필요합니다. 전체 액세스 Multiplayer.Manage 정책이 있어야 합니다. 이는 비즈니스 파트너 인증서가 생성된 웹 서비스가 S2S 호출에 대해 올바른 액세스 수준을 제공할 수 있도록 하기 위해 필요합니다.
서비스 인증에는 다음 인증 흐름이 사용됩니다.
-
비즈니스 파트너 인증서를 사용하여 서비스용 XBOX 인증 서비스를 호출하여
S토큰을 검색합니다. -
이
S토큰과SandboxId로 XBOX 보안 토큰 서비스(XSTS)를 호출하여X토큰을 받습니다. 이 단계에서는Delegation토큰이나User토큰을 사용해서는 안 됩니다. 이 흐름을 통해 지정된SandboxId는 비즈니스 파트너 인증서를 만드는 동안 지정한 샌드박스 집합에도 있어야 합니다. 특정 샌드박스가 없는 비즈니스 파트너 인증서는 지원되지 않으며 누락된 샌드박스를 나타내는 인증 오류가 발생합니다. -
X토큰과 헤더(다음 섹션에서 지정됨)를 사용하여 MPSD 서비스를 호출합니다.
MPSD S2S 헤더
타이틀 헤더
올바른 타이틀로 작동하려면 다음 형식의X-Xbl-OnBehalfOf-Title 헤더가 필요합니다.
예제
사용자 헤더
특정 사용자 또는 사용자 집합으로 작동하려면 다음 형식의X-Xbl-OnBehalfOf-Users 헤더가 필요합니다.
예제
priv=multiplayer입니다. 사용자에게 멀티플레이어 권한이 있음을 나타냅니다.
X-Xbl-OnBehalfOf-Users 헤더를 사용하는 것은 헤더에 식별된 사용자가 콘솔에서 직접 호출을 하는 것과 같습니다. 결과적으로 호출 서비스는 사용자의 보안을 유지해야 합니다.
- 실제 XUID만 사용할 수 있습니다.
- 사용자에 대해 선언된 권한이 올바라야 합니다.
- 사용자는 자신을 대신하여 수행된 모든 작업에 동의해야 합니다.
Deny-Scope 헤더
Multiplayer.Manage 액세스 정책은 MPSD 서비스에 대한 S2S 호출에 대해 사용자 액세스 권한을 재정의합니다. 따라서 모든 세션 액세스는 사용자 권한을 기반으로 제한되지 않습니다. 사용자 권한 확인을 다시 활성화하려면 다음과 같이 X-Xbl-Deny-Scope 헤더를 사용할 수 있습니다.
예제
Multiplayer.Manage 액세스 정책이 재정의로 사용되지 않도록 합니다. 이는 사용자가 세션에 대한 올바른 액세스 권한을 가지고 있고 서버 액세스가 표시 여부 또는 참가 제한으로 인해 다른 차단을 재정의하지 않도록 보장하는 데 사용할 수 있습니다.
이 헤더를 설정할 때 웹 서비스에 대한 대체로
Multiplayer.Runtime 액세스도 부여해야 합니다. 이렇게 하면 사용자 권한이 거부된 경우에도 액세스가 허용됩니다. 그렇지 않으면 오류 시나리오에서 서비스 액세스가 부여되지 않고 403 상태가 반환됩니다. Multiplayer.Runtime 액세스에는 작동하는 사용자가 필요합니다. X-Xbl-Deny-Scope 헤더는 X-Xbl-OnBehalfOf-Users 또는 DelegationToken 클레임에서 얻은 사용자 클레임과 함께만 작동합니다.세션 멤버 관리
하나의 호출에서 여러 사용자를 처리하여 S2S 호출에 대한 세션 멤버 관리를 최적화할 수 있습니다. 사용자 헤더를 지정하면 세션 문서 본문에 표준 “me” 멤버를 사용할 수 없습니다. 대신 다음 옵션을 사용할 수 있습니다.세션 멤버 추가
앞서 언급한 패턴 중 하나를 사용하여 세션 멤버를 추가하거나 수정할 수 있습니다. 일반적으로 플레이어를 추가하기 위한 최소 작업은 속성이나 상수, 일반적으로 멤버의 활성 상태 속성을 설정하는 것입니다.활성으로 설정되지 않은 멤버는 MPSD 세션의
InactiveTimeout 값에 따라 서비스에 의해 자동으로 제거됩니다.예제
세션 멤버 제거
멤버 섹션을null로 설정하여 세션 멤버를 제거할 수 있습니다.
예제
멤버 예약
일반적으로 모든 세션 관리가 타이틀 서비스에 의해 수행되는 경우 세션 멤버에 대한 예약은 필요하지 않습니다. 이 시나리오에서는 예약 없이 세션 멤버를 직접 추가하고 제거할 수 있습니다. 세션 멤버에 대한 예약은 생성된 세션이 클라이언트에 의해서도 관리되는 경우에만 사용해야 합니다.on-behalf-of-user 헤더에 지정된 사용자 순서로 여러 사용자에 대한 세션 예약을 추가할 수 있습니다. 다음 패턴은 새 세션을 생성할 때만 유효합니다.
예제
예약은 대규모 세션에서 지원되지 않습니다. 예약을 세션 멤버 추가 또는 제거와 혼합하는 것은 지원되지 않습니다.
세션 멤버 상태
타이틀 서비스는 시스템 속성을 통해 세션 멤버의 상태를 추적하고 설정할 수 있습니다. 이를 통해 멤버 상태 및 정보를 완전히 제어할 수 있습니다.멤버 활성 상태
멤버의 활성 상태는 세션에서 플레이어를 활성으로 표시하는 것입니다. 이는 다음과 같이inactiveRemovalTimeout 세션 구성에 정의된 대로 시스템을 통한 제거를 방지합니다.
active로 설정해야 합니다. 세션 멤버가 연결이 끊긴 경우에도 세션에 일시적으로 유지되어야 하는 흐름에서만 비활성 멤버를 사용해야 합니다. S2S 흐름의 경우 이는 타이틀 서버에서 직접 관리할 수도 있습니다.
멤버 예약 상태
reserved member 속성을 통해 세션 멤버의 예약 상태를 확인할 수 있습니다. 이 속성이 true로 설정되면 세션 멤버가 예약 상태이며 세션에서 아직 활성이 아닙니다.
다음은 세션 문서의 예입니다.
reservedRemovalTimeout이 만료된 후 MPSD에서 세션에서 제거됩니다.
대규모 세션 제한 사항
대규모 기능이 활성화된 MPSD 세션은 100명 이상의 플레이어를 지원합니다. 이러한 세션은 일반 세션과 다르게 작동합니다. 자세한 내용은 멀티플레이어에 대한 대규모 세션 활성화를 참조하세요. 대규모 세션에 대한 작업은 항상 단일 사용자로 수행됩니다. 결과적으로 대규모 세션에 대한 S2S 호출은X-Xbl-OnBehalfOf-Users 헤더에 단일 사용자만 포함해야 합니다. 여러 사용자 작업은 지원되지 않습니다. 각 사용자에 대해 개별 호출을 통해 사용자를 추가하거나 제거해야 합니다. 기본 세션 문서의 잠금 경합을 방지하기 위해 이러한 S2S 호출을 순차적으로 수행하세요. 동일한 문서에 대한 병렬 작업은 호출 시간이 길어지고 전체 작업 시간이 빨라지지 않습니다.
또한 S2S 호출 결과는 대규모 세션의 전체 멤버 목록에 대한 액세스를 제공하지 않습니다. 호출에 지정된 사용자에 대한 멤버 데이터만 반환됩니다.
결과적으로 타이틀 서비스는 자체 논리에서 대규모 세션 멤버에 대한 사용자 정보를 추적하고 XBOX 요구 사항(XR)을 올바르게 지원하기 위해 MPSD 멤버십을 사용해야 합니다.
조우 및 그룹
대규모 기능이 있는 세션은 최근 플레이어 목록을 자동으로 업데이트하지 않습니다. 대신, 다른 플레이어는 조우 및 그룹을 통해 최근 플레이어 목록에 직접 추가됩니다. 자세한 내용은 멀티플레이어에 대한 대규모 세션 활성화를 참조하세요. 세션 멤버를 조우의 일부로 플래그를 지정하려면 다음 패턴을 사용하세요.예제
조우를 올바르게 캡처하려면 참여하는 모든 세션 멤버에게
encounters 속성을 30초 이내에 작성해야 합니다. 조우 집합은 특정 시점의 속성입니다. 즉시 소비되며 응답에 표시되지 않습니다.예제
groups 속성 목록에서 그룹을 제거하세요. 빈 목록으로 쓰기 작업을 수행하면 모든 그룹 멤버십이 제거됩니다.
groups 속성은 영구적이며 멤버에 대한 응답에 표시됩니다.활동 세션 관리
사용자의 MPSD 활동 핸들은 플랫폼 초대 및 진행 중 참가에 사용되는 세션을 결정합니다. 이 핸들은 S2S 호출을 통해 설정할 수 없으며 클라이언트 API를 통해서만 사용할 수 있습니다. 타이틀 서버는 클라이언트와 세션 이름을 공유하여 S2S 세션에 대한 활동 핸들 생성을 가능하게 할 수 있습니다. 핸들에 대한 자세한 내용은 다음을 참조하세요.- 멀티플레이어 개념 개요 항목의 세션 핸들 섹션
- 멀티플레이어 세션 디렉터리 개요 항목의 세션에 대한 MPSD 핸들 섹션
모범 사례
MPSD S2S 호출을 수행할 때 타이틀은 문제를 피하고 성능을 개선하기 위해 다음 모범 사례를 따라야 합니다.- 여러 사용자에 대한 작업 병합 가능한 경우 MPSD에 대한 S2S 호출은 여러 사용자에 대한 일괄 작업으로 수행되어야 합니다. 이는 성능을 개선하고 네트워크 트래픽을 줄입니다. 호출을 줄이기 위한 효율적인 접근 방식은 타이틀 서버에서 MPSD 작업을 대기열에 넣고 5초 간격으로 모든 요청을 병합하는 것입니다. 이는 효율성과 대기 시간 사이의 균형을 제공합니다.
- 여러 세션 및 멤버 작업 병합 타이틀은 가능한 한 사용자 작업을 병합해야 합니다. 세션 멤버 추가는 항상 관련된 모든 멤버 속성을 동시에 설정하는 것과 결합되어야 합니다.
- 동일한 문서에 대해 S2S 호출을 순차적으로 수행 동일한 MPSD 문서에 대한 모든 호출은 항상 순차적으로 수행되어야 합니다. 병렬 작업을 수행하면 기본 MPSD 문서의 잠금 경합이 발생하고 성능이 저하되고 요청이 실패할 수 있습니다.
- 클라이언트에서 핸들 활동 작업에 응답 MPSD 활동 핸들은 클라이언트 API를 통해서만 지원됩니다. 타이틀 서비스는 세션 이름을 공유하고 관련 클라이언트 API를 사용하여 이러한 핸들을 생성하기 위해 클라이언트를 사용해야 합니다.
- 클라이언트 세션 구독 및 연결이 필요하지 않음 S2S 호출을 통해 완전히 관리되는 모든 MPSD 세션의 경우 연결 기능이 필요하지 않습니다. S2S 호출 흐름의 경우 클라이언트와의 WebSocket 연결이 필요하지 않습니다. 대신, 타이틀 서비스는 세션 멤버를 직접 추가하거나 제거하는 것을 완전히 처리해야 합니다.
-
대규모 세션 작업
대규모 세션에 대한 S2S 논리는 여러 멤버에 대한 작업을 사용할 수 없기 때문에 작은 세션과 다르게 처리해야 합니다. 타이틀 서비스는 멤버 추가 또는 제거를 포함하여 동일한 세션 문서에 대한 모든 작업을 순차적으로 수행해야 합니다. 많은 수의 멤버의 경우 이로 인해 멤버 작업이 지연될 수 있습니다. 이러한 지연은 허용되며 플랫폼 요구 사항을 위반하지 않습니다.
대규모 세션에 대한 멤버 논리를 단순화하려면 타이틀은 MPSD 세션을 사용하여 플레이어 멤버십만 추적하고 모든 다른 플레이어 데이터를 내부적으로 처리할 수 있습니다.
서버 시작 시 플레이어가 없더라도 타이틀 서버에 대한 대규모 MPSD 세션을 만드는 것이 가장 간단합니다. 이를 위해서는 다음 예제에 표시된 대로 MPSD 세션 상수에서
sessionEmptyTimeout구성이 필요합니다. - 대규모 세션 진행 중 참가 또는 초대 대규모 세션은 XBOX 서비스를 통해 진행 중 참가 및 초대를 지원합니다. 대부분의 시나리오에서는 이 기능을 지원하기 위해 일반 세션을 사용하는 것이 더 간단합니다. 이 세션은 타이틀 서버 또는 클라이언트에서 제어할 수 있으며 관련 대규모 세션에 참가하기 위한 정보를 포함해야 합니다.
-
대규모 세션 조우
대규모 세션의 조우가 올바르게 캡처되도록 하려면 모든
encounters멤버 속성을 30초 이내에 작성해야 합니다. 타이틀 서비스는 항상 참여하는 모든 멤버에 대한encounters속성 업데이트를 단일 서비스 호출로 일괄 처리하려고 시도해야 합니다. 조우는 고유 식별자를 사용해야 합니다. GUID를 사용하는 것이 좋습니다.
