in Microsoft.Xbox.Service.DevTools/Authentication/AuthClient.cs [168:227]
protected async Task<XasTokenResponse> FetchXstsToken(string msaToken, string sandbox)
{
// Get XASU token
XasTokenResponse token = null;
using (var tokenRequest = new XboxLiveHttpRequest())
{
HttpResponseMessage response = (await tokenRequest.SendAsync(() =>
{
var requestMsg = new HttpRequestMessage(HttpMethod.Post, ClientSettings.Singleton.XASUEndpoint);
XasuTokenRequest xasuTokenRequest = new XasuTokenRequest();
xasuTokenRequest.Properties["SiteName"] = "user.auth.xboxlive.com";
xasuTokenRequest.Properties["RpsTicket"] = $"d={msaToken}";
var requestContent = JsonConvert.SerializeObject(xasuTokenRequest);
requestMsg.Content = new StringContent(requestContent);
requestMsg.Content.Headers.ContentType.MediaType = "application/json";
return requestMsg;
})).Response;
// Get XASU token with MSA token
response.EnsureSuccessStatusCode();
Log.WriteLog("Fetch XASU token succeeded.");
token = await response.Content.DeserializeJsonAsync<XasTokenResponse>();
}
// Get XSTS token
using (var tokenRequest = new XboxLiveHttpRequest())
{
HttpResponseMessage response = (await tokenRequest.SendAsync(() =>
{
var requestMsg = new HttpRequestMessage(HttpMethod.Post, ClientSettings.Singleton.XSTSEndpoint);
XstsTokenRequest xstsTokenRequest = new XstsTokenRequest(sandbox)
{
RelyingParty = "http://xboxlive.com"
};
xstsTokenRequest.Properties["UserTokens"] = new[] { token.Token };
var requestContent = JsonConvert.SerializeObject(xstsTokenRequest);
requestMsg.Content = new StringContent(requestContent);
requestMsg.Content.Headers.ContentType.MediaType = "application/json";
return requestMsg;
})).Response;
// Get XASU token with MSA token
response.EnsureSuccessStatusCode();
Log.WriteLog("Fetch XSTS token succeeded.");
token = await response.Content.DeserializeJsonAsync<XasTokenResponse>();
}
string key = AuthTokenCache.GetCacheKey(this.AuthContext.UserName, this.AuthContext.AccountSource, this.AuthContext.Tenant, string.Empty, sandbox);
this.XTokenCache.Value.UpdateToken(key, token);
return token;
}