Согласно этой документации:
Документация ASP.NET Core 2.1
Я должен иметь доступ к идентификатору пользователя, используя ControllerBase.User или HttpContext.Use r.
По ссылке выше:
«Получение идентификатора текущего пользователя из коллекции сервисов DI приложения также более тестируемо, поскольку тестовые идентификаторы могут быть легко введены».
Как я понимаю, я должен внедрить идентификационную информацию с помощью внедрения зависимостей в Startup.cs или, возможно, в конструктор контроллера.
Однако, после бесконечных часов расследования, я не могу найти процедуру.
Следующие шаги описывают мой сценарий. Я надеюсь, что кто-то может направить меня в правильном направлении.
1) Используя Visual Studio 2017, создайте проект веб-API ASPNET.core со следующими параметрами:
- Тип: API
- Включить поддержку Docker: нет
- Аутентификация: без аутентификации
- Настройка для HTTPS: да
2) Добавьте AuthDetailsController.cs в папки Controllers со следующим кодом:
using System;
using System.Collections.Generic;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace CoreWebApi.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class AuthDetailsController : Controller
{
[HttpGet]
public JsonResult Get()
{
var r = new Dictionary<String, Object>();
r.Add("User.Identities", User.Identities);
r.Add("User.Claims", User.Claims);
r.Add("HttpContext.User.Identities", HttpContext.User.Identities);
r.Add("HttpContext.User.Claims", HttpContext.User.Claims);
return Json(r );
}
}
}
3) Развертывание в Azure как новое приложение
4) Перейдите к https://[site_name].azurewebsites.net/api/AuthDetails
5) Нет информации о личности пользователя, поскольку доступ является анонимным:
{"User.Identities":[{"authenticationType":null,"isAuthenticated":false,"actor":null,"bootstrapContext":null,"claims":[],"label":null,"name":null,"nameClaimType":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","roleClaimType":"http://schemas.microsoft.com/ws/2008/06/identity/claims/role"}],"User.Claims":[],"HttpContext.User.Identities":[{"authenticationType":null,"isAuthenticated":false,"actor":null,"bootstrapContext":null,"claims":[],"label":null,"name":null,"nameClaimType":"http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name","roleClaimType":"http://schemas.microsoft.com/ws/2008/06/identity/claims/role"}],"HttpContext.User.Claims":[]}
6) Включите аутентификацию Azure со следующими параметрами:
- Действие, выполняемое, когда запрос не прошел проверку подлинности: вход в Azure Active Directory.
- Настройка Azure Active Directory: экспресс-режим
7) Открыть снова https://[site_name].azurewebsites.net/api/AuthDetails
8) Вы будете перенаправлены на страницу входа
9) После успешного входа в систему не будет идентифицирующей информации ни в ControllerBase.User, ни в HttpContext.User. Ответ такой же, как и до включения аутентификации.