Как аутентифицировать с XboxLive с .NET Core ⇐ C#

Место общения программистов C#
Anonymous
Как аутентифицировать с XboxLive с .NET Core

Сообщение Anonymous »

Я вытаскивал свои волосы, пытаясь выяснить, что здесь не так. Ниже приведена моя попытка получить токен Xbox Live из токена Microsoft. Я постоянно получаю код ошибки 400. Я использую builder.services.addauthentication (). Addmicrosoftaccount () для настройки моего приложения.

Код: Выделить всё

builder.Services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
{
microsoftOptions.ClientId = builder.Configuration["Authentication:Microsoft:ClientId"];
microsoftOptions.ClientSecret = builder.Configuration["Authentication:Microsoft:ClientSecret"];
microsoftOptions.CallbackPath = "/User/Microsoft/Auth/Callback";

microsoftOptions.AuthorizationEndpoint = "https://login.live.com/oauth20_authorize.srf";
microsoftOptions.TokenEndpoint = "https://login.live.com/oauth20_token.srf";

microsoftOptions.Scope.Clear();

microsoftOptions.Scope.Add("email");
microsoftOptions.Scope.Add("openid");
microsoftOptions.Scope.Add("profile");
microsoftOptions.Scope.Add("User.Read");
microsoftOptions.Scope.Add("XboxLive.signin");

microsoftOptions.SaveTokens = true;
});
< /code>
Из кнопки входа в систему выполняется ниже. (поставщик - Microsoft 
)

Код: Выделить всё

var redirectUrl = Url.Page("./ExternalLogin", pageHandler: "Callback", values: new { returnUrl });
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl);
_logger.LogInformation("Redirecting to {Provider} for external login. Callback: {RedirectUrl}", provider, redirectUrl);
return new ChallengeResult(provider, properties);
Как только пользователь подписывает, используя Microsoft, токен хранится в AuthenticationProperties () , а затем перенаправлен на My/linkmineCraft Endpoint.

Код: Выделить всё

var props = new AuthenticationProperties();
props.StoreTokens(info.AuthenticationTokens); // Store tokens from Microsoft login
props.IsPersistent = false;

await _signInManager.SignInAsync(user, props, info.LoginProvider); // Use the specific external login provider scheme
< /code>
Вот где возникает проблема (и я не уверен, почему) имейте в виду, я пробовал много разных форматов анализа этого, это только последний, который я попробовал. < /p>
var microsoftAccessToken = await HttpContext.GetTokenAsync("Microsoft", "access_token");
var client = _httpClientFactory.CreateClient("XboxApiClient");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var xasuRequest = new
{
Properties = new { AuthMethod = "RPS", SiteName = "user.auth.xboxlive.com", RpsTicket = $"d={microsoftAccessToken}" },
RelyingParty = "http://auth.xboxlive.com",
TokenType = "JWT"
};
var serializerOptions = new JsonSerializerOptions
{
PropertyNamingPolicy = null
};
HttpResponseMessage xasuResponseMsg = await client.PostAsJsonAsync(
"https://user.auth.xboxlive.com/user/authenticate",
xasuRequest,
serializerOptions
);
< /code>
xasuResponseMsg
возвращает 400 каждый раз. Я подтвердил, что у моего приложения есть необходимые прицелы (и я совершенно уверен, что это снизит транзакцию в первом обратном вызове, если так)
Любая помощь в этом была бы очень оценена. /> Я обнаружил, что когда я делаю весь процесс вручную, используя почтальон или аналогичный, он работает нормально. Таким образом, проблема должна лежать где -то в рамках работы Microsoft Account Account Account Setup.>

Подробнее здесь: https://stackoverflow.com/questions/796 ... h-net-core

Вернуться в «C#»