Megosztás a következőn keresztül:


A Xamarin iOS MSAL.NET

Ha a Microsoft Authentication Library for .NET -t (MSAL.NET) használja xamarin iOS rendszeren, a következőket kell tenni:

  • A függvény felülbírálása és implementálása a OpenUrl következőben: AppDelegate.
  • Kulcskarikacsoportok engedélyezése.
  • A tokengyorsítótár megosztásának engedélyezése.
  • Kulcskarika-hozzáférés engedélyezése.
  • Ismerje meg az iOS 12 és az iOS 13 ismert problémáit és a hitelesítést.

Feljegyzés

MSAL.NET 4.61.0-s és újabb verziók nem támogatják Univerzális Windows-platform (UWP), Xamarin Android és Xamarin iOS rendszert. Javasoljuk, hogy a Xamarin-alkalmazásokat modern keretrendszerekbe, például a MAUI-ba migrálja. További információ a Xamarin- és UWP-MSAL.NET közelgő elavulásáról szóló közleményben.

OpenUrl implementálása

Felülbírálja a OpenUrl származtatott osztály és a FormsApplicationDelegate hívás AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgsmetódusát. Példa:

public override bool OpenUrl(UIApplication app, NSUrl url, NSDictionary options)
{
    AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(url);
    return true;
}

Emellett hajtsa végre a következő feladatokat is:

  • Átirányítási URI-séma definiálása.
  • Az alkalmazás engedélyeinek megkövetelése egy másik alkalmazás meghívásához.
  • Rendelkezik egy adott űrlappal az átirányítási URI-hoz.
  • Átirányítási URI regisztrálása az Azure Portalon.

Kulcskarika-hozzáférés engedélyezése

A kulcskarika-hozzáférés engedélyezéséhez győződjön meg arról, hogy az alkalmazás rendelkezik kulcskarika-hozzáférési csoportokkal. Az alkalmazás API-val történő létrehozásakor beállíthatja a WithIosKeychainSecurityGroup() kulcskarika-hozzáférési csoportot.

A gyorsítótár és az egyszeri bejelentkezés (SSO) előnyeinek kihasználásához állítsa a kulcskarika-hozzáférési csoportot az összes alkalmazás azonos értékére.

Ez a beállítási példa az MSAL 4.x-et használja:

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

Emellett engedélyezze a kulcskarika-hozzáférést a Entitlements.plist fájlban. Használja a következő hozzáférési csoportot vagy a saját hozzáférési csoportját.

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

Az API használatakor az WithIosKeychainSecurityGroup() MSAL automatikusan hozzáfűzi a biztonsági csoportot az alkalmazás csapatazonosítójának végéhez (AppIdentifierPrefix). Az MSAL hozzáadja a biztonsági csoportot, mert amikor az alkalmazást Xcode-ban hozza létre, az ugyanezt fogja tenni. Ezért a fájlban lévő jogosultságokat a Entitlements.plist kulcskarika-hozzáférési csoport előtt kell tartalmaznia $(AppIdentifierPrefix) .

További információkért tekintse meg az iOS-jogosultságok dokumentációját.

Kulcskarika-hozzáférés hibaelhárítása

Ha a következőhöz hasonló hibaüzenet jelenik meg: "Az alkalmazás nem fér hozzá az alkalmazás közzétevőjéhez tartozó iOS-kulcskarikához (a TeamId értéke null)", ez azt jelenti, hogy az MSAL nem tudja elérni a kulcskarikát. Ez egy konfigurációs probléma. A hibaelhárításhoz próbálja meg önállóan elérni a kulcskarikát, például:

var queryRecord = new SecRecord(SecKind.GenericPassword)
{
    Service = "",
    Account = "SomeTeamId",
    Accessible = SecAccessible.Always
};

SecRecord match = SecKeyChain.QueryAsRecord(queryRecord, out SecStatusCode resultCode);

if (resultCode == SecStatusCode.ItemNotFound)
{
    SecKeyChain.Add(queryRecord);
    match = SecKeyChain.QueryAsRecord(queryRecord, out resultCode);
}

// Make sure that  resultCode == SecStatusCode.Success

Jogkivonat-gyorsítótár megosztásának engedélyezése iOS-alkalmazásokban

Az MSAL 2.x-től kezdődően megadhat egy kulcskarika-hozzáférési csoportot, amely több alkalmazásban is megőrzi a jogkivonat-gyorsítótárat. Ez a beállítás lehetővé teszi a jogkivonat-gyorsítótár megosztását több olyan alkalmazás között, amelyek azonos kulcslánc-hozzáférési csoporttal rendelkeznek. A jogkivonat-gyorsítótárat megoszthatja ADAL.NET alkalmazások, MSAL.NET Xamarin.iOS-alkalmazások és az ADAL.objc vagy az MSAL.objc nyelven fejlesztett natív iOS-alkalmazások között.

A jogkivonat-gyorsítótár megosztásával engedélyezheti az egyszeri bejelentkezést (SSO) az összes olyan alkalmazás között, amely ugyanazt a kulcskarika-hozzáférési csoportot használja.

A gyorsítótár megosztásának engedélyezéséhez a WithIosKeychainSecurityGroup() metódussal állítsa a kulcskarika-hozzáférési csoportot ugyanarra az értékre az összes olyan alkalmazásban, amely ugyanazt a gyorsítótárat használja. A cikk első kód példája bemutatja a metódus használatát.

A cikk korábbi részében megtanulta, hogy az MSAL az API használatakor hozzáadja $(AppIdentifierPrefix) azokat WithIosKeychainSecurityGroup() . Az MSAL hozzáadja ezt az elemet, mert a csapatazonosító AppIdentifierPrefix biztosítja, hogy csak az azonos közzétevő által készített alkalmazások oszthatják meg a kulcskarika-hozzáférést.

