Мне нужно получить UserId из системы авторизации пользователей Asp.Net, потому что большинство моих данных хранится в SQL и использует UserId в качестве маркера, который пользователь владеет этими данными. Используя Owin OAuth 2.0, я не могу получить UserId с помощью Identity, он возвращает null
. Так я пришел к этому решению:Можете ли вы сохранить UserId внутри токена Owin OAUTH 2?
Токен провайдера
identity.AddClaim(new Claim("user_id", user.Id));
API
ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
var userName = principal.Claims.Where(c => c.Type == "user_id").Single().Value;
Simpler кода API
var userName = ClaimsPrincipal.Current.Claims.First(c => c.Type == "user_id").Value;
Этот подход подходит для корпоративного бизнес-приложения, безопасен, безопасен и прочен? Или вы, может быть, посоветуете что-нибудь еще?
Мне просто не нравится идея пропуска UserId внутри токена, если эта функция (возможно) предоставлена Microsoft.AspNet.Identity (сама по себе .NET), но поскольку я не мог заставить ее работать, это мой единственный вариант на данный момент.
В любом случае, я частично использую код от this great tutorial repository. Как вы можете видеть, этот контроллер прокомментировал строки, которые используют Identity для получения UserId. Но это не работает для меня, поэтому я использую другую прокомментированную строку, в которой используются утверждения.
где вы положили эти две строки кода, в контроллере или фильтр? –
В контроллере (ApiController) – EwanCoder
Каждый контроллер будет иметь свойство 'User', поэтому измените свою первую строку кода:' ClaimsPrincipal main = User as ClaimPrincipal; 'затем он работает –