Токен Adal.NET для текущего приложения

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

В своем приложении я аутентифицирую своего пользователя в Azure с помощью Owin и 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'}

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

Есть идея?

РЕДАКТИРОВАТЬ

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

var accounts = await application.GetAccountsAsync();

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
311
1

Ответы 1

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

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

Вы можете повторно использовать идентификатор приложения PowerShell, чтобы обойти требование регистрации.

Svend 14.11.2018 10:00

@Swend, это плохая практика. Каждое приложение должно иметь собственную регистрацию.

Jean-Marc Prieur 14.11.2018 14:55

@ Jean-MarcPrieur Можно ли это также использовать в .NET?

NiAu 04.12.2018 14:32

@NiAu: Я не понимаю вашего вопроса. Что можно использовать в .NET? Я предоставил ссылки .NET?

Jean-Marc Prieur 04.12.2018 19:17

Другие вопросы по теме