Xamarin.Essentials: Webové Authenticator
ASP.NET back-end základního serveru
Rozhraní API je možné používat s WebAuthenticator jakoukoli webovou back-end službou. Pokud ji chcete použít ASP.NET základní aplikací, musíte nejprve nakonfigurovat webovou aplikaci pomocí následujících kroků:
- Nastavte požadované externí zprostředkovatele sociálního ověřování ve webové ASP.NET Core aplikaci.
- Ve volání nastavte Výchozí
CookieAuthenticationDefaults.AuthenticationSchemeschéma.AddAuthentication()ověřování na . - Použijte
.AddCookie()ve volání Startup.cs..AddAuthentication() - Všichni zprostředkovatelé musí být nakonfigurovaní pomocí
.SaveTokens = true;.
services.AddAuthentication(o =>
{
o.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
})
.AddCookie()
.AddFacebook(fb =>
{
fb.AppId = Configuration["FacebookAppId"];
fb.AppSecret = Configuration["FacebookAppSecret"];
fb.SaveTokens = true;
});
Tip
Pokud chcete zahrnout Přihlášení Apple, můžete použít NuGet AspNet.Security.OAuth.Apple balíček. Úplnou ukázku Startup.cs si můžete prohlédnout v úložišti GitHub základy.
Přidání vlastního kontroleru mobilního ověřování
U toku mobilního ověřování je obvykle žádoucí iniciovat tok přímo poskytovateli, který uživatel zvolil (například kliknutím na tlačítko Microsoft na přihlašovací obrazovce aplikace). Je také důležité mít možnost vrátit do aplikace relevantní informace s konkrétním identifikátorem URI zpětného volání za účelem ukončení toku ověřování.
K tomu použijte vlastní kontroler rozhraní API:
[Route("mobileauth")]
[ApiController]
public class AuthController : ControllerBase
{
const string callbackScheme = "myapp";
[HttpGet("{scheme}")] // eg: Microsoft, Facebook, Apple, etc
public async Task Get([FromRoute]string scheme)
{
// 1. Initiate authentication flow with the scheme (provider)
// 2. When the provider calls back to this URL
// a. Parse out the result
// b. Build the app callback URL
// c. Redirect back to the app
}
}
Účelem tohoto kontroleru je odvodit schéma (poskytovatele), které aplikace požaduje, a iniciovat tok ověřování se zprostředkovatelem sociální sítě. Když zprostředkovatel volá zpět do webového back-endu, kontroler parsuje výsledek a přesměruje ho na identifikátor URI zpětného volání aplikace pomocí parametrů.
Někdy můžete chtít vrátit data, jako je například poskytovatel, zpět do aplikace, což můžete provést prostřednictvím parametrů dotazu access_token identifikátoru URI zpětného volání. Nebo můžete chtít místo toho na serveru vytvořit vlastní identitu a předat aplikaci vlastní token. Co a jak tuto část udělat je na vás!
Podívejte se na úplnou ukázku kontroleru v úložišti Essentials.
Poznámka
Výše uvedená ukázka ukazuje, jak vrátit přístupový token z ověřování jiného výrobce (t.g. OAuth). Pokud chcete získat token, který můžete použít k autorizaci webových požadavků na samotný webový back-end, měli byste ve webové aplikaci vytvořit vlastní token a vrátit ho. Přehled ověřování ASP.NET Core obsahuje další informace o pokročilých scénářích ověřování v ASP.NET Core.
rozhraní API
- /WebAuthenticator" data-linktype="external">zdrojový kód WebAuthenticator
- Dokumentace k rozhraní WebAuthenticator API
- ASP.NET Core server
Třída WebAuthenticator umožňuje iniciovat toky založené na prohlížeči, které naslouchají zpětnému volání na konkrétní adresu URL zaregistrovanou v aplikaci.
Přehled
Mnoho aplikací vyžaduje přidání ověřování uživatelů, což často znamená, že uživatelům umožníte přihlásit se ke svým stávajícím účtům Microsoft, Facebook, Google a nyní k Apple Sign In.
Microsoft Authentication Library (MSAL) poskytuje vynikající řešení na klíč pro přidání ověřování do vaší aplikace. Ve svých klientských aplikacích je dokonce k dispozici podpora pro NuGet xamarin.
Pokud vás zajímá použití vlastní webové služby k ověřování, můžete k implementaci funkcí na straně klienta použít WebAuthenticator.
Proč používat back-end serveru?
Řada zprostředkovatelů ověřování se přesunula na nabídku explicitních nebo dvounohých toků ověřování, aby se zajistilo lepší zabezpečení. To znamená, že k dokončení toku ověřování budete od poskytovatele potřebovat tajný klíč klienta. Mobilní aplikace bohužel nejsou skvělým místem pro ukládání tajných kódů a cokoli jiného uloženého v kódu, binárních souborech mobilní aplikace nebo jinak se obecně považuje za nezabezpečené.
Osvědčeným postupem je použít webový back-end jako střední vrstvu mezi mobilní aplikací a poskytovatelem ověřování.
Důležité
Důrazně doporučujeme používat starší knihovny a vzory ověřování jenom pro mobilní zařízení, které v toku ověřování nevyužovádají webový back-end kvůli jejich inherentnímu nedostatku zabezpečení pro ukládání tajných kódů klienta.
Začínáme
Pokud chcete začít používat toto rozhraní API, přečtěte si příručku Začínáme pro a ujistěte se, že je knihovna správně nainstalovaná a nastavená ve vašich projektech.
Pro přístup k funkcím WebAuthenticator se vyžaduje následující nastavení specifické pro platformu.
Android ke zpracování identifikátoru URI zpětného volání vyžaduje nastavení filtru záměru. Toho lze snadno dosáhnout pomocí WebAuthenticatorCallbackActivity podtřídy třídy:
const string CALLBACK_SCHEME = "myapp";
[Activity(NoHistory = true, LaunchMode = LaunchMode.SingleTop)]
[IntentFilter(new[] { Android.Content.Intent.ActionView },
Categories = new[] { Android.Content.Intent.CategoryDefault, Android.Content.Intent.CategoryBrowsable },
DataScheme = CALLBACK_SCHEME)]
public class WebAuthenticationCallbackActivity : Xamarin.Essentials.WebAuthenticatorCallbackActivity
{
}
Pokud je cílová verze vašeho projektu pro Android nastavená na Android 11 (R API 30), musíte manifest pro Android aktualizovat pomocí dotazů, které se používají s novými požadavky na viditelnost balíčku.
Otevřete soubor AndroidManifest.xml ve složce Vlastnosti a do uzlu manifestu přidejte následující kód:
<queries>
<intent>
<action android:name="android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
Použití WebAuthenticatoru
Do třídy Xamarin.Essentials přidejte odkaz na :
using Xamarin.Essentials;
Rozhraní API se skládá hlavně z jedné metody, která přebírá dva parametry: adresu URL, která se má použít ke spuštění toku webového prohlížeče, a identifikátor URI, na který očekáváte, že tok nakonec zavolá zpět a na kterou je vaše aplikace zaregistrovaná, aby mohla AuthenticateAsync zpracovat.
Výsledkem je , WebAuthenticatorResult který zahrnuje všechny parametry dotazu parsované z identifikátoru URI zpětného volání:
var authResult = await WebAuthenticator.AuthenticateAsync(
new Uri("https://mysite.com/mobileauth/Microsoft"),
new Uri("myapp://"));
var accessToken = authResult?.AccessToken;
Rozhraní WebAuthenticator API se postará o spuštění adresy URL v prohlížeči a čekání na přijetí zpětného volání:

