Share via


A Microsoft Authenticator vagy a Intune Céges portál használata Xamarin-alkalmazásokban

Android és iOS rendszeren az olyan közvetítők, mint a Microsoft Authenticator és az Android-specifikus Microsoft Intune Céges portál engedélyezik:

  • Egyszeri bejelentkezés (SSO):: A felhasználóknak nem kell bejelentkezni az egyes alkalmazásokba.
  • Eszközazonosítás: A közvetítő hozzáfér az eszköztanúsítványhoz. Ez a tanúsítvány a munkahelyhez való csatlakozáskor jön létre az eszközön.
  • Alkalmazásazonosítás ellenőrzése: Amikor egy alkalmazás meghívja a közvetítőt, átadja az átirányítási URL-címét. A közvetítő ellenőrzi az URL-címet.

Ezen funkciók egyikének engedélyezéséhez használja a WithBroker() paramétert, amikor meghívja a metódust PublicClientApplicationBuilder.CreateApplication . A .WithBroker() paraméter alapértelmezés szerint igaz értékre van állítva.

A közvetítőalapú hitelesítés beállítása a Microsoft Authentication Library for .NET-ben (MSAL.NET) platformonként változik:

Közvetített hitelesítés iOS-hez

Az alábbi lépésekkel engedélyezheti, hogy a Xamarin.iOS-alkalmazás kommunikáljon a Microsoft Authenticator alkalmazással. Ha iOS 13-at céloz meg, érdemes elolvasnia az Apple kompatibilitástörő API-változását.

1. lépés: Közvetítői támogatás engedélyezése

Engedélyeznie kell a közvetítő támogatását az egyes példányok PublicClientApplicationesetében. A támogatás alapértelmezés szerint le van tiltva. A létrehozáskor PublicClientApplicationPublicClientApplicationBuilderhasználja a paramétert az WithBroker() alábbi példában látható módon. A WithBroker() paraméter alapértelmezés szerint igaz értékre van állítva.

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithReplyUri(redirectUriOnIos) // $"msauth.{Bundle.Id}://auth" (see step 6 below)
                .Build();

2. lépés: Kulcskarika-hozzáférés engedélyezése

A kulcskarika-hozzáférés engedélyezéséhez rendelkeznie kell az alkalmazás kulcskarika-hozzáférési csoportával. Az API-val WithIosKeychainSecurityGroup() beállíthatja a kulcskarika-hozzáférési csoportot az alkalmazás létrehozásakor:

var builder = PublicClientApplicationBuilder
     .Create(ClientId)
     .WithIosKeychainSecurityGroup("com.microsoft.adalcache")
     .Build();

További információ: Kulcskarika-hozzáférés engedélyezése.

3. lépés: Az AppDelegate frissítése a visszahívás kezeléséhez

Amikor MSAL.NET meghívja a közvetítőt, a közvetítő visszahívja az alkalmazást az OpenUrlAppDelegate osztály metódusán keresztül. Mivel az MSAL megvárja a közvetítő válaszát, az alkalmazásnak együtt kell működnie a MSAL.NET visszahívásához. Az együttműködés engedélyezéséhez frissítse az AppDelegate.cs fájlt, hogy felülbírálja az alábbi módszert.

public override bool OpenUrl(UIApplication app, NSUrl url,
                             string sourceApplication,
                             NSObject annotation)
{
    if (AuthenticationContinuationHelper.IsBrokerResponse(sourceApplication))
    {
      AuthenticationContinuationHelper.SetBrokerContinuationEventArgs(url);
      return true;
    }

    else if (!AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url))
    {
         return false;
    }

    return true;
}

Ez a metódus minden alkalommal meghívódik, amikor az alkalmazás elindul. Ez a lehetőség a közvetítő válaszának feldolgozására és a MSAL.NET elindított hitelesítési folyamat befejezésére szolgál.

4. lépés: Az UIViewController() beállítása

Még mindig az AppDelegate.cs fájlban állítson be egy objektumablakot. Általában nem kell beállítania az objektumablakot xamarin iOS-hez, de a közvetítőtől érkező válaszok küldéséhez és fogadásához objektumablakra van szükség.

Az objektumablak beállítása:

  1. Az AppDelegate.cs fájlban állítson be App.RootViewController egy újatUIViewController(). Ez a hozzárendelés biztosítja, hogy a közvetítő hívása tartalmazza a következőket: UIViewController. Ha ez a beállítás helytelenül van hozzárendelve, a következő hibaüzenet jelenhet meg:

    "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. AcquireTokenInteractive A hívás során használja.WithParentActivityOrWindow(App.RootViewController), majd adja meg a használni kívánt objektumablakra mutató hivatkozást.

    Az App.cs-ben:

       public static object RootViewController { get; set; }
    

    Az AppDelegate.cs fájlban:

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

    A hívásban:AcquireToken

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

