Přizpůsobení prohlížečů a webových zobrazení pro iOS/macOS

Pro interaktivní ověřování se vyžaduje webový prohlížeč. V iOSu a macOS 10.15+používá Identity a ověřování Microsoftu (MSAL) ve výchozím nastavení systémový webový prohlížeč (který se může objevit nad vaší aplikací) k interaktivnímu ověřování pro přihlášení uživatelů. Použití systémového prohlížeče má výhodu sdílení stavu jednotného přihlašování (SSO) s jinými aplikacemi a webovými aplikacemi.

Prostředí můžete změnit přizpůsobením konfigurace na další možnosti zobrazení webového obsahu, například:

Pouze pro iOS:

Pro iOS a macOS:

MSAL pro macOS podporuje WKWebView jenom starší verze operačního systému. ASWebAuthenticationSession je podporován pouze v macOS 10.15 a novějších.

Systémové prohlížeče

Pro iOS, ASWebAuthenticationSession, SFAuthenticationSessiona SFSafariViewController jsou považovány za systémové prohlížeče. Pro macOS je k dispozici pouze ASWebAuthenticationSession . Obecně platí, že systémové prohlížeče sdílejí soubory cookie a další data webových stránek s aplikací prohlížeče Safari.

Ve výchozím nastavení MSAL dynamicky rozpozná verzi systému iOS a vybere doporučený systémový prohlížeč dostupný pro danou verzi. V iOSu 12+ to bude ASWebAuthenticationSession.

Výchozí konfigurace pro iOS

Version webový prohlížeč
iOS 12 a novější ASWebAuthenticationSession
iOS 11 SFAuthenticationSession
iOS 10 SFSafariViewController

Výchozí konfigurace pro macOS

Version webový prohlížeč
macOS 10.15+ ASWebAuthenticationSession
jiné verze WKWebView

Vývojáři můžou také vybrat jiný systémový prohlížeč pro aplikace MSAL:

  • SFAuthenticationSession je iOS 11 verze ASWebAuthenticationSession.
  • SFSafariViewController je obecnější a poskytuje rozhraní pro procházení webu a lze ho použít i pro účely přihlášení. V iOSu 9 a 10 se soubory cookie a další data webových stránek sdílí se safari, ale ne v iOSu 11 a novějším.

Prohlížeč v aplikaci

WKWebView je prohlížeč v aplikaci, který zobrazuje webový obsah. Nesdílí soubory cookie ani data webu s jinými instancemi WKWebView ani prohlížečem Safari. WKWebView je multiplatformní prohlížeč, který je k dispozici pro iOS i macOS.

Prohlížeč, který používáte, má vliv na prostředí jednotného přihlašování z důvodu toho, jak sdílejí soubory cookie. Následující tabulky shrnují fungování jednotného přihlašování pro jednotlivé prohlížeče.

Technologie Typ prohlížeče Dostupnost iOSu Dostupnost macOS Sdílí soubory cookie a další data. Dostupnost MSAL jednotné přihlášení
ASWebAuthenticationSession Systém iOS12 a novější macOS 10.15 a novější Ano iOS a macOS 10.15+ instance se Safari
SFAuthenticationSession Systém iOS11 a novější N/A Ano Jenom iOS instance w/ Safari
SFSafariViewController Systém iOS11 a novější N/A No Jenom iOS Ne**
SFSafariViewController Systém iOS10 N/A Ano Jenom iOS s instancemi Safari
WKWebView V aplikaci iOS8 a novější macOS 10.10 a novější No iOS a macOS Ne**

** Aby jednotné přihlašování fungovalo, musí se tokeny sdílet mezi aplikacemi. To vyžaduje mezipaměť tokenů nebo zprostředkovou aplikaci, například Microsoft Authenticator pro iOS.

Změna výchozího prohlížeče pro požadavek

V závislosti na vašich požadavcích na uživatelské prostředí můžete použít prohlížeč v aplikaci nebo konkrétní systémový prohlížeč tak, že změníte následující vlastnost v MSALWebviewParameters:

@property (nonatomic) MSALWebviewType webviewType;

Změna podle interaktivního požadavku

Každý požadavek lze nakonfigurovat tak, aby změnil výchozí prohlížeč úpravou vlastnosti MSALInteractiveTokenParameters.webviewParameters.webviewType před jeho předáním rozhraní API acquireTokenWithParameters:completionBlock:.

Kromě toho MSAL podporuje předání vlastní WKWebView nastavením vlastnosti MSALInteractiveTokenParameters.webviewParameters.customWebView.

Příklad:

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)

Pokud používáte vlastní webové zobrazení, oznámení slouží k označení stavu zobrazeného webového obsahu, například:

/*! 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;

Možnosti

Všechny typy webových prohlížečů podporované knihovnou MSAL jsou deklarovány v výčtu 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,
};

Další kroky

Další informace o tocích ověřování a scénářích aplikací