Как получить текущего пользователя в безопасном действии ApiController, не передавая userName или userId в качестве параметра?
Мы предполагаем, что это доступно, потому что мы находимся в безопасном действии. Находиться в безопасном действии означает, что пользователь уже прошел аутентификацию и у запроса есть токен-носитель. Учитывая, что WebApi авторизовал пользователя, может быть встроенный способ доступа к userId без необходимости передавать его в качестве параметра действия.
c#
asp.net
asp.net-web-api
asp.net-identity
Шон Латтин
источник
источник
Ответы:
В WebApi 2 вы можете использовать
RequestContext.Principal
из метода ApiControllerисточник
using Microsoft.AspNet.Identity;
Вы также можете получить доступ к принципалу, используя
User
свойство onApiController
.Итак, следующие два утверждения в основном одинаковы:
источник
Подсказка заключается в автоматически созданном контроллере учетных записей Webapi2.
Это свойство с геттером определено как
и чтобы получить UserManager - в WebApi2 -do as Romans (читается как AccountController)
Это должно быть совместимо в IIS и в режиме собственного хоста.
источник
Ни одно из приведенных выше предложений не помогло мне. Следующее сделал!
Думаю, существует множество сценариев, и этот сработал для меня. В моем сценарии использовались интерфейс AngularJS и серверное приложение Web API 2, оба работали под IIS. Мне пришлось настроить оба приложения на запуск исключительно под Windows Authentication.
Нет необходимости передавать какую-либо информацию о пользователе. Браузер и IIS обмениваются учетными данными вошедшего в систему пользователя, и веб-API имеет доступ к учетным данным пользователя по запросу (я полагаю, из IIS).
источник
Ответ Карана Бхандари хорош, но добавленный в проект AccountController, скорее всего, является файлом
Mvc.Controller
. Для того, чтобы преобразовать его ответ для использования в изменении ApiControllerHttpContext.Current.GetOwinContext()
кRequest.GetOwinContext()
и убедитесь , что вы добавили следующие 2using
заявления:источник
В .Net Core используется
User.Identity.Name
для получения заявки на имя пользователя.источник
User.Identity.Name
получает значение утверждения имени . Это не относится к Active Directory.Если вы используете Asp.Identity UseManager, он автоматически устанавливает значение
на основе IdentityUser, который вы используете при создании IdentityDbContext .
Если когда-либо вы реализуете настраиваемую таблицу пользователей и аутентификацию на предъявителя токена owin, пожалуйста, проверьте мой ответ.
Как получить контекст пользователя во время вызовов веб-API?
Надеюсь, это все еще помогает. :)
источник
Или на основе комментария Даррела Миллера, возможно, сначала используйте это, чтобы получить HttpContext.
Смотрите также:
Как получить доступ к HTTPContext из действия веб-API
источник