5. lépés: URL-séma regisztrálása

MSAL.NET URL-címekkel hívja meg a közvetítőt, majd adja vissza a közvetítő válaszát az alkalmazásnak. A körút befejezéséhez regisztráljon egy URL-sémát az alkalmazáshoz az Info.plist fájlban.

A CFBundleURLSchemes névnek előtagként kell szerepelnie msauth. . Kövesse a következő előtagot CFBundleURLName: .

Az URL-sémában BundleId egyedileg azonosítja az alkalmazást: $"msauth.(BundleId)". Tehát ha BundleId igen com.yourcompany.xforms, akkor az URL-séma .msauth.com.yourcompany.xforms

Megjegyzés:

Ez az URL-séma az átirányítási URI részévé válik, amely egyedileg azonosítja az alkalmazást, amikor választ kap a közvetítőtől.

 <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>

6. lépés: A közvetítőazonosító hozzáadása az LSApplicationQueriesSchemes szakaszhoz

Az MSAL segítségével –canOpenURL: ellenőrizheti, hogy a közvetítő telepítve van-e az eszközön. Az iOS 9-ben az Apple zárolta az alkalmazás által lekérdezhető sémákat.

Adja hozzá msauthv2 az LSApplicationQueriesSchemesInfo.plist fájl szakaszához az alábbi példához hasonlóan:

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

7. lépés: Átirányítási URI hozzáadása az alkalmazásregisztrációhoz

Tipp.

A cikkben szereplő lépések a portáltól függően kissé eltérhetnek.

A közvetítő használata esetén az átirányítási URI-nak további követelménye van. Az átirányítási URI-nak a következő formátummal kell rendelkeznie:

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

Példa:

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

Figyelje meg, hogy az átirányítási URI megegyezik az CFBundleURLSchemes Info.plist fájlban szereplő névvel.

Adja hozzá az átirányítási URI-t az alkalmazás regisztrációhoz. A megfelelően formázott átirányítási URI létrehozásához használja a Alkalmazásregisztrációk a közvetített átirányítási URI-t a csomagazonosítóból.

Az átirányítási URI létrehozásához:

  1. Jelentkezzen be a Microsoft Entra felügyeleti központba legalább egy felhőalapú alkalmazásként Rendszergazda istratorként.

  2. Keresse meg az identitásalkalmazásokat>> Alkalmazásregisztrációk.

  3. Keresse meg és válassza ki az alkalmazást.

  4. Hitelesítés kiválasztása Platform>hozzáadása iOS/macOS rendszeren>

  5. Adja meg a csomagazonosítót, majd válassza a Konfigurálás lehetőséget.

    Másolja ki az Átirányítás URI szövegmezőben megjelenő generált átirányítási URI-t a kódba való felvételhez:

    iOS platform settings with generated redirect URI

  6. Válassza a Kész lehetőséget az átirányítási URI létrehozásának befejezéséhez.

Közvetített hitelesítés Androidhoz

1. lépés: Közvetítői támogatás engedélyezése

A közvetítői támogatás minden alapon engedélyezvePublicClientApplication van. Alapértelmezés szerint le van tiltva. Használja a WithBroker() paramétert (alapértelmezés szerint igaz értékre) a IPublicClientApplication folyamat PublicClientApplicationBuilderlétrehozásakor.

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithRedirectUri(redirectUriOnAndroid) // See step #4
                .Build();

2. lépés: A fő tevékenység frissítése a visszahívás kezeléséhez

Amikor MSAL.NET meghívja a közvetítőt, a közvetítő visszahívja az alkalmazást a OnActivityResult() módszerrel. Mivel az MSAL megvárja a közvetítő válaszát, az alkalmazásnak az eredményt MSAL.NET kell irányítania.

Az eredmény átirányítása a SetAuthenticationContinuationEventArgs(int requestCode, Result resultCode, Intent data) metódushoz az OnActivityResult() itt látható módszer felülírásával:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
   base.OnActivityResult(requestCode, resultCode, data);
   AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}

Ezt a metódust a rendszer minden alkalommal meghívja, amikor a közvetítőalkalmazás elindul, és lehetőségként használja a közvetítő válaszának feldolgozására és a MSAL.NET által indított hitelesítési folyamat befejezésére.

3. lépés: Tevékenység beállítása

A közvetítőalapú hitelesítés engedélyezéséhez állítson be egy tevékenységet, hogy az MSAL elküldhesse és megkaphassa a választ a közvetítőnek és a közvetítőtől. Ehhez adja meg a tevékenységet (általában a MainActivity) a szülőobjektumnak WithParentActivityOrWindow(object parent) .

