Použití aplikace Microsoft Authenticator nebo Portál společnosti Intune v aplikacích Xamarin
V androidu a iOSu zprostředkovatelé, jako je Microsoft Authenticator a Microsoft Portál společnosti Intune specifické pro Android, povolte:
- Jednotné přihlašování (SSO): Uživatelé se nemusí přihlašovat ke každé aplikaci.
- Identifikace zařízení: Zprostředkovatel přistupuje k certifikátu zařízení. Tento certifikát se vytvoří na zařízení, když je připojený k pracovišti.
- Ověření identifikace aplikace: Když aplikace zavolá zprostředkovatele, předá adresu URL přesměrování. Zprostředkovatel ověří adresu URL.
Pokud chcete povolit některou z těchto funkcí, použijte WithBroker()
parametr při volání PublicClientApplicationBuilder.CreateApplication
metody. Parametr .WithBroker()
je ve výchozím nastavení nastavený na true.
Nastavení zprostředkovaného ověřování v knihovně Microsoft Authentication Library pro .NET (MSAL.NET) se liší podle platformy:
Poznámka:
MSAL.NET verze 4.61.0 a vyšší neposkytují podporu pro Univerzální platforma Windows (UPW), Xamarin Android a Xamarin iOS. Doporučujeme migrovat aplikace Xamarinu do moderních architektur, jako je MAUI. Přečtěte si další informace o vyřazení v oznámení nadcházejícího vyřazení MSAL.NET pro Xamarin a UPW.
Zprostředkované ověřování pro iOS
Pomocí následujících kroků povolíte aplikaci Xamarin.iOS komunikovat s aplikací Microsoft Authenticator . Pokud cílíte na iOS 13, zvažte čtení o zásadní změně rozhraní API společnosti Apple.
Krok 1: Povolení podpory zprostředkovatele
Je nutné povolit podporu zprostředkovatele pro jednotlivé instance PublicClientApplication
. Podpora je ve výchozím nastavení zakázaná. Při vytváření PublicClientApplication
pomocí PublicClientApplicationBuilder
příkazu použijte WithBroker()
parametr, jak ukazuje následující příklad. Parametr WithBroker()
je ve výchozím nastavení nastavený na true.
var app = PublicClientApplicationBuilder
.Create(ClientId)
.WithBroker()
.WithReplyUri(redirectUriOnIos) // $"msauth.{Bundle.Id}://auth" (see step 6 below)
.Build();
Krok 2: Povolení přístupu ke klíčence
Pokud chcete povolit přístup ke svazku klíčů, musíte mít pro aplikaci přístupovou skupinu řetězce klíčů. Rozhraní API můžete použít WithIosKeychainSecurityGroup()
k nastavení přístupové skupiny řetězce klíčů při vytváření aplikace:
var builder = PublicClientApplicationBuilder
.Create(ClientId)
.WithIosKeychainSecurityGroup("com.microsoft.adalcache")
.Build();
Další informace najdete v tématu Povolení přístupu ke klíčence.
Krok 3: Aktualizace AppDelegate pro zpracování zpětného volání
Když MSAL.NET volá zprostředkovatele, zprostředkovatel volá zpět do vaší aplikace prostřednictvím OpenUrl
metody AppDelegate
třídy. Vzhledem k tomu, že MSAL čeká na odpověď zprostředkovatele, musí vaše aplikace spolupracovat, aby volala MSAL.NET zpět. Chcete-li tuto spolupráci povolit, aktualizujte soubor AppDelegate.cs tak, aby přepsal následující metodu.
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;
}
Tato metoda se vyvolá při každém spuštění aplikace. Používá se jako příležitost zpracovat odpověď od zprostředkovatele a dokončit proces ověřování, který MSAL.NET spustil.
Krok 4: Nastavení UIViewController()
V souboru AppDelegate.cs nastavte okno objektu. Obvykle není nutné nastavit okno objektu pro Xamarin iOS, ale potřebujete okno objektu k odesílání a přijímání odpovědí od zprostředkovatele.
Nastavení okna objektu:
V souboru AppDelegate.cs nastavte
App.RootViewController
na novýUIViewController()
. Toto přiřazení zajišťuje, že volání do zprostředkovatele zahrnujeUIViewController
. Pokud je toto nastavení přiřazeno nesprávně, může se zobrazit tato chyba:"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
Při volání použijte.WithParentActivityOrWindow(App.RootViewController)
a předejte odkaz na okno objektu, které použijete.V App.cs:
public static object RootViewController { get; set; }
V AppDelegate.cs:
LoadApplication(new App()); App.RootViewController = new UIViewController();
AcquireToken
Ve volání:result = await app.AcquireTokenInteractive(scopes) .WithParentActivityOrWindow(App.RootViewController) .ExecuteAsync();
Krok 5: Registrace schématu adres URL
MSAL.NET používá adresy URL k vyvolání zprostředkovatele a následné vrácení odpovědi zprostředkovatele do vaší aplikace. Pokud chcete dokončit zpáteční cestu, zaregistrujte schéma adres URL pro vaši aplikaci v souboru Info.plist .
Název CFBundleURLSchemes
musí být součástí msauth.
předpony. Postupujte podle předpony s příponou CFBundleURLName
.
V schématu BundleId
adres URL jednoznačně identifikuje aplikaci: $"msauth.(BundleId)"
. Takže pokud BundleId
je com.yourcompany.xforms
, pak je schéma msauth.com.yourcompany.xforms
adresy URL .
Poznámka:
Toto schéma adres URL se stane součástí identifikátoru URI přesměrování, který jednoznačně identifikuje vaši aplikaci, když obdrží odpověď od zprostředkovatele.
<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>
Krok 6: Přidání identifikátoru zprostředkovatele do oddílu LSApplicationQueriesSchemes
MSAL používá –canOpenURL:
ke kontrole, jestli je na zařízení nainstalovaný zprostředkovatel. V iOSu 9 společnost Apple uzamkne schémata, na která se aplikace může dotazovat.
Přidejte msauthv2
do LSApplicationQueriesSchemes
části souboru Info.plist , jak je znázorněno v následujícím příkladu:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>msauthv2</string>
<string>msauthv3</string>
</array>
Krok 7: Přidání identifikátoru URI přesměrování do registrace aplikace
Při použití zprostředkovatele má identifikátor URI přesměrování další požadavek. Identifikátor URI přesměrování musí mít následující formát:
$"msauth.{BundleId}://auth"
Tady je příklad:
public static string redirectUriOnIos = "msauth.com.yourcompany.XForms://auth";
Všimněte si, že identifikátor URI přesměrování odpovídá CFBundleURLSchemes
názvu, který jste zahrnuli do souboru Info.plist .
Přidejte identifikátor URI přesměrování do registrace aplikace. Pokud chcete vygenerovat správně formátovaný identifikátor URI přesměrování, použijte Registrace aplikací k vygenerování zprostředkovaného identifikátoru URI přesměrování z ID sady prostředků.
Vygenerování identifikátoru URI přesměrování:
Přihlaste se do Centra pro správu Microsoft Entra jako alespoň správce cloudových aplikací.
Přejděte k aplikacím>Registrace aplikací.
Vyhledejte a vyberte aplikaci.
Výběr možnosti Přidat>platformu>pro iOS nebo macOS
Zadejte ID sady prostředků a pak vyberte Konfigurovat.
Zkopírujte vygenerovaný identifikátor URI přesměrování, který se zobrazí v textovém poli Identifikátor URI přesměrování pro zahrnutí do kódu:
Výběrem možnosti Hotovo dokončete generování identifikátoru URI přesměrování.
Zprostředkované ověřování pro Android
Krok 1: Povolení podpory zprostředkovatele
Podpora zprostředkovatele je povolená pro jednotlivéPublicClientApplication
účely. Ve výchozím nastavení je vypnuto.
WithBroker()
Při vytváření IPublicClientApplication
prostřednictvím příkazu použijte parametr (nastavený na hodnotu true ve výchozím nastavení).PublicClientApplicationBuilder
var app = PublicClientApplicationBuilder
.Create(ClientId)
.WithBroker()
.WithRedirectUri(redirectUriOnAndroid) // See step #4
.Build();
Krok 2: Aktualizace hlavní aktivity pro zpracování zpětného volání
Když MSAL.NET zavolá zprostředkovatele, zprostředkuje volání zpět do vaší aplikace metodou OnActivityResult()
. Vzhledem k tomu, že MSAL bude čekat na odpověď od zprostředkovatele, musí vaše aplikace směrovat výsledek na MSAL.NET.
Nasměrujte výsledek na metodu SetAuthenticationContinuationEventArgs(int requestCode, Result resultCode, Intent data)
přepsáním OnActivityResult()
metody, jak je znázorněno zde:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
base.OnActivityResult(requestCode, resultCode, data);
AuthenticationContinuationHelper.SetAuthenticationContinuationEventArgs(requestCode, resultCode, data);
}
Tato metoda se vyvolá při každém spuštění zprostředkované aplikace a používá se jako příležitost zpracovat odpověď od zprostředkovatele a dokončit proces ověřování zahájený MSAL.NET.
Krok 3: Nastavení aktivity
Pokud chcete povolit zprostředkované ověřování, nastavte aktivitu tak, aby služba MSAL mohla odesílat a přijímat odpověď na zprostředkovatele a od zprostředkovatele. Chcete-li to provést, zadejte aktivitu (obvykle MainActivity
) WithParentActivityOrWindow(object parent)
nadřazeného objektu.
Například při volání:AcquireTokenInteractive()
result = await app.AcquireTokenInteractive(scopes)
.WithParentActivityOrWindow((Activity)context))
.ExecuteAsync();
Krok 4: Přidání identifikátoru URI přesměrování do registrace aplikace
Knihovna MSAL používá k vyvolání zprostředkovatele adresy URL a pak se vrátí do aplikace. K dokončení této doby odezvy zaregistrujte identifikátor URI přesměrování pro vaši aplikaci.
Formát identifikátoru URI přesměrování pro vaši aplikaci závisí na certifikátu použitém k podepsání APK. Příklad:
msauth://com.microsoft.xforms.testApp/hgbUYHVBYUTvuvT&Y6tr554365466=
Poslední část identifikátoru URI je hgbUYHVBYUTvuvT&Y6tr554365466=
verze s kódováním Base64 podpisu, ke které je APK podepsán. Pokud při vývoji aplikace v sadě Visual Studio ladíte kód bez podepsání APK s konkrétním certifikátem, Visual Studio vás k ladění podepíše. Když Visual Studio tímto způsobem podepíše APK, poskytne mu jedinečný podpis pro počítač, na který je postaven. Proto při každém sestavení aplikace na jiném počítači budete muset aktualizovat identifikátor URI přesměrování v kódu aplikace a registraci aplikace, aby bylo možné provést ověření v knihovně MSAL.
Při ladění může dojít k výjimce MSAL (nebo zprávě protokolu), která hlásí, že zadaný identifikátor URI přesměrování je nesprávný. Zpráva o výjimce nebo protokolu také označuje identifikátor URI přesměrování, který byste měli používat s aktuálním počítačem, na kterém ladíte. Pomocí zadaného identifikátoru URI přesměrování můžete pokračovat v vývoji aplikace, pokud aktualizujete identifikátor URI přesměrování v kódu a přidáte zadaný identifikátor URI přesměrování do registrace aplikace.
Jakmile budete připraveni dokončit kód, aktualizujte identifikátor URI přesměrování v kódu a registraci aplikace tak, aby používal podpis certifikátu, kterým apk podepisujete.
V praxi to znamená, že byste měli zvážit přidání identifikátoru URI přesměrování pro každého člena vývojového týmu a identifikátor URI přesměrování pro produkční podepsanou verzi APK.
Podpis můžete vypočítat sami, podobně jako služba MSAL:
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.
}
}
Máte také možnost získat podpis pro váš balíček pomocí keytool s následujícími příkazy:
- 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
Krok 5 (volitelné): Vraťte se do systémového prohlížeče
Pokud je služba MSAL nakonfigurovaná tak, aby používala zprostředkovatele, ale zprostředkovatel není nainstalovaný, služba MSAL se vrátí do webového zobrazení (prohlížeč). Služba MSAL se pokusí ověřit pomocí výchozího systémového prohlížeče na zařízení, což selže, protože identifikátor URI přesměrování je nakonfigurovaný pro zprostředkovatele a systémový prohlížeč neví, jak ho použít k návratu do knihovny MSAL. Abyste se vyhnuli selhání, můžete nakonfigurovat filtr záměru s identifikátorem URI přesměrování zprostředkovatele, který jste použili v kroku 4.
Upravte manifest aplikace tak, aby přidal filtr záměru:
<!-- 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"/>
Pokud například máte identifikátor URI msauth://com.microsoft.xforms.testApp/hgbUYHVBYUTvuvT&Y6tr554365466=
přesměrování , měl by manifest vypadat jako následující fragment kódu XML.
Je vyžadován lomítko (/
) před podpisem v hodnotěandroid:path
.
<!-- 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="/>
Další informace o konfiguraci aplikace pro podporu systémového prohlížeče a Androidu 11 najdete v tématu Aktualizace manifestu Androidu pro podporu systémového prohlížeče.
Jako alternativu můžete službu MSAL nakonfigurovat tak, aby se vrátila do vloženého prohlížeče, který nespoléhá na identifikátor URI přesměrování:
.WithUseEmbeddedWebUi(true)
Tipy pro řešení potíží se zprostředkovaným ověřováním v Androidu
Tady je několik tipů, jak se vyhnout problémům při implementaci zprostředkovaného ověřování v Androidu:
Identifikátor URI přesměrování – Přidejte identifikátor URI přesměrování do registrace aplikace. Chybějící nebo nesprávný identifikátor URI přesměrování je běžným problémem, ke kterému dochází vývojáři.
Verze zprostředkovatele – Nainstalujte minimální požadovanou verzi zprostředkovaných aplikací. Jednu z těchto dvou aplikací je možné použít pro zprostředkované ověřování v Androidu.
- Portál společnosti Intune (verze 5.0.4689.0 nebo novější)
- Microsoft Authenticator (verze 6.2001.0140 nebo novější)
Priorita zprostředkovatele – SLUŽBA MSAL komunikuje s prvním zprostředkovatelem nainstalovaným na zařízení při instalaci více zprostředkovatelů.
Příklad: Pokud nejprve nainstalujete Aplikaci Microsoft Authenticator a pak nainstalujete Portál společnosti Intune, zprostředkované ověřování proběhne pouze v aplikaci Microsoft Authenticator.
Protokoly – Pokud narazíte na problém s zprostředkovaným ověřováním, může vám s diagnostikou příčiny pomoct zobrazení protokolů zprostředkovatele.
Získejte protokoly Microsoft Authenticatoru:
- Vyberte tlačítko nabídky v pravém horním rohu aplikace.
- Vyberte Poslat zpětnou vazbu>s problémy?
- V části Co se pokoušíte udělat?, vyberte možnost a přidejte popis.
- Pokud chcete protokoly odeslat, vyberte šipku v pravém horním rohu aplikace.
Po odeslání protokolů se v dialogovém okně zobrazí ID incidentu. Poznamenejte si ID incidentu a při žádosti o pomoc ho zahrňte.
Získejte protokoly Portál společnosti Intune:
- Vyberte tlačítko nabídky v levém horním rohu aplikace.
- Vyberte e-mailovou podporu nápovědy>.
- Pokud chcete protokoly odeslat, vyberte Nahrát pouze protokoly.
Po odeslání protokolů se v dialogovém okně zobrazí ID incidentu. Poznamenejte si ID incidentu a při žádosti o pomoc ho zahrňte.
Další kroky
Přečtěte si o aspektech použití Univerzální platforma Windows s MSAL.NET.