Anpassen von Browsern und WebViews für iOS/macOS

Ein Webbrowser ist Voraussetzung für die interaktive Authentifizierung. Unter iOS und macOS 10.15+ verwendet das Microsoft Authentication Library (MSAL) (MSAL) standardmäßig den Systemwebbrowser (der möglicherweise über Ihrer App angezeigt wird), um interaktive Authentifizierung für die Anmeldung von Benutzern durchzuführen. Die Verwendung des Systembrowsers hat den Vorteil, den SSO-Zustand (Single Sign-On) mit anderen Anwendungen und webanwendungen zu teilen.

Sie können die Oberfläche ändern, indem Sie die Konfiguration auf andere Optionen zum Anzeigen von Webinhalten anpassen, z. B.:

Nur für iOS:

Für iOS und macOS:

MSAL für macOS unterstützt WKWebView nur unter älteren Betriebssystemversionen. ASWebAuthenticationSession wird nur unter macOS 10.15 und höher unterstützt.

Systembrowser

Für iOS, ASWebAuthenticationSession, SFAuthenticationSessionund SFSafariViewController werden als Systembrowser betrachtet. Für macOS ist nur ASWebAuthenticationSession verfügbar. Im Allgemeinen teilen Systembrowser Cookies und andere Websitedaten mit der Safari-App.

Standardmäßig erkennt MSAL die iOS-Version dynamisch und wählt den empfohlenen Systembrowser aus, der in dieser Version verfügbar ist. Auf iOS 12+ wird es sein ASWebAuthenticationSession.

Standardkonfiguration für iOS

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

Standardkonfiguration für macOS

Version Webbrowser
macOS 10.15+ ASWebAuthenticationSession
andere Versionen WKWebView

Entwickler können auch einen anderen Systembrowser für MSAL-Apps auswählen:

  • SFAuthenticationSession ist die iOS 11-Version von ASWebAuthenticationSession.
  • SFSafariViewController ist allgemeiner und bietet eine Schnittstelle zum Surfen im Web und kann auch für Anmeldezwecke verwendet werden. In iOS 9 und 10 werden Cookies und andere Websitedaten mit Safari geteilt- aber nicht in iOS 11 und höher.

In-App-Browser

WKWebView ist ein In-App-Browser, der Webinhalte anzeigt. Sie teilt keine Cookies oder Website-Daten mit anderen WKWebView-Instanzen oder mit dem Browser Safari. WKWebView ist ein plattformübergreifender Browser, der sowohl für iOS als auch für macOS verfügbar ist.

Der von Ihnen verwendete Browser wirkt sich auf die SSO-Erfahrung aus, weil sie Cookies teilen. In den folgenden Tabellen sind die SSO-Erfahrungen pro Browser zusammengefasst.

Technologie Browsertyp iOS-Verfügbarkeit macOS-Verfügbarkeit Teilt Cookies und andere Daten MSAL-Verfügbarkeit Single Sign-On (SSO)
ASWebAuthenticationSession System iOS12 und oben macOS 10.15 und oben Yes iOS und macOS 10.15+ w/ Safari-Instanzen
SFAuthenticationSession System iOS11 und nach oben N/A Yes Nur iOS w/ Safari-Instanzen
SFSafariViewController System iOS11 und nach oben N/A No Nur iOS Nein**
SFSafariViewController System iOS10 N/A Yes Nur iOS w/ Safari-Instanzen
WKWebView In-App iOS8 und oben macOS 10.10 und oben No iOS und macOS Nein**

** Damit SSO funktioniert, müssen Token zwischen Apps gemeinsam genutzt werden. Dies erfordert einen Tokencache oder eine Brokeranwendung, z. B. Microsoft Authenticator für iOS.

Ändern des Standardbrowsers für die Anforderung

Sie können je nach Ihren UX-Anforderungen einen In-App-Browser oder einen bestimmten Systembrowser verwenden, indem Sie die folgende Eigenschaft ändern:MSALWebviewParameters

@property (nonatomic) MSALWebviewType webviewType;

Änderung auf interaktive Anfrage

Jede Anfrage kann so konfiguriert werden, dass sie den Standardbrowser überschreibt, indem vor der Übergabe an die acquireTokenWithParameters:completionBlock:-API die Eigenschaft MSALInteractiveTokenParameters.webviewParameters.webviewType geändert wird.

Darüber hinaus unterstützt MSAL das Übergeben eines benutzerdefinierten WKWebView Objekts durch Festlegen der MSALInteractiveTokenParameters.webviewParameters.customWebView Eigenschaft.

Beispiel:

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)

Wenn Sie eine benutzerdefinierte Webansicht verwenden, werden Benachrichtigungen verwendet, um den Status des angezeigten Webinhalts anzugeben, z. B.:

/*! 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 von MSAL unterstützten Webbrowsertypen werden in der MSALWebviewType-Enumeration deklariert.

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,
};

Nächste Schritte

Weitere Informationen zu Authentifizierungsflüssen und Anwendungsszenarien