Például a következő hívásban AcquireTokenInteractive():

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow((Activity)context))
             .ExecuteAsync();

4. lépés: Átirányítási URI hozzáadása az alkalmazásregisztrációhoz

Az MSAL URL-címekkel hívja meg a közvetítőt, majd térjen vissza az alkalmazáshoz. Az oda-vissza utazás befejezéséhez regisztráljon egy átirányítási URI-t az alkalmazáshoz.

Az alkalmazás átirányítási URI-jának formátuma az APK aláírásához használt tanúsítványtól függ. Például:

msauth://com.microsoft.xforms.testApp/hgbUYHVBYUTvuvT&Y6tr554365466=

Az URI utolsó része annak az aláírásnak a Base64 kódolású verziója, hgbUYHVBYUTvuvT&Y6tr554365466=amellyel az APK alá van írva. Ha a Visual Studióban fejleszti az alkalmazást, ha az APK aláírása nélkül, egy adott tanúsítvánnyal hibakeresés céljából a Visual Studio aláírja az APK-t. Amikor a Visual Studio így aláírja Önnek az APK-t, egyedi aláírást ad a géphez, amelyre épül. Így minden alkalommal, amikor egy másik gépen készíti az alkalmazást, frissítenie kell az átirányítási URI-t az alkalmazás kódjában és az alkalmazás regisztrációjában az MSAL-hitelesítéshez.

Hibakeresés közben előfordulhat, hogy MSAL-kivétel (vagy naplóüzenet) jelenik meg, amely szerint a megadott átirányítási URI helytelen. A kivétel vagy a naplóüzenet azt az átirányítási URI-t is jelzi, amely a hibakeresés aktuális gépével együtt használandó . A megadott átirányítási URI-val folytathatja az alkalmazás fejlesztését, ha kódban frissíti az átirányítási URI-t, és hozzáadja a megadott átirányítási URI-t az alkalmazás regisztrációjához.

Ha készen áll a kód véglegesítésére, frissítse a kód átirányítási URI-ját és az alkalmazás regisztrációját annak a tanúsítványnak az aláírására, amellyel az APK-t aláírja.

A gyakorlatban ez azt jelenti, hogy érdemes megfontolnia egy átirányítási URI hozzáadását a fejlesztői csapat minden egyes tagjához, valamint egy átirányítási URI-t az APK éles, aláírt verziójához.

Az aláírást az MSAL-hez hasonlóan saját maga is kiszámíthatja:

   private string GetRedirectUriForBroker()
   {
      string packageName = Application.Context.PackageName;
      string signatureDigest = this.GetCurrentSignatureForPackage(packageName);
      if (!string.IsNullOrEmpty(signatureDigest))
      {
            return string.Format(CultureInfo.InvariantCulture, "{0}://{1}/{2}", RedirectUriScheme,
               packageName.ToLowerInvariant(), signatureDigest);
      }

      return string.Empty;
   }

   private string GetCurrentSignatureForPackage(string packageName)
   {
      Android.Content.PM.Signature signature = null;
      if (Build.VERSION.SdkInt >= BuildVersionCodes.Tiramisu)
      {
          var packageInfo = Application.Context.PackageManager.GetPackageInfo(packageName, PackageManager.PackageInfoFlags.Of((long)PackageInfoFlags.SigningCertificates));
          if (packageInfo.SigningInfo != null)
          {
              var signatures = packageInfo.SigningInfo.GetApkContentsSigners();
              if (signatures != null && signatures.Length > 0)
                  signature = signatures[0];
          }
      }
      else
      {
#pragma warning disable CS0618 // Type or member is obsolete
          var packageInfo = Application.Context.PackageManager.GetPackageInfo(packageName, PackageInfoFlags.Signatures);
          if (packageInfo != null && packageInfo.Signatures != null && packageInfo.Signatures.Count > 0)
              signature = packageInfo.Signatures[0];
#pragma warning restore CS0618 // Type or member is obsolete
      }
    
      if (signature != null)
      {
          // First available signature. Applications can be signed with multiple signatures.
          // The order of Signatures is not guaranteed.
          var md = MessageDigest.GetInstance("SHA");
          md.Update(signature.ToByteArray());
          return Convert.ToBase64String(md.Digest(), Base64FormattingOptions.None);
          // Server side needs to register all other tags. ADAL will
          // send one of them.
      }
   }

A csomag aláírásának beszerzésére is lehetősége van a keytool használatával az alábbi parancsokkal:

  • Windows:
    keytool.exe -list -v -keystore "%LocalAppData%\Xamarin\Mono for Android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
    
  • Macos:
    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
    

