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 PublicClientApplication
esetében. A támogatás alapértelmezés szerint le van tiltva. A létrehozáskor PublicClientApplication
PublicClientApplicationBuilder
haszná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 OpenUrl
AppDelegate
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:
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"
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 LSApplicationQueriesSchemes
Info.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:
Jelentkezzen be a Microsoft Entra felügyeleti központba legalább egy felhőalapú alkalmazásként Rendszergazda istratorként.
Keresse meg az identitásalkalmazásokat>> Alkalmazásregisztrációk.
Keresse meg és válassza ki az alkalmazást.
Hitelesítés kiválasztása Platform>hozzáadása iOS/macOS rendszeren>
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:
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 PublicClientApplicationBuilder
lé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:
- Válassza az alkalmazás jobb felső sarkában található menügombot.
- Válassza a Probléma esetén visszajelzés>küldése lehetőséget.
- A Mit szeretne tenni? területen válasszon egy lehetőséget, és adjon meg egy leírást.
- 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:
- Válassza az alkalmazás bal felső sarkában található menügombot.
- Válassza a Súgó>e-mail támogatása lehetőséget.
- 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.