Я следую этому руководству Аварийное восстановление управления API на документах Microsoft, я настроил пользователя моего активного каталога и получил значения из конфигурации (как предложено), а затем скопировал и вставил код из примера
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/xxxx");
var result = await authenticationContext.AcquireTokenAsync("https://management.azure.com/", "xxx", new Uri("https://resource.com"), new PlatformParameters());
Кажется, что предложенный new PlatformParameters(PromptBehavior.Auto)
не работает, так как для этого объекта больше не требуется передавать параметр в конструктор, я получаю исключение NotImplemented
:
System.NotImplementedException : The method or operation is not implemented.
at Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters.GetCoreUIParent()
at Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.AcquireTokenInteractiveHandler.CreateWebUIOrNull(IPlatformParameters parameters)
at Microsoft.IdentityModel.Clients.ActiveDirectory.Internal.Flows.AcquireTokenInteractiveHandler..ctor(RequestData requestData, Uri redirectUri, IPlatformParameters platformParameters, UserIdentifier userId, String extraQueryParameters, String claims)
at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireTokenCommonAsync(String resource, String clientId, Uri redirectUri, IPlatformParameters parameters, UserIdentifier userId, String extraQueryParameters, String claims)
at Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireTokenAsync(String resource, String clientId, Uri redirectUri, IPlatformParameters parameters)
Мне кажется, что значения для арендатора, идентификатор приложения может быть неправильным, поэтому я опишу в меру своих возможностей, откуда я получил эти значения:
Арендатор ID:
- В Azure Active Directory выберите параметр «регистрации приложений»
- Найдите и нажмите «Конечные точки»
- скопировать конечную точку oauth
- возьмите направляющую в URL и вставьте ее в
var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/{here}");
Идентификатор приложения
- В опции активного каталога Azure выберите опцию "регистрации приложений"
- Найдите и щелкните пользователя с необходимыми разрешениями
- Нажмите настройки
- Нажмите «Свойства» в списке
- Скопируйте "идентификатор приложения"
- вставить
var result = await authenticationContext.AcquireTokenAsync("https://management.azure.com/", "{here}", new Uri("https://resource.com"), new PlatformParameters());
Редактировать: просматривая декомпилированный источник, я на самом деле нашел причину своих проблем, кажется, что он обращается к классу параметров платформы к GetCoreUiParent
, который просто не реализован:
public class PlatformParameters : IPlatformParameters
{
internal CoreUIParent GetCoreUIParent()
{
throw new NotImplementedException();
}
}
Редактировать 2 - Я чувствую себя немного идиотом здесь, но кажется, что новая версия этого нюгета была опубликована в качестве предварительного просмотра, у него есть новая версия класса PlatformParameters
, которая имеет реализацию, но требует больше параметров, чем Приведенный пример, я чувствую, что на правильном пути
Спасибо всем