PlayFab-Party-Einladungen und das Sicherheitsmodell
PlayFab Party ist standardmäßig so konzipiert, dass sie eine sichere Kommunikationsumgebung bereitstellt. Dies trägt zum Schutz von Spielen und Spielern bei, aber Sicherheitseinschränkungen können Entwicklern Fragen zur API-Nutzung aufwerfen. Auf dieser Seite werden die Sicherheitsfeatures von PlayFab Party vorgestellt, die sich hauptsächlich auf Einladungen und effektive Muster für deren Verwendung konzentrieren.
PlayFab Party verwendet branchenüblicher Verschlüsselung und Authentifizierung für die gesamte Kommunikation (Verwaltungsdaten, Spieldaten und Echtzeitkommunikation). Dies umfasst alle Peer-to-Peer-Übertragungen und alle Transaktionen an Azure-Dienste, unabhängig davon, ob es sich um Webdienste (die HTTPS verwenden) oder um den transparenten Cloudrelaydienst (der DTLS verwendet) handelt.
Das Einschränken des Zugriffs auf ein Netzwerk ist ein wesentlicher Bestandteil des Schutzes der Integrität des Netzwerks. Für den Beitritt zu einem Netzwerk sind vier Dinge erforderlich:
- Kenntnisse des Netzwerkdeskriptors
- Besitz eines gültigen PlayFab-Entitätstokens
title_player_account
- Kenntnis eines Einladungsbezeichners
- Vorhandensein der PlayFab-Entitäts-ID für das Token in der angegebenen Einladung, oder die angegebene Einladung ist eine offene Einladung.
Ein bestimmtes PlayFab Party-Netzwerk kann maximal 32 Spieler haben.
Einladungen
Eine Einladung (PartyInvitation
) ist ein Objekt innerhalb eines Netzwerks, das dem Benutzer Zugriff auf das Netzwerk gewährt. Einladungen können während der gesamten Lebensdauer eines Netzwerks erstellt und widerrufen werden. Eine Einladung verfügt über einen Ersteller, einen eindeutigen Bezeichner, eine Widerrufseinstellung und eine optionale Gruppe von Benutzern , die als Entitäts-IDs angegeben sind. Ein Netzwerk kann eine beliebige Anzahl aktiver Einladungen enthalten, einschließlich keiner. Ein Netzwerk wird immer mit einer ersten Einladung erstellt.
Einladungsdauer
Eine Einladung ist ab der Erstellung bis zum Widerruf aktiv.
Kreation
Es gibt zwei Möglichkeiten, eine Einladung zu erstellen. Der erste Weg besteht darin, aufzurufen PartyManager::CreateNewNetwork()
. Da eine Einladung erforderlich ist, um einem Netzwerk beizutreten, muss eine vorhanden sein, wenn ein Netzwerk erstellt wird. Diese Einladung wird als erste Einladung bezeichnet und weist einige besondere Eigenschaften auf, die unten beschrieben werden. Die zweite Möglichkeit besteht darin, aufzurufen PartyNetwork::CreateInvitation()
.
Der Ersteller einer Einladung ist der Benutzer, der beim Aufrufen PartyNetwork::CreateInvitation()
von angegeben wurde. Die erste Einladung hat keinen Ersteller.
Wenn eine Einladung erstellt wird (oder wenn Sie einem Netzwerk mit einer aktiven anfänglichen Einladung beitreten), wird eine PartyInvitationCreatedStateChange
generiert.
Wichtig
Die anfängliche Einladung lässt nicht implizit zu, dass der Ersteller eines Netzwerks beitreten kann. Wenn keine offene Einladung verwendet wird, müssen Sie die Entitäts-ID des Erstellers in die Benutzerliste einschließen.
Aufzählung
Das Aufzählen aktiver Einladungen erfolgt mithilfe von PartyNetwork::GetInvitations()
. Es können nur die auf dem lokalen Gerät erstellten Einladungen zusammen mit der ursprünglichen Einladung aufgelistet werden, sofern sie noch aktiv ist.
Widerruf
Eine Einladung wird durch Aufrufen PartyNetwork::RevokeInvitation()
von widerrufen. Nur der Ersteller einer Einladung kann sie widerrufen, mit Ausnahme der ursprünglichen Einladung, die von jedem Benutzer widerrufen werden kann. Darüber hinaus wird eine Einladung automatisch widerrufen, wenn der Benutzer, der sie erstellt hat, aus dem Netzwerk entfernt wird.
Wenn eine Einladung widerrufen wird, wird ein PartyInvitationRevokedStateChange
auf allen Geräten generiert, auf denen die Einladung angezeigt werden könnte.
Nachdem die erste Einladung widerrufen wurde, kann sie nicht mehr erstellt werden. Ihr Bezeichner kann für eine neue Einladung wiederverwendet werden, aber diese neue Einladung verfügt nicht über die speziellen Eigenschaften der ursprünglichen Einladung.
Wichtig
Das Widerrufen einer Einladung hat keine Auswirkungen auf die Geräte und Benutzer, die dem Netzwerk bereits beigetreten sind. Verwenden Sie PartyNetwork::KickUser()
oder PartyNetwork::KickDevice()
, um einen Benutzer oder ein Gerät aus dem Netzwerk zu entfernen. Beachten Sie, dass diese Methoden noch nicht implementiert sind.
Einladungskonfiguration
Die Konfiguration einer Einladung wird während der Erstellung mithilfe der PartyInvitationConfiguration
-Struktur angegeben.
Bezeichner
Jede Einladung verfügt über einen Bezeichner, der sie innerhalb des Netzwerks eindeutig identifiziert. Wenn beim Erstellen einer Einladung kein Bezeichner angegeben wird, weist Party eine zu. Bei Aufrufen von PartyManager::CreateNewNetwork()
wird der zugewiesene Bezeichner in einem out-Parameter zurückgegeben und auch in PartyCreateNewNetworkCompletedStateChange
gemeldet, wenn die Netzwerkerstellung abgeschlossen ist. Bei Aufrufen von PartyManager::CreateInvitation()
kann der zugewiesene Bezeichner aus dem invitation
out-Parameter oder dem invitation
Feld in PartyCreateInvitationCompletedStateChange
abgerufen werden, wenn die Einladungserstellung abgeschlossen ist.
Obwohl ein Einladungsbezeichner eindeutig sein muss, kann deren Bezeichner beim Erstellen einer neuen Einladung wiederverwendet werden, nachdem eine Einladung widerrufen wurde.
Erste Einladung und andere Einladungen
Obwohl es nur einen Einladungstyp gibt, unterscheidet sich die anfängliche Einladung, die durch den Aufruf PartyManager::CreateNewNetwork()
von erstellt wird, etwas von einladungen, die später über PartyNetwork::CreateInvitation()
erstellt werden. Die Unterschiede sind in der folgenden Tabelle zusammengefasst.
Eigentum | Erste Einladung | Andere Einladungen |
---|---|---|
Sichtbarkeit | Alle Geräte können die anfängliche Einladung sehen. Solange die anfängliche Einladung nicht widerrufen wurde, werden Aufrufe aufgerufen, um PartyNetwork::GetInvitations() die ursprüngliche Einladung zurückzugeben. Beim Beitritt zu einem Netzwerk erhält jedes Gerät eine PartyInvitationCreatedStateChange für die erste Einladung, sofern sie zuvor nicht widerrufen wurde. |
Nur das Gerät, das die Einladung erstellt hat, kann sie sehen. Eine nicht anfängliche Einladung wird nur von PartyNetwork::GetInvitations() zurückgegeben, wenn sie auf diesem Gerät erstellt wurde, und eine PartyInvitationCreatedStateChange wird nur für sie auf dem erstellenden Gerät generiert. |
Widerrufbarkeit | Jeder kann die anfängliche Einladung widerrufen. Wenn Sie die Einladungskonfiguration explizit angeben, muss die Widerrufbarkeit auf PartyInvitationRevocability::Anyone festgelegt werden. |
Nur der Ersteller kann die Einladung widerrufen. Beim Erstellen der Einladung muss die Widerrufbarkeit auf PartyInvitationRevocability::Creator festgelegt werden. |
Lebensdauer | Die anfängliche Einladung ist aktiv, bis sie explizit widerrufen wird. | Eine nicht anfängliche Einladung ist aktiv, bis sie explizit widerrufen wird oder bis der Benutzer, der sie erstellt hat, aus dem Netzwerk entfernt wird. Wenn der Benutzer aus dem Netzwerk entfernt wird, werden alle von ihnen erstellten Einladungen automatisch widerrufen. |
Ersteller | Die erste Einladung hat keinen Ersteller.
PartyInvitation::GetCreatorEntityId() gibt NULL zurück. |
Der beim Aufrufen PartyNetwork::CreateInvitation angegebene Benutzer ist der Ersteller.
PartyInvitation::GetCreatorEntityId() gibt die Entitäts-ID dieses Benutzers zurück. |
Einladungen (mit Ausnahme der ursprünglichen Einladung) werden aus Datenschutzgründen von anderen Geräten ausgeblendet. Ein Beispiel dafür, warum dies wichtig ist, finden Sie im Verwendungsmuster der Freundesliste .
Benutzer und offene Einladungen
Eine Einladung enthält 0 oder mehr Benutzer, die als Entitäts-IDstitle_player_account
angegeben sind. Wenn eine Einladung Benutzer enthält, gewährt diese Einladung nur diesen Benutzern Zugriff auf den Beitritt zum Netzwerk. Wenn eine Einladung jedoch keine Benutzer enthält, handelt es sich um eine offene Einladung. Jeder Benutzer kann mit dem Bezeichner einer offenen Einladung dem Netzwerk beitreten.
Notiz
Achten Sie auf einem Gerät mit mehreren Benutzern, z. B. einer Spielkonsole, darauf, dass Sie die richtige Einladung mit dem richtigen Benutzer verwenden. Je nachdem, welche Benutzer in den einzelnen Einladungen angegeben sind, ist es möglich, dass unterschiedliche Benutzer auf dem Gerät unterschiedliche Einladungen verwenden müssen, wenn sie einen Benutzer über PartyNetwork::AuthenticateLocalUser() authentifizieren.
Unbeweglichkeit
Nachdem eine Einladung erstellt wurde, kann ihre Konfiguration nicht mehr geändert werden. Nachdem eine Einladung widerrufen wurde, kann jedoch eine andere mit demselben Bezeichner, aber einer anderen Konfiguration erstellt werden. Weitere Informationen finden Sie unter Verwendungsmuster für dynamische Einzeleinladungen.
Verwendungsmuster
PlayFab Party-Einladungen sind einfach, aber flexibel. Es gibt viele effektive Möglichkeiten, sie zu verwenden, um verschiedene Zugriffsmodelle für ein Netzwerk zu erreichen.
Netzwerk öffnen
Ein offenes Netzwerk ist am einfachsten zu verstehen und zu implementieren. Es ermöglicht allen Benutzern, die den Netzwerkdeskriptor und die Einladungs-ID besitzen, teilzunehmen.
Erstellen Sie ein offenes Netzwerk, indem Sie null für den initialInvitationConfiguration
Parameter übergeben, wenn Sie aufrufen PartyManager::CreateNewNetwork()
. Der Bezeichner für die geöffnete Einladung wird als out-Parameter zurückgegeben. Teilen Sie nach Abschluss der Netzwerkerstellung den Netzwerkdeskriptor und die Einladungs-ID, um Benutzern die Teilnahme zu ermöglichen.
Optional können Sie das Netzwerk jederzeit schließen, indem Sie die anfängliche Einladung widerrufen.
Warnung
Da ein Netzwerk nur so sicher ist wie die Geräte und Benutzer, die dem Netzwerk beitreten, seien Sie vorsichtig, wenn Sie den Netzwerkdeskriptor und die Einladungs-ID eines offenen Netzwerks freigeben.
Statische Benutzerliste
Für Spiele, die alle Spieler im Voraus kennen, z. B. ein Spiel, das durch Matchmaking ohne Nachfüllen erstellt wurde, ist eine statische Benutzerliste ein einfaches und effektives Muster. Dadurch können nur benutzer, die vor Beginn des Spiels identifiziert wurden, dem Netzwerk beitreten.
Erstellen Sie eine PartyInvitationConfiguration
Struktur, und fügen Sie dem Feld die bekannten Benutzer hinzu entityIds
. Übergeben Sie diese Struktur an PartyManager::CreateNewNetwork()
. Teilen Sie nach Abschluss der Netzwerkerstellung den Netzwerkdeskriptor und die Einladungs-ID, um Benutzern die Teilnahme zu ermöglichen.
1:1-Einladungen
In einem Spiel, in dem vorhandene Benutzer andere Benutzer einzeln einladen, ist ein 1:1-Einladungsmuster effektiv und einfach.
Erstellen Sie eine PartyInvitationConfiguration
Struktur, und fügen Sie dem Feld nur den Ersteller hinzu entityIds
. Übergeben Sie diese Struktur an PartyManager::CreateNewNetwork()
. Sobald der Ersteller eine Verbindung mit dem Netzwerk herstellt, kann die anfängliche Einladung optional widerrufen werden. Alternativ kann der Ersteller des Netzwerks ein offenes Netzwerk erstellen und dann die erste Einladung widerrufen, sobald die Verbindung hergestellt wird.
Erstellen Sie eine weitere PartyInvitationConfiguration
Struktur für jeden Benutzer, der dem Netzwerk beitreten soll. Erstellen Sie Einladungen, indem Sie diese Strukturen an PartyNetwork::CreateInvitation()
übergeben. Geben Sie den Netzwerkdeskriptor zusammen mit der Einladungs-ID für die jeweilige Einladung für jeden Benutzer weiter. Wenn Benutzer beitreten, können sie dieses Muster wiederholen, um weitere Benutzer einzuladen.
Sobald ein Benutzer mitglied wird, kann seine spezifische Einladung optional widerrufen werden.
Freundesliste
Für Spiele, bei denen die Freunde jedes Benutzers problemlos beitreten können, ohne 1:1-Einladungen zu erstellen, können Einladungen erstellt werden, die die gesamten Freundeslisten der Benutzer enthalten.
Nach dem Herstellen einer Verbindung mit dem Netzwerk erstellt jeder Benutzer eine PartyInvitationConfiguration
Struktur und fügt jeden seiner Freunde der sozialen Plattform zu seinem entityIds
Feld hinzu. Übergeben Sie diese Struktur an PartyNetwork::CreateInvitation()
, und geben Sie den Netzwerkdeskriptor und die Einladungs-ID für Freunde weiter. Wenn sich die Freundesliste eines Benutzers ändert, sollte die Einladung widerrufen und eine neue Einladung mit der Neuen Freundesliste erstellt werden.
Dynamische einzelne Einladung
Viele Spiele verfügen über eine Lobby oder einen anderen externen Dienst, der steuert, wer einem bestimmten Netzwerk beitreten soll. Um ein Netzwerk mit dem externen Dienst synchron zu halten, kann ein dynamisches einzelnes Einladungsmuster verwendet werden. Dieses Muster verwendet eine einzelne Einladung mit einem bekannten Bezeichner.
Es gibt zwei Varianten dieses Musters. Entweder kann der externe Dienst einen einzelnen Benutzer auswählen, um Einladungen für das Netzwerk zu verwalten, oder er kann alle Benutzer auffordern, Einladungen zu verwalten. In beiden Fällen werden die Benutzer, die sich im Netzwerk befinden sollen, vom externen Dienst benachrichtigt, und die Benutzer versuchen, die aktuelle Einladung aufzuheben und eine neue Einladung mit demselben bekannten Bezeichner zu erstellen, der den neuen vollständigen Satz von Benutzern enthält.
Einzelbenutzerverwaltung
Wenn ein einzelner Benutzer für den Widerruf der aktuellen Einladung und das Erstellen der neuen Einladung verantwortlich ist, führt dies zu einem vorhersagbaren Besitz der Einladung. Der externe Dienst muss jedoch wie folgt vorgehen.
- Wählen Sie den Benutzer aus, der Einladungen verwalten soll.
- Wählen Sie einen neuen Benutzer aus, wenn der vorherige Benutzer das Netzwerk verlässt.
Gesamte Benutzerverwaltung
Wenn alle Benutzer versuchen, Einladungen zu verwalten, führt dies zu unvorhersehbarem Einladungsbesitz, verhindert aber, dass der externe Dienst einen einzelnen Benutzer auswählen muss. Stattdessen führt ein Benutzer auf jedem Gerät folgendes aus.
- Versuchen Sie, die aktuelle Einladung zu widerrufen. Bei der ersten Einladung versuchen alle Benutzer dies, aber nur eine ist erfolgreich. Bei anderen Einladungen kann nur der Benutzer, der die letzte Einladung erstellt hat, versuchen, sie zu widerrufen, da die Einladung für die anderen Benutzer nicht sichtbar ist.
- Versuchen Sie, eine neue Einladung zu erstellen. Da Einladungen eindeutige Bezeichner aufweisen müssen, ist nur einer der Benutzer erfolgreich. Dieser Benutzer muss die anderen benachrichtigen, dass er der neue Einladungsbesitzer ist, da die Einladung auf anderen Geräten nicht sichtbar ist.
- Wenn der Ersteller der aktuellen Einladung das erstellende Gerät verlässt, müssen alle Benutzer erneut versuchen, eine neue Einladung zu erstellen.
Wichtig
Wenn Sie eine Einladung widerrufen und eine neue Einladung mit demselben Bezeichner erstellen, gibt es ein kleines Zeitfenster, in dem die Einladungs-ID ungültig ist. Wenn Sie diesen Ansatz verwenden, ist es notwendig, den Aufruf von erneut zu PartyNetwork::AuthenticateLocalUser()
versuchen, wenn er nach einer angemessenen Wartezeit fehlschlägt.
Rolloffene Einladung
Bei Spielen, bei denen ein Wartebereich oder ein anderer externer Dienst steuert, wer einem bestimmten Netzwerk beitreten soll, ist das parallele Einladungsmuster eine Alternative zum dynamischen Einzeleinladungsmuster . In diesem Muster gibt es immer eine einzelne offene Einladung. Die Einladung wird widerrufen und mit einem neuen Bezeichner neu erstellt, wenn ein Benutzer, dem zuvor die Teilnahme gestattet wurde, aus der Benutzerliste des externen Diensts entfernt wird. Der Einladungsbezeichner verhält sich wie ein Kennwort und sollte auf ähnliche Weise geschützt sein. Das Muster kann in den folgenden Schritten implementiert werden:
- Der externe Dienst wählt ein Gerät zum Erstellen des Netzwerks aus und gibt die zu verwendende Einladungs-ID an.
- Der externe Dienst sendet die Einladungs-ID an alle anderen Benutzer, die dem Netzwerk beitreten sollen.
- Wenn ein neuer Benutzer dem Netzwerk beitreten soll, gibt der externe Dienst die aktuelle Einladungs-ID für diesen Benutzer weiter.
- Wenn ein Benutzer mit der aktuellen Einladung nicht mehr teilnehmen darf, muss der externe Dienst das Kennwort wie folgt ändern.
- Wählen Sie einen neuen Einladungsbezeichner aus.
- Fordern Sie an, dass ein oder alle Benutzer die aktuelle Einladung widerrufen und eine neue mit der ausgewählten Einladungs-ID erstellen. Eine Erläuterung der Einzelbenutzerverwaltung im Vergleich zur gesamten Benutzerverwaltung finden Sie unter Dynamische Einzeleinladung .
- Geben Sie die neue Einladungs-ID für alle Benutzer weiter, die nun dem Netzwerk beitreten dürfen.