Esempio n. 1
0
        public void AuthenticatePlayerWithValidPlayFabSessionTicket()
        {
            var ticket = GetPlayerSessionTicket();

            var authServiceReq = new ExchangePlayFabTokenRequest {
                PlayfabToken = ticket
            };

            var authResult = _authServiceClient.ExchangePlayFabToken(authServiceReq);

            Assert.NotNull(authResult.PlayerIdentityToken);
        }
Esempio n. 2
0
        // this is the client implementation of ExchangePlayFabToken -- the server in this example is owned by Spatial and they have an implementation i cant access
        public override Task <ExchangePlayFabTokenResponse> ExchangePlayFabToken(ExchangePlayFabTokenRequest request,
                                                                                 ServerCallContext context)
        {
            UserAccountInfo userInfo;

            try
            {
                var authenticateTask = PlayFabServerAPI.AuthenticateSessionTicketAsync(
                    new AuthenticateSessionTicketRequest
                {
                    SessionTicket = request.PlayfabToken,
                });
                authenticateTask.Wait();
                userInfo = authenticateTask.GetAwaiter().GetResult().Result.UserInfo;
            }
            catch (Exception e)
            {
                Log.Error(e, "Failed to authenticate PlayFab ticket");
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Failed to authenticate PlayFab ticket"));
            }

            try
            {
                var playerIdentityToken = _authServiceClient.CreatePlayerIdentityToken(
                    new CreatePlayerIdentityTokenRequest
                {
                    PlayerIdentifier = userInfo.PlayFabId,
                    Provider         = "playfab",
                    ProjectName      = _project
                }
                    );

                _analytics.Send("player_token_exchanged", new Dictionary <string, string>
                {
                    { "provider", "PlayFab" },
                    { "spatialProjectId", _project }
                }, userInfo.PlayFabId);

                return(Task.FromResult(new ExchangePlayFabTokenResponse
                {
                    PlayerIdentityToken = playerIdentityToken.PlayerIdentityToken
                }));
            }
            catch (Exception e)
            {
                Log.Error(e, $"Failed to create player identity token for {userInfo.PlayFabId}");
                throw new RpcException(new Status(StatusCode.Internal,
                                                  $"Failed to create player identity token for {userInfo.PlayFabId}"));
            }
        }