Implementeren van eenmalige aanmelding voor systeemeigen apps naar ingesloten webweergaven.

Van toepassing op: Groene cirkel met een wit vinkje dat aangeeft dat de volgende inhoud van toepassing is op externe tenants. Externe tenants (meer informatie)

Wanneer uw mobiele app webfuncties bevat, zoals een profielupdatepagina of rewards-dashboard, verwachten gebruikers een naadloze ervaring voor eenmalige aanmelding. Ze mogen geen tweede aanmeldingsprompt tegenkomen nadat ze zich al via de systeemeigen app hebben aangemeld.

In dit artikel leest u hoe u eenmalige aanmelding (SSO) implementeert tussen een systeemeigen mobiele toepassing en een webresource die wordt gehost in een ingesloten webweergave (bijvoorbeeld WKWebView in iOS of WebView op Android). In tegenstelling tot systeembrowsers kunt u met ingesloten webweergaven netwerkaanvragen bewerken voordat ze worden verzonden. Met deze mogelijkheid kan uw app de verificatiestatus van de gebruiker rechtstreeks in aanvraagheaders injecteren.

De aanbevolen stroom werkt als volgt:

  1. De gebruiker meldt zich aan via de systeemeigen gebruikersinterface van de mobiele app met behulp van de Native Auth SDK of de systeemeigen verificatie-API.
  2. Voordat de webweergave wordt geladen, haalt de app een geldig toegangstoken op uit de SDK of API.
  3. De app laadt de webweergave met een aangepaste aanvraag die het toegangstoken in de Authorization: Bearer <access_token> header bevat.
  4. De webresource valideert het token en verleent onmiddellijk toegang.

In het volgende diagram ziet u de interactie tussen de webresource, mobiele app, SDK en de identiteitsservice (ESTS):

Sequentiediagram met de SSO-stroom waarin de mobiele app zich aanmeldt via SDK, tokens ontvangt en de webweergave laadt met het toegangstoken in de autorisatieheader.

Prerequisites

Aanmelden met systeemeigen verificatie

Voltooi de standaard aanmeldingsstroom met behulp van de Native Auth SDK of de systeemeigen verificatie-API. Wanneer aanmelden lukt met behulp van de SDK, wordt het toegangstoken, het id-token en het vernieuwingstoken veilig in de cache opgeslagen. Als u de API rechtstreeks gebruikt, is uw app verantwoordelijk voor het veilig opslaan van de tokens die worden ontvangen.

Zie voor gedetailleerde implementatiestappen voor aanmelding:

Het toegangstoken ophalen

Wanneer de gebruiker de actie activeert om de webweergave te openen, moet u ervoor zorgen dat de app een geldig, niet-verlopen toegangstoken heeft voordat de webresource wordt geladen.

Als u de Native Auth SDK gebruikt, vraagt u een token geruisloos aan. De SDK biedt een getAccessToken() methode waarmee een geldig token uit de cache wordt opgehaald of op de achtergrond wordt vernieuwd. Zie voor meer informatie over het verkrijgen van toegangstokens met specifieke scopes:

Als u de systeemeigen verificatie-API rechtstreeks gebruikt, haalt uw app tokens op via het eindpunt van /oauth/v2.0/token de API. Zie referentiemateriaal voor systeemeigen verificatie-API's voor meer informatie.

Vraag het token aan met de exacte toegangsrechten die nodig zijn voor de webresource. Zie voor bereikvereisten Beperkingen en configuratievereisten.

De webweergave laden met verificatie

Er zijn twee methoden om de verificatiestatus door te geven aan de webweergave. De aanbevolen benadering maakt gebruik van autorisatieheaders. Er is een terugvaloptie op basis van cookies beschikbaar voor verouderde scenario's, maar het gebruik ervan wordt afgeraden.

Injecteer het toegangstoken rechtstreeks in de header van de Authorization initiële HTTP-aanvraag die wordt gebruikt om de webweergave te laden. Dit is de veiligste en robuuste methode.

Deze benadering heeft de voorkeur omdat deze:

  • Staatloos: Het is niet afhankelijk van permanente cookies aan de clientzijde.
  • Hiermee wordt het token geïsoleerd: het token wordt strikt beperkt tot deze specifieke aanvraagstroom.
  • Vermijdt aanvalsvectoren op het web: Het omzeilt veelvoorkomende beveiligingsproblemen die zijn gekoppeld aan door browsers beheerde sessies.