Pokud uživatel tok kdykoli zruší, vyvolá TaskCanceledException se .
Relace privátního ověřování
V iOSu 13 bylo zavedeno dočasné rozhraní API webového prohlížeče, které vývojářům umožňuje spustit ověřovací relaci jako soukromou. To umožňuje vývojářům žádat, aby mezi relacemi ověřování nebyly dostupné žádné sdílené soubory cookie nebo údaje o procházení, a pokaždé se jedná o novou relaci přihlášení. Tato funkce je dostupná prostřednictvím WebAuthenticatorOptions nového, který byl představen ve Xamarin.Essentials windows 1.7 pro iOS.
var url = new Uri("https://mysite.com/mobileauth/Microsoft");
var callbackUrl = new Uri("myapp://")
var authResult = await WebAuthenticator.AuthenticateAsync(new WebAuthenticatorOptions
{
Url = url,
CallbackUrl = callbackUrl,
PrefersEphemeralWebBrowserSession = true
});
Rozdíly mezi platformami
Vlastní karty se používají vždy, když jsou k dispozici, jinak se pro adresu URL začne záměr.
Apple Sign In
Pokud vaše aplikace používá kověření nějakou službu sociálních přihlášení, musí podle pokynů apple pro revize nabízet také možnost Přihlášení Apple.
Pokud chcete do svých aplikací přidat Apple Sign In, musíte nejprve nakonfigurovat aplikaci tak, aby k používání aplikace Apple Sign In (Přihlášení Apple).
Pro iOS 13 a vyšší budete chtít volat AppleSignInAuthenticator.AuthenticateAsync() metodu . Tím se pod pokličkou použije nativní rozhraní API pro přihlašování Apple, aby uživatelé na těchto zařízeních našli nejlepší možné prostředí. Sdílený kód můžete napsat tak, aby za běhu mohl používat správné rozhraní API, například:
var scheme = "..."; // Apple, Microsoft, Google, Facebook, etc.
WebAuthenticatorResult r = null;
if (scheme.Equals("Apple")
&& DeviceInfo.Platform == DevicePlatform.iOS
&& DeviceInfo.Version.Major >= 13)
{
// Use Native Apple Sign In API's
r = await AppleSignInAuthenticator.AuthenticateAsync();
}
else
{
// Web Authentication flow
var authUrl = new Uri(authenticationUrl + scheme);
var callbackUrl = new Uri("xamarinessentials://");
r = await WebAuthenticator.AuthenticateAsync(authUrl, callbackUrl);
}
var authToken = string.Empty;
if (r.Properties.TryGetValue("name", out var name) && !string.IsNullOrEmpty(name))
authToken += $"Name: {name}{Environment.NewLine}";
if (r.Properties.TryGetValue("email", out var email) && !string.IsNullOrEmpty(email))
authToken += $"Email: {email}{Environment.NewLine}";
// Note that Apple Sign In has an IdToken and not an AccessToken
authToken += r?.AccessToken ?? r?.IdToken;
Tip
U jiných zařízení než iOS 13 se spustí tok webového ověřování, který je možné použít také k povolení přihlášení Apple na zařízeních s Androidem a UPW. Můžete se přihlásit ke svému účtu na iCloudu na simulátoru iOS a otestovat přihlášení Apple.