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.SetAuthenticationContinuationEventArgs
metó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őtmsauthv3
:<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. |