De webweergave laden met verificatie op basis van headers:

  1. Bouw de URL voor de webresource. Zorg ervoor dat https wordt gebruikt.
  2. Maak een aangepast netwerkaanvraagobject.
  3. Voeg de header Authorization: Bearer <access_token> toe aan de aanvraag.
  4. Laad de aanvraag in het webweergaveonderdeel (bijvoorbeeld WKWebView op iOS of WebView op Android).

Optie B: Gebruik cookies (alleen als noodoplossing)

Als de doelwebresource geen verificatie op basis van headers kan verwerken (bijvoorbeeld bepaalde verouderde toepassingen met één pagina), kunt u het token injecteren als een cookie. Deze aanpak wordt over het algemeen afgeraden vanwege beveiligingsrisico's.

Door cookies in een webweergave te injecteren, wordt de verificatiestatus toevertrouwd aan een mechanisme dat door een browser wordt beheerd. Hierdoor wordt de sessie 'ambient' (automatisch gekoppeld aan aanvragen) die de app blootstelt aan standaard webaanvalklassen:

  • XSS (cross-site scripting): de sessie is kwetsbaar voor hijacking als de webinhoud wordt aangetast.
  • CSRF (aanvraagvervalsing op meerdere sites): er bestaat een risico op onbedoelde geverifieerde aanvragen.
  • Sessiefixatie: een aanvaller kan de sessiestatus beheren.
  • Naleving: Deze benadering is strijdig met aanbevolen beveiligingsprocedures (bijvoorbeeld MASTG-KNOW-0018) met betrekking tot persistente gevoelige status in cookie-jar's voor webweergaven.

Warning

De op cookies gebaseerde benadering wordt voorwaardelijk goedgekeurd en over het algemeen afgeraden. Gebruik deze alleen als de doelwebresource geen ondersteuning biedt voor header-gebaseerde verificatie.

Als u de op cookies gebaseerde benadering gebruikt, zijn deze vereisten van toepassing:

  • Gebruik waar mogelijk sessiecookies die door de server zijn uitgegeven.
  • Vermijd het direct plaatsen van onbewerkte toegangstokens in cookies.
  • Stel cookies in met de HttpOnly, Secureen de juiste SameSite kenmerken.
  • Dwing strikte CSRF-beveiliging aan de serverzijde af.

Het token op de back-end valideren en behouden

Wanneer de aanvraag de webresource bereikt, verwerkt de back-end het token om de sessie tot stand te brengen.

Het token valideren

De webserver onderschept binnenkomende aanvragen en verifieert de handtekening en claims van het token. Voor ASP.NET Core backends gebruikt u Microsoft.Identity.Web (MISE) om de validatie automatisch af te handelen.

Zorg ervoor dat de doelgroep (aud) van het token overeenkomt met de id van de web-API en dat de verlener (iss) claim overeenkomt met de verwachte instantie.

De sessie behouden

In de webweergave worden geen aangepaste headers bij volgende navigatie-gebeurtenissen bewaard (bijvoorbeeld wanneer de gebruiker een koppeling selecteert). Om de geverifieerde status na de eerste aanvraag te behouden, geeft de server een standaardsessiecooky (Set-Cookie) uit na een geslaagde validatie van het initiële bearer-token.

Configureer de sessiecooky met de volgende kenmerken:

  • HttpOnly
  • Secure
  • Een geschikt SameSite beleid

Beperkingen en configuratievereisten

Houd rekening met de volgende configuraties om ervoor te zorgen dat het token dat is uitgegeven aan de mobiele app wordt geaccepteerd door de webresource:

  • Gedeelde clientidentiteit: de mobiele app en web-app moeten dezelfde client-id (toepassings-id) delen. Als ze verschillende ID's hebben, weigert de back-end het token van de mobiele app vanwege een verschil in publiek.
  • Bereikuitlijning: de mobiele app vraagt het toegangstoken aan met de exacte bereiken die nodig zijn voor de webresource (bijvoorbeeld Profile.Read, Orders.Write).

Note

Deze oplossing is speciaal afgestemd op het webweergavescenario. Een meer algemene oplossing die SSO-mogelijkheden uitbreidt naar systeembrowsers en andere complexe scenario's, is gepland voor een toekomstige release.