Migrar aplicativos iOS que usam o Microsoft Authenticator do ADAL.NET para o MSAL.NET

Você tem usado a Biblioteca de Autenticação do Ative Directory do Azure para .NET (ADAL.NET) e o agente iOS. Agora é hora de migrar para a Biblioteca de Autenticação da Microsoft para .NET (MSAL.NET), que suporta o broker no iOS a partir da versão 4.3.

Por onde começar? Este artigo ajuda você a migrar seu aplicativo Xamarin iOS da ADAL para a MSAL.

Pré-requisitos

Este artigo pressupõe que você já tenha um aplicativo Xamarin iOS integrado ao corretor iOS. Se não o fizer, mova diretamente para MSAL.NET e comece a implementação do broker lá. Para obter informações sobre como invocar o agente iOS em MSAL.NET com um novo aplicativo, consulte esta documentação.

Fundo

O que são corretores?

Brokers são aplicativos fornecidos pela Microsoft no Android e iOS. (Veja o Aplicação Microsoft Authenticator no iOS e Android e a aplicação Portal da Empresa do Intune no Android.)

Permitem:

Migrar da ADAL para a MSAL

Etapa 1: Habilitar o broker

Código ADAL atual:Contrapartida MSAL:
Em ADAL.NET, o suporte ao broker foi habilitado por contexto de autenticação. Está desativada por predefinição. Você tinha que definir um

useBroker sinalizar para true no PlatformParameters construtor para chamar o corretor:

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

Além disso, no código específico da plataforma, neste exemplo, no renderizador de página para iOS, defina o useBroker sinalizar para true:

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

Em seguida, inclua os parâmetros na chamada de token de aquisição:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
No MSAL.NET, o suporte ao broker é habilitado por PublicClientApplication. Está desativada por predefinição. Para habilitá-lo, use o botão

WithBroker() (definido como true por padrão) para chamar o broker:

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithReplyUri(redirectUriOnIos)
                .Build();

Na chamada de token de aquisição:

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Etapa 2: Definir um UIViewController()

No ADAL.NET, você passou em um UIViewController como parte do PlatformParameters. (Veja o exemplo na Etapa 1.) Além MSAL.NET, para dar mais flexibilidade aos desenvolvedores, uma janela de objeto é usada, mas não é necessária no uso regular do iOS. Para usar o broker, defina a janela do objeto para enviar e receber respostas do broker.

Código ADAL atual:Contrapartida MSAL:
Um UIViewController é passado para

PlatformParameters na plataforma específica para iOS.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
No MSAL.NET, você faz duas coisas para definir a janela de objeto para iOS:
  1. Em AppDelegate.cs, definido App.RootViewController como um novo UIViewController(). Essa atribuição garante que haja um UIViewController com a chamada para o broker. Se não estiver definido corretamente, poderá receber este erro: "uiviewcontroller_required_for_ios_broker":"UIViewController is null, so MSAL.NET cannot invoke the iOS broker. See https://aka.ms/msal-net-ios-broker"
  2. Na chamada AcquireTokenInteractive, use .WithParentActivityOrWindow(App.RootViewController)e passe a referência para a janela de objeto que você usará.

Por exemplo:

Em App.cs:

   public static object RootViewController { get; set; }

Em AppDelegate.cs:

   LoadApplication(new App());
   App.RootViewController = new UIViewController();

Na chamada de token de aquisição:

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Etapa 3: Atualizar o AppDelegate para lidar com o retorno de chamada

Tanto a ADAL quanto a MSAL chamam o broker, e o broker, por sua vez, chama de volta para seu aplicativo por meio do OpenUrl método da AppDelegate classe. Para obter mais informações, consulte esta documentação.

Não há alterações aqui entre ADAL.NET e MSAL.NET.

Etapa 4: Registrar um esquema de URL

ADAL.NET e MSAL.NET usam URLs para invocar o broker e retornar a resposta do broker de volta ao aplicativo. Registe o esquema de URL no ficheiro da Info.plist sua aplicação da seguinte forma:

Código ADAL atual:Contrapartida MSAL:
O esquema de URL é exclusivo para seu aplicativo. O

CFBundleURLSchemes nome deve incluir

msauth.

como um prefixo, seguido pelo seu CFBundleURLName

Por exemplo: $"msauth.(BundleId")

 <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.xforms</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>msauth.com.yourcompany.xforms</string>
        </array>
      </dict>
    </array>

Nota

Esse esquema de URL torna-se parte do URI de redirecionamento usado para identificar exclusivamente o aplicativo quando ele recebe a resposta do broker.

Etapa 5: Adicionar o identificador do broker à seção LSApplicationQueriesSchemes

ADAL.NET e MSAL.NET ambos usam -canOpenURL: para verificar se o broker está instalado no dispositivo. Adicione o identificador correto para o broker iOS à seção LSApplicationQueriesSchemes do arquivo info.plist da seguinte maneira:

Código ADAL atual:Contrapartida MSAL:
Utilizações

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
Utilizações

msauthv2

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauthv2</string>
     <string>msauthv3</string>
</array>

Etapa 6: Registrar seu URI de redirecionamento no portal do Azure

ADAL.NET e MSAL.NET adicionam um requisito extra no URI de redirecionamento quando ele tem como alvo o corretor. Registre o URI de redirecionamento com seu aplicativo no portal do Azure.

Código ADAL atual:Contrapartida MSAL:

"<app-scheme>://<your.bundle.id>"

Exemplo:

mytestiosapp://com.mycompany.myapp

$"msauth.{BundleId}://auth"

Exemplo:

public static string redirectUriOnIos = "msauth.com.yourcompany.XForms://auth";

Para obter mais informações sobre como registrar o URI de redirecionamento no portal do Azure, consulte Etapa 7: adicionar um URI de redirecionamento ao registro do seu aplicativo.

Etapa 7: Definir o Entitlements.plist

Habilite o acesso às chaves no arquivo Entitlements.plist :

 <key>keychain-access-groups</key>
    <array>
      <string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
    </array>

Para obter mais informações sobre como habilitar o acesso às chaves, consulte Habilitar o acesso às chaves.

Próximos passos

Saiba mais sobre as considerações específicas do Xamarin iOS com o MSAL.NET.