コード例 #1
0
        public async Task <SignInResult> SignInImpl(bool showUI, bool forceRefresh)
        {
            await this.Provider.InitializeProvider(this.CreationContext);

            // Try get the default system user for single user application
            if (!IsMultiUserApplication)
            {
                var allUser = await Windows.System.User.FindAllAsync();

                var validSysUser = allUser.Where(user => (user.Type != Windows.System.UserType.LocalGuest || user.Type != Windows.System.UserType.RemoteGuest)).ToList();
                if (validSysUser.Count > 0)
                {
                    this.CreationContext = validSysUser[0];
                }
            }

            TokenAndSignatureResult result = await this.InternalGetTokenAndSignatureHelperAsync("GET", this.AuthConfig.XboxLiveEndpoint, "", null, showUI, false);

            SignInStatus status = ConvertWebTokenRequestStatus(result.TokenRequestResultStatus);

            if (status != SignInStatus.Success)
            {
                return(new SignInResult(status));
            }

            if (string.IsNullOrEmpty(result.Token))
            {
                // TODO: set presence
            }

            this.UserSignedIn(result.XboxUserId, result.Gamertag, result.AgeGroup, result.Privileges, result.WebAccountId);

            return(new SignInResult(status));
        }
コード例 #2
0
        private async Task <TokenAndSignatureResult> InternalGetTokenAndSignatureHelperAsync(string httpMethod, string url, string headers, byte[] body, bool promptForCredentialsIfNeeded, bool forceRefresh)
        {
            if (this.provider == null)
            {
                throw new Exception("Xbox Live identity provider is not initialized");
            }

            var request = new WebTokenRequest(this.provider);

            request.Properties.Add("HttpMethod", httpMethod);
            request.Properties.Add("Url", url);
            if (!string.IsNullOrEmpty(headers))
            {
                request.Properties.Add("RequestHeaders", headers);
            }
            if (forceRefresh)
            {
                request.Properties.Add("ForceRefresh", "true");
            }

            if (body != null && body.Length > 0)
            {
                request.Properties.Add("RequestBody", Encoding.UTF8.GetString(body));
            }

            request.Properties.Add("Target", this.AuthConfig.RPSTicketService);
            request.Properties.Add("Policy", this.AuthConfig.RPSTicketPolicy);
            if (promptForCredentialsIfNeeded)
            {
                string pfn = Windows.ApplicationModel.Package.Current.Id.FamilyName;
                request.Properties.Add("PackageFamilyName", pfn);
            }

            TokenAndSignatureResult tokenAndSignatureReturnResult = null;
            var tokenResult = await RequestTokenFromIdpAsync(promptForCredentialsIfNeeded, request);

            try
            {
                tokenAndSignatureReturnResult = this.ConvertWebTokenRequestResult(tokenResult);
                if (tokenAndSignatureReturnResult != null && this.IsSignedIn && tokenAndSignatureReturnResult.XboxUserId != this.XboxUserId)
                {
                    this.UserSignedOut();
                    throw new Exception("User has switched"); // todo: auth_user_switched
                }
            }
            catch (Exception)
            {
                // log
            }

            return(tokenAndSignatureReturnResult);
        }
コード例 #3
0
        public async Task <SignInResult> SignInImpl(bool showUI, bool forceRefresh)
        {
            await this.InitializeProviderAsync();

            TokenAndSignatureResult result = await this.InternalGetTokenAndSignatureHelperAsync("GET", this.AuthConfig.XboxLiveEndpoint, "", null, showUI, false);

            SignInStatus status = ConvertWebTokenRequestStatus(result.TokenRequestResult.ResponseStatus);

            if (status != SignInStatus.Success)
            {
                return(new SignInResult(status));
            }

            if (string.IsNullOrEmpty(result.Token))
            {
                // todo: set presence
            }

            this.UserSignedIn(result.XboxUserId, result.Gamertag, result.AgeGroup, result.Privileges, result.WebAccountId);

            return(new SignInResult(status));
        }
コード例 #4
0
        private TokenAndSignatureResult InternalGetTokenAndSignatureHelper(string httpMethod, string url, string headers, byte[] body, bool promptForCredentialsIfNeeded, bool forceRefresh)
        {
            if (this.provider == null)
            {
                throw new Exception("Xbox Live identity provider is not initialized");
            }

            var request = new WebTokenRequest(this.provider);

            request.Properties.Add("HttpMethod", httpMethod);
            request.Properties.Add("Url", url);
            if (!string.IsNullOrEmpty(headers))
            {
                request.Properties.Add("RequestHeaders", headers);
            }
            if (forceRefresh)
            {
                request.Properties.Add("ForceRefresh", "true");
            }

            if (body != null && body.Length > 0)
            {
                request.Properties.Add("RequestBody", Encoding.UTF8.GetString(body));
            }

            request.Properties.Add("Target", this.AuthConfig.RPSTicketService);
            request.Properties.Add("Policy", this.AuthConfig.RPSTicketPolicy);
            if (promptForCredentialsIfNeeded)
            {
                var uiSettings = XboxLiveAppConfiguration.Instance.AppSignInUISettings;

                string pfn = Windows.ApplicationModel.Package.Current.Id.FamilyName;
                request.Properties.Add("PackageFamilyName", pfn);

                if (uiSettings.Enabled())
                {
                    if (uiSettings.BackgroundHexColor.Length != 0)
                    {
                        request.Properties.Add("PreferredColor", uiSettings.BackgroundHexColor);
                    }

                    if (uiSettings.TitleCategory == SignInUIGameCategory.Casual)
                    {
                        request.Properties.Add("CasualGame", "");
                    }

                    if (uiSettings.BackgroundImage.Length != 0)
                    {
                        request.Properties.Add("TitleUpsellImage", uiSettings.BackgroundImage);
                    }

                    var featureCount = uiSettings.EmphasisFeatures.Count;
                    if (featureCount > 0)
                    {
                        featureCount = Math.Min(3, featureCount);
                        string bullets = "";
                        foreach (var feature in uiSettings.EmphasisFeatures)
                        {
                            bullets += feature.ToString() + ",";
                        }

                        request.Properties.Add("TitleUpsellFeatures", bullets);
                    }
                }
            }

            TokenAndSignatureResult tokenAndSignatureReturnResult = null;
            var tokenResult = this.RequestTokenFromIDP(XboxLiveContextSettings.Dispatcher, promptForCredentialsIfNeeded, request);

            try
            {
                tokenAndSignatureReturnResult = this.ConvertWebTokenRequestResult(tokenResult);
                if (tokenAndSignatureReturnResult != null && this.IsSignedIn && tokenAndSignatureReturnResult.XboxUserId != this.XboxUserId)
                {
                    this.UserSignedOut();
                    throw new Exception("User has switched"); // todo: auth_user_switched
                }
            }
            catch (Exception e)
            {
                // log
            }

            return(tokenAndSignatureReturnResult);
        }