Получение настраиваемого значения требования из токена на предъявителя (веб-API)

В моем проекте веб-API ASP.NET я использую авторизацию токена-носителя и добавил к нему несколько настраиваемых утверждений, например:

var authType = AuthConfig.OAuthOptions.AuthenticationType;
var identity = new ClaimsIdentity(authType);
identity.AddClaim(new Claim(ClaimTypes.Name, vm.Username));

// custom claim
identity.AddClaim(new Claim("CompanyID", profile.CompanyId.ToString()));

Могу ли я получить доступ к этому дополнительному значению заявки в контроллере без дополнительных обращений к базе данных?


person Impworks    schedule 27.10.2014    source источник


Ответы (1)


Конечно, внутри вашего защищенного контроллера вы делаете следующее:

 ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
 var customClaimValue = principal.Claims.Where(c => c.Type == "CompanyID").Single().Value;
person Taiseer Joudeh    schedule 27.10.2014
comment
Как я мог повторно использовать это более централизованно? Я использую сервисный уровень, который нуждается в этом customClaimValue. Все действия контроллера должны отправлять это значение в службу перед получением / отправкой данных. - person Steven Ryssaert; 07.03.2015
comment
Вы можете создать собственный фильтр, который запускается до того, как будет применен ваш метод действия. - person Taiseer Joudeh; 09.03.2015
comment
Спасибо, не знал, что можно получить текущий запрос в фильтре. Также у тебя там очень хороший блог, Тайзер! - person Steven Ryssaert; 09.03.2015
comment
Лично я делаю это в пользовательском промежуточном программном обеспечении owin на ранней стадии разработки. Тогда я могу получить доступ к CompanyID из owin откуда угодно. - person David Betz; 08.01.2016
comment
Как мы можем это сделать, когда сервер OWIN находится в проекте WebAPI, который мы используем для аутентификации из веб-проекта? У меня есть этот WebAPI, который централизует весь бизнес / аутентификацию для всех наших приложений, и у меня есть веб-сайт, который требует регулирования и использует API для получения токена на предъявителя. Но затем я хочу регулировать доступ к контроллерам на веб-сайте на основе полученного мной токена, который содержит такие утверждения, как Role, companyID и т. Д. - person Ashallar; 28.06.2018