Adal.NET приобретает токен для текущего приложения - PullRequest
0 голосов
/ 13 ноября 2018

Можно ли получить токен jwt для текущего приложения, не основанного на другом приложении Azure, или сохранить его в течение всего жизненного цикла входа в систему?

В моем приложении я аутентифицирую своего пользователя в Azureс Оуэном и OpenIdConnect.Аутентификация прошла успешно, и я получил токен от Azure.

В более поздних методах мне нужно передать токен в качестве параметра, поэтому теперь я сохраняю его в переменной сеанса, но срок его действия истекает раньше, и в результате получается пустая переменная.

Теперь я пытаюсь получить токен из Azure с помощью ADAL.

 string userObjectId = ((ClaimsIdentity)User.Identity).Claims.FirstOrDefault(c => c.ToString() == "http://schemas.microsoft.com/identity/claims/objectidentifier")?.Value;
 AuthenticationContext authContext = new AuthenticationContext(ConfigurationManager.AppSettings["ida:AADInstance"] + ConfigurationManager.AppSettings["ida:TenantId"], new TokenCache());
 ClientCredential credential = new ClientCredential(ConfigurationManager.AppSettings["ida:ClientId"], "client_secret"); 
 var result = authContext.AcquireTokenAsync(ConfigurationManager.AppSettings["ida:ClientId"], credential).Result.AccessToken;

Это приводит к ошибке:

{"error":"invalid_grant","error_description":"AADSTS50105: Application > 
'4337e286-7b84-4377-8843-82ea9504606b' is not assigned to a role for the application '4337e286-7b84-4377-8843-82ea9504606b'}

Для другихприложения, оно настроено с другим приложением, которое имеет разрешения для ресурса, но я не хочу зависеть от другого приложения для получения токена.

У кого-нибудь есть идея?

EDIT

Я следовал предложению @ Jean-MarcPrieur, но в строке

var accounts = await application.GetAccountsAsync();

он не возвращает учетные записи, которые приводят к пустому результату и accessToken.

1 Ответ

0 голосов
/ 13 ноября 2018

Здесь вы пытаетесь использовать поток учетных данных клиента (который требует, чтобы ваше приложение зарегистрировало разрешения для вызова веб-API, который вы хотите вызвать - разрешения администратора клиента).

Если выЧтобы получить доступ к ресурсам от имени пользователя, вам необходимо приобрести токен, чтобы приложение могло вызывать API от имени вошедшего в систему пользователя.Смотрите, например, этот пример: https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2/tree/aspnetcore2-2-signInAndCallGraph, который регистрирует пользователя и вызывает график. Это образец ASP.NET Core с использованием конечной точки Azure AD v2.0 (новейшие технологии).Если у вас есть другие ограничения, не стесняйтесь спрашивать.

...