Browsers en WebViews voor iOS/macOS aanpassen

Een webbrowser is vereist voor interactieve verificatie. Op iOS en macOS 10.15+ gebruikt de Microsoft Authentication Library (MSAL) standaard de webbrowser van het systeem (die boven op uw app kan worden weergegeven) om interactieve verificatie uit te voeren om gebruikers aan te melden. Het gebruik van de systeembrowser heeft het voordeel dat u de status voor eenmalige aanmelding (SSO) deelt met andere toepassingen en met webtoepassingen.

U kunt de ervaring wijzigen door de configuratie aan te passen aan andere opties voor het weergeven van webinhoud, zoals:

Alleen voor iOS:

Voor iOS en macOS:

MSAL voor macOS ondersteunt WKWebView alleen oudere versies van het besturingssysteem. ASWebAuthenticationSession wordt alleen ondersteund op macOS 10.15 en hoger.

Systeembrowsers

Voor iOS, ASWebAuthenticationSession, SFAuthenticationSessionen SFSafariViewController worden beschouwd als systeembrowsers. Voor macOS is alleen ASWebAuthenticationSession beschikbaar. In het algemeen delen systeembrowsers cookies en andere websitegegevens met de Safari-browsertoepassing.

Standaard detecteert MSAL de iOS-versie dynamisch en selecteert u de aanbevolen systeembrowser die beschikbaar is voor die versie. Op iOS 12+ zal dit ASWebAuthenticationSessionzijn.

Standaardconfiguratie voor iOS

Versie Webbrowser
iOS 12+ ASWebAuthenticationSession
iOS 11 SFAuthenticationSession
iOS 10 SFSafariViewController

Standaardconfiguratie voor macOS

Versie Webbrowser
macOS 10.15+ ASWebAuthenticationSession
andere versies WKWebView

Ontwikkelaars kunnen ook een andere systeembrowser selecteren voor MSAL-apps:

  • SFAuthenticationSession is de iOS 11-versie van ASWebAuthenticationSession.
  • SFSafariViewController is algemener en biedt een interface voor surfen op internet en kan ook worden gebruikt voor aanmeldingsdoeleinden. In iOS 9 en 10 worden cookies en andere websitegegevens gedeeld met Safari, maar niet in iOS 11 en hoger.

In-app-browser

WKWebView is een in-app-browser die webinhoud weergeeft. Cookies of websitegegevens worden niet gedeeld met andere WKWebView-instanties of met de Safari-browser. WKWebView is een platformoverschrijdende browser die beschikbaar is voor zowel iOS als macOS.

De browser die u gebruikt, heeft gevolgen voor de SSO-ervaring vanwege de wijze waarop ze cookies delen. De volgende tabellen bevatten een overzicht van de SSO-ervaringen per browser.

Technologie Browsertype iOS-beschikbaarheid beschikbaarheid van macOS Cookies en andere gegevens delen MSAL-beschikbaarheid Single Sign-On (Eenmalige Aanmelding)
ASWebAuthenticationSession System iOS12 en hoger macOS 10.15 en hoger Yes iOS en macOS 10.15+ met Safari-instanties
SFAuthenticationSession System iOS11 en hoger N/A Yes Alleen iOS met Safari-instanties
SFSafariViewController System iOS11 en hoger N/A Nee. Alleen iOS Nee**
SFSafariViewController System iOS10 N/A Yes Alleen iOS met Safari-instanties
WKWebView In de app iOS8 en hoger macOS 10.10 en hoger Nee. iOS en macOS Nee**

** Om SSO te laten werken, moeten tokens tussen apps worden gedeeld. Hiervoor is een tokencache of brokertoepassing vereist, zoals Microsoft Authenticator voor iOS.

De standaardbrowser voor de aanvraag wijzigen

U kunt een in-app-browser of een specifieke systeembrowser gebruiken, afhankelijk van uw UX-vereisten, door de volgende eigenschap te wijzigen in MSALWebviewParameters:

@property (nonatomic) MSALWebviewType webviewType;

Wijzigen per interactieve aanvraag

Elke aanvraag kan worden geconfigureerd om de standaardbrowser te overschrijven door de MSALInteractiveTokenParameters.webviewParameters.webviewType eigenschap te wijzigen voordat deze aan de acquireTokenWithParameters:completionBlock: API wordt doorgegeven.

Daarnaast ondersteunt MSAL het doorgeven van een aangepaste WKWebView door de eigenschap MSALInteractiveTokenParameters.webviewParameters.customWebView in te stellen.

Voorbeeld:

Objective-C

UIViewController *myParentController = ...;
WKWebView *myCustomWebView = ...;
MSALWebviewParameters *webViewParameters = [[MSALWebviewParameters alloc] initWithAuthPresentationViewController:myParentController];
webViewParameters.webviewType = MSALWebviewTypeWKWebView;
webViewParameters.customWebview = myCustomWebView;
MSALInteractiveTokenParameters *interactiveParameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"myscope"] webviewParameters:webViewParameters];

[app acquireTokenWithParameters:interactiveParameters completionBlock:completionBlock];

Swift

let myParentController: UIViewController = ...
let myCustomWebView: WKWebView = ...
let webViewParameters = MSALWebviewParameters(authPresentationViewController: myParentController)
webViewParameters.webviewType = MSALWebviewType.wkWebView
webViewParameters.customWebview = myCustomWebView
let interactiveParameters = MSALInteractiveTokenParameters(scopes: ["myscope"], webviewParameters: webViewParameters)

app.acquireToken(with: interactiveParameters, completionBlock: completionBlock)

Als u een aangepaste webweergave gebruikt, worden meldingen gebruikt om de status aan te geven van de weergegeven webinhoud, zoals:

/*! Fired at the start of a resource load in the webview. The URL of the load, if available, will be in the @"url" key in the userInfo dictionary */
extern NSString *MSALWebAuthDidStartLoadNotification;

/*! Fired when a resource finishes loading in the webview. */
extern NSString *MSALWebAuthDidFinishLoadNotification;

/*! Fired when web authentication fails due to reasons originating from the network. Look at the @"error" key in the userInfo dictionary for more details.*/
extern NSString *MSALWebAuthDidFailNotification;

/*! Fired when authentication finishes */
extern NSString *MSALWebAuthDidCompleteNotification;

/*! Fired before ADAL invokes the broker app */
extern NSString *MSALWebAuthWillSwitchToBrokerApp;

Options

Alle door MSAL ondersteunde webbrowsertypen worden gedeclareerd in de enum MSALWebviewType

typedef NS_ENUM(NSInteger, MSALWebviewType)
{
    /**
     For iOS 11 and up, uses AuthenticationSession (ASWebAuthenticationSession or SFAuthenticationSession).
     For older versions, with AuthenticationSession not being available, uses SafariViewController.
     For macOS 10.15 and above uses ASWebAuthenticationSession
     For older macOS versions uses WKWebView
     */
    MSALWebviewTypeDefault,

    /** Use ASWebAuthenticationSession where available.
     On older iOS versions uses SFAuthenticationSession
     Doesn't allow any other webview type, so if either of these are not present, fails the request*/
    MSALWebviewTypeAuthenticationSession,

#if TARGET_OS_IPHONE

    /** Use SFSafariViewController for all versions. */
    MSALWebviewTypeSafariViewController,

#endif
    /** Use WKWebView */
    MSALWebviewTypeWKWebView,
};

Volgende stappen 

Meer informatie over verificatiestromen en toepassingsscenario's