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)); }
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); }
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)); }
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); }