Feljegyzés

A KeychainSecurityGroup tulajdonság elavult. Használja inkább a iOSKeychainSecurityGroup tulajdonságot. Az TeamId előtag használata esetén nincs szükség az előtagra iOSKeychainSecurityGroup.

A Microsoft Authenticator használata

Az alkalmazás a Microsoft Authenticatort használhatja közvetítőként a következők engedélyezéséhez:

  • Egyszeri bejelentkezés: Az egyszeri bejelentkezés engedélyezésekor a felhasználóknak nem kell bejelentkezni az egyes alkalmazásokba.
  • Eszközazonosítás: Az eszközazonosítással hitelesíthető az eszköztanúsítvány elérésével. Ez a tanúsítvány a munkahelyhez való csatlakozáskor jön létre az eszközön. Az alkalmazás készen áll, ha a bérlői rendszergazdák engedélyezik az eszközökhöz kapcsolódó feltételes hozzáférést.
  • 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 átirányítási URL-címet.

A közvetítő engedélyezéséről további információt a Microsoft Authenticator vagy a Microsoft Intune Céges portál használata xamarin iOS- és Android-alkalmazásokban című témakörben talál.

Az iOS 12 és a hitelesítés ismert problémái

A Microsoft kiadott egy biztonsági tanácsadást az iOS 12 és bizonyos típusú hitelesítések közötti kompatibilitásról. Az inkompatibilitás megszakítja a közösségi, WSFed- és OIDC-bejelentkezéseket. A biztonsági tanácsadás segít megérteni, hogyan távolíthatja el ASP.NET biztonsági korlátozásokat az alkalmazásokból, hogy azok kompatibilisek legyenek az iOS 12-vel.

Ha MSAL.NET alkalmazásokat fejleszt Xamarin iOS rendszeren, végtelen hurok jelenhet meg, amikor iOS 12-ről próbál bejelentkezni a webhelyekre. Az ilyen viselkedés hasonló a GitHubon található ADAL-problémához: Végtelen hurok, amikor iOS 12 #1329-ből próbál bejelentkezni a webhelyre.

Előfordulhat, hogy az iOS 12 Safari ASP.NET Core OIDC-hitelesítése is megszakad. További információkért tekintse meg ezt a WebKit-problémát.

Az iOS 13 és a hitelesítés ismert problémái

Ha az alkalmazás feltételes hozzáférést vagy tanúsítványhitelesítést igényel, engedélyezze, hogy az alkalmazás kommunikáljon a Microsoft Authenticator közvetítőalkalmazással. Ezután az MSAL feladata az alkalmazás és a Microsoft Authenticator közötti kérelmek és válaszok kezelése.

Az iOS 13-on az Apple rendkívüli API-módosítást hajtott végre azáltal, hogy az alkalmazás nem tudja elolvasni a forrásalkalmazást, amikor egyéni URL-sémákon keresztül választ kap egy külső alkalmazástól.

Az Apple dokumentációja az UIApplicationOpenURLOptionsSourceApplicationKey állapotokról:

Ha a kérés a csapatához tartozó másik alkalmazásból származik, a UIKit ennek a kulcsnak az értékét az alkalmazás azonosítójára állítja. Ha a származó alkalmazás csoportazonosítója eltér az aktuális alkalmazás csapatazonosítóitól, a kulcs értéke nulla.

Ez a változás az MSAL esetében kompatibilitástörő, mert az MSAL és a Microsoft Authenticator alkalmazás közötti kommunikáció ellenőrzésére UIApplication.SharedApplication.OpenUrl támaszkodott.

Emellett az iOS 13-on a fejlesztőnek bemutatóvezérlőt kell biztosítania a használat során ASWebAuthenticationSession.

Az alkalmazás akkor lesz érintett, ha az Xcode 11-et használja, és iOS-közvetítőt vagy ASWebAuthenticationSession.

Ilyen esetekben a sikeres hitelesítés engedélyezéséhez használja a MSAL.NET 4.4.0+ -t.

További követelmények

  • A legújabb MSAL-kódtárak használatakor győződjön meg arról, hogy a Microsoft Authenticator 6.3.19-es vagy újabb verziója telepítve van az eszközön.

  • A MSAL.NET 4.4.0+-ra való frissítéskor frissítse a LSApplicationQueriesSchemes fájlt az Info.plist fájlban, és adja hozzá a következőt msauthv3:

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

    Az Info.plist-hez való hozzáadás msauthv3 szükséges ahhoz, hogy észlelni tudja a legújabb Microsoft Authenticator alkalmazás jelenlétét az iOS 13-at támogató eszközön.

Probléma bejelentése

Ha kérdése van, vagy szeretne jelentést tenni a MSAL.NET talált problémáról, nyisson meg egy problémát a microsoft-authentication-library-for-dotnet GitHub adattárában.

Következő lépések

A Xamarin iOS tulajdonságaival kapcsolatos információkért tekintse meg az alábbi minta README.md fájljának iOS-specifikus szempontokra vonatkozó bekezdését:

Minta Platform Leírás
https://github.com/Azure-Samples/active-directory-xamarin-native-v2 Xamarin iOS, Android, Univerzális Windows-platform (UWP) Egy Xamarin Forms-alkalmazás bemutatja, hogyan használhatja a MSAL.NET a munkahelyi vagy iskolai és Microsoft személyes fiókok hitelesítésére a Microsoft Identitásplatform, és hogyan érheti el a Microsoft Graphot az eredményül kapott jogkivonattal.