Я тестировал некоторый код для входа пользователей в свои учетные записи Microsoft / school / work, используя необработанные HttpRequestMessage и HttpResponseMessage. Я знаю, что для этого есть библиотеки, но я хочу также протестировать и необработанный подход (особенно использование токенов refre sh), при этом ища подходящую библиотеку для его обработки. В настоящее время я изучаю аутентификацию, с ограниченными знаниями ASP .NET / Core.
Я следую этому руководству: https://docs.microsoft.com/en-us/graph/auth-v2-user Я только что изменил SignIn () метод в AccountController в примере проекта, который использовал более высокоуровневые библиотеки для входа. Я запрашиваю код авторизации.
Код SignIn ():
public void SignIn()
{
using (var httpClient = new HttpClient())
{
try
{
var tenant = "my tenant id";
var clientId = ConfigurationManager.AppSettings["ida:AppID"];
var responseType = "id_token+code";
var redirectURI = ConfigurationManager.AppSettings["ida:RedirectUri"];
var responseMode = "form_post";//query";
var appScopes = ConfigurationManager.AppSettings["ida:AppScopes"];
var scopes = $"openid profile offline_access {appScopes}";
var state = "12345";
//var prompt = "consent";
var url = string.Format("https://login.microsoftonline.com/{0}/oauth2/v2.0/authorize", tenant);
var body = string.Format("client_id={1}&response_type={2}&redirect_uri={3}&response_mode={4}&scope={5}&state={6}", tenant, clientId, responseType, redirectURI, responseMode, scopes, state);
var request = new HttpRequestMessage(HttpMethod.Post, url);
request.Content = new StringContent(body, Encoding.UTF8, "application/x-www-form-urlencoded");
var response = httpClient.SendAsync(request, HttpCompletionOption.ResponseContentRead).Result;
var content = response.Content.ReadAsStringAsync().Result;
}
catch (Exception ex)
{
}
}
//if (!Request.IsAuthenticated)
//{
// // Signal OWIN to send an authorization request to Azure
// Request.GetOwinContext().Authentication.Challenge(
// new AuthenticationProperties { RedirectUri = "/" },
// OpenIdConnectAuthenticationDefaults.AuthenticationType);
//}
}
Я просто возвращаю void из метода сейчас, потому что я не уверен, что мне следует возвращать.
Отладка и, глядя на переменную ответа, код состояния равен 200 и содержит некоторую другую информацию. Однако содержимое HttpResponseMessage, когда я вставляю его в файл и открываю в браузере, отображает (или перенаправляет на) https://login.microsoftonline.com/cookiesdisabled, которое показывает сообщение о том, что я не могу войти в систему. потому что мой браузер блокирует куки. Тем не менее, я не думаю, что это действительно так.
Как я могу решить эту проблему и заставить пользователя войти в систему и согласиться, и получить код авторизации?
Я не мог на самом деле найдите любой пример в ASP. NET, который использует этот необработанный подход. Разве это не рекомендуется?