5. lépés (nem kötelező): Térjen vissza a rendszerböngészőbe

Ha az MSAL a közvetítő használatára van konfigurálva, de a közvetítő nincs telepítve, az MSAL vissza fog esni egy webes nézet (böngésző) használatára. Az MSAL az eszköz alapértelmezett rendszerböngészőjének használatával próbálja meg a hitelesítést, ami meghiúsul, mert az átirányítási URI konfigurálva van a közvetítőhöz, és a rendszerböngésző nem tudja, hogyan használható az MSAL-ra való visszalépéshez. A hiba elkerülése érdekében konfigurálhat egy szándékszűrőt a 4. lépésben használt közvetítőátirányítási URI-val.

Módosítsa az alkalmazás jegyzékfájlját a szándékszűrő hozzáadásához:

<!-- NOTE the SLASH (required) that prefixes the signature value in the path attribute.
     The signature value is the Base64-encoded signature discussed above. -->
<intent-filter>
      <data android:scheme="msauth"
                    android:host="Package Name"
                    android:path="/Package Signature"/>

Ha például rendelkezik átirányítási msauth://com.microsoft.xforms.testApp/hgbUYHVBYUTvuvT&Y6tr554365466=URI-val, a jegyzéknek az alábbi XML-kódrészlethez hasonlóan kell kinéznie.

Az értékben android:path az aláírás előtti perjelre (/) van szükség.

<!-- NOTE the SLASH (required) that prefixes the signature value in the path attribute.
     The signature value is the Base64-encoded signature discussed above. -->
<intent-filter>
      <data android:scheme="msauth"
                    android:host="com.microsoft.xforms.testApp"
                    android:path="/hgbUYHVBYUTvuvT&Y6tr554365466="/>

Az alkalmazás rendszerböngészőhöz és Android 11-támogatáshoz való konfigurálásával kapcsolatos további információkért lásd : Android-jegyzék frissítése a rendszerböngésző támogatásához.

Alternatív megoldásként úgy konfigurálhatja az MSAL-t, hogy visszaessen a beágyazott böngészőbe, amely nem támaszkodik átirányítási URI-ra:

.WithUseEmbeddedWebUi(true)

Hibaelhárítási tippek az Android által közvetített hitelesítéshez

Az alábbiakban néhány tippet talál a közvetítőalapú hitelesítés androidos implementálásával kapcsolatos problémák elkerülésére:

  • Átirányítási URI – Átirányítási URI hozzáadása az alkalmazásregisztrációhoz. A fejlesztők gyakran tapasztalnak hiányzó vagy helytelen átirányítási URI-t.

  • Közvetítő verziója – Telepítse a közvetítőalkalmazások minimálisan szükséges verzióját. A két alkalmazás bármelyike használható a közvetítőalapú hitelesítéshez Androidon.

    • Intune Céges portál (5.0.4689.0-s vagy újabb verzió)
    • Microsoft Authenticator (6.2001.0140-es vagy újabb verzió).
  • Közvetítői elsőbbség – Az MSAL az eszközön telepített első közvetítővel kommunikál több közvetítő telepítésekor.

    Példa: Ha először telepíti a Microsoft Authenticatort, majd telepíti a Intune Céges portál, a közvetítő hitelesítés csak a Microsoft Authenticatoron történik.

  • Naplók – Ha a közvetítői hitelesítéssel kapcsolatos probléma merül fel, a közvetítő naplóinak megtekintése segíthet az ok diagnosztizálásában.

    • Microsoft Authenticator-naplók lekérése:

      1. Válassza az alkalmazás jobb felső sarkában található menügombot.
      2. Válassza a Probléma esetén visszajelzés>küldése lehetőséget.
      3. A Mit szeretne tenni? területen válasszon egy lehetőséget, és adjon meg egy leírást.
      4. A naplók elküldéséhez kattintson az alkalmazás jobb felső sarkában található nyílra.

      A naplók elküldése után egy párbeszédpanelen megjelenik az incidens azonosítója. Jegyezze fel az incidens azonosítóját, és adja meg, amikor segítséget kér.

    • Intune Céges portál naplók lekérése:

      1. Válassza az alkalmazás bal felső sarkában található menügombot.
      2. Válassza a Súgó>e-mail támogatása lehetőséget.
      3. A naplók elküldéséhez válassza a Csak a Naplók feltöltése lehetőséget.

      A naplók elküldése után egy párbeszédpanelen megjelenik az incidens azonosítója. Jegyezze fel az incidens azonosítóját, és adja meg, amikor segítséget kér.

További lépések

További információ a Univerzális Windows-platform MSAL.NET való használatának szempontjairól.