Можно ли получить токен 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.





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