Активное создание каталога Azure «Не реализовано» для аварийного восстановления управления API - PullRequest
2 голосов
/ 02 апреля 2019

Я следую этому руководству Аварийное восстановление управления 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, которая имеет реализацию, но требует больше параметров, чем Приведенный пример, я чувствую, что на правильном пути

Спасибо всем

1 Ответ

1 голос
/ 03 апреля 2019

Во-первых, шаги в Руководстве по документам Microsoft, на которое вы ссылаетесь , зарегистрируйте приложение Native в Azure AD, а затем используйте Delegated Permissions.Таким образом, есть код, чтобы предложить пользователю войти в систему и ввести свои учетные данные.

Теперь этот код будет отлично работать с консольным приложением .NET Framework ( Full ), но не с .NET Core.

static void Main(string[] args)
{
        var authenticationContext = new AuthenticationContext("https://login.microsoftonline.com/{tenant id}");
        var result = authenticationContext.AcquireTokenAsync("https://management.azure.com/", "{application id}", new Uri("{redirect uri}"), new PlatformParameters(PromptBehavior.Auto)).Result;

Основная проблема для .NET Core заключается в том, что он не обеспечивает возможности пользовательского интерфейса, поэтому интерактивные потоки не поддерживаются .NET Core.

Это также причина, по которой вы имелиудалить PromptBehavior.Auto из new PlatformParameters(PromptBehavior.Auto), поскольку это может привести к .NET Core.

Более подробную информацию можно найти в ссылках, указанных ниже:


С другой стороны, я знаю .NET CoreВ версии 3.0 появилась поддержка для настольных приложений Windows , но она все еще в предварительном просмотре.

В будущем интерактивный поток должен работать с .NET Core 3.0 и MSAL.NET (отличается от ADAL.NET ).

Подробнее здесь: ADAL неправильно поддерживает .NET Core 3

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...