1

У меня есть приложение WebApi, которое использует аутентификацию на предъявителя на основе Windows Azure Active Directory для аутентификации пользователей. После того, как пользователь будет аутентифицирован, я хочу запросить у Azure Graph Api дополнительную информацию о пользователе.Приобретение токена доступа с использованием JWT, используемого для AzureBearerAuthentication

У меня есть решение, которое работает, но кажется очень взломанным. Я прочитал заголовок авторизации и вырезать однонаправленную часть, а затем я использую AquireToken, чтобы получить новый маркер:

var authHeader = HttpContext.Current.Request.Headers["Authorization"]; 
var tokenMatch = Regex.Match(authHeader, @"(?<=^\s*bearer\s+).+$", RegexOptions.IgnoreCase); 

var result = authInfo.AuthContext.AcquireToken(resourceId, authInfo.Credential, 
    new UserAssertion(tokenMatch.Value)); 

return result.AccessToken; 

Там должен быть лучшим способом, но я пытался AcquireToken много различных перегрузок, и это было единственный способ заставить его работать. Я попробовал AcquireTokenSilent, который работает в моем клиентском приложении, потому что в TokenCache есть токен, но когда я пытаюсь использовать WebApi, не представляется возможным реализовать TokenCache.

ответ

5

Это действительно немного взломано :-) см. https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet, чтобы вы могли получить входящий токен через ClaimsPrincipal. Она сводится к прохождению TokenValidationParameters = new TokenValidationParameters{ SaveSigninToken = true } в опциях и извлечения в с вашего контроллера или фильтра кода через

var bootstrapContext = ClaimsPrincipal.Current.Identities.First().BootstrapContext as System.IdentityModel.Tokens.BootstrapContext; 
+0

Спасибо, это именно то, что мне не хватало. http://stackoverflow.com/questions/14083885/bootstrapcontext-is-null-on-claimsidentity/33827070#33827070 – Jaanus

Смежные вопросы