iOS/macOS için tarayıcıları ve WebView'ları özelleştirme

Etkileşimli kimlik doğrulaması için bir web tarayıcısı gereklidir. iOS ve macOS 10.15+ sürümünde, Microsoft Authentication Library (MSAL), kullanıcıların oturum açması için etkileşimli kimlik doğrulaması yapmak için varsayılan olarak sistem web tarayıcısını kullanır (uygulamanızın üstünde görünebilir). Sistem tarayıcısının kullanılması, çoklu oturum açma (SSO) durumunu diğer uygulamalarla ve web uygulamalarıyla paylaşma avantajına sahiptir.

Web içeriğini görüntülemeye yönelik yapılandırmayı aşağıdaki gibi diğer seçeneklerle özelleştirerek deneyimi değiştirebilirsiniz:

Yalnızca iOS için:

iOS ve macOS için:

macOS için MSAL yalnızca eski işletim sistemi sürümlerini destekler WKWebView . ASWebAuthenticationSession yalnızca macOS 10.15 ve üzeri sürümlerde desteklenir.

Sistem tarayıcıları

iOS, ASWebAuthenticationSession, SFAuthenticationSessionve SFSafariViewController için sistem tarayıcıları olarak kabul edilir. macOS için yalnızca ASWebAuthenticationSession kullanılabilir. Genel olarak, sistem tarayıcıları Safari tarayıcı uygulamasıyla tanımlama bilgilerini ve diğer web sitesi verilerini paylaşır.

Varsayılan olarak MSAL, iOS sürümünü dinamik olarak algılar ve bu sürümde kullanılabilen önerilen sistem tarayıcısını seçer. iOS 12 ve sonrasında bu ASWebAuthenticationSession olacaktır.

iOS için varsayılan yapılandırma

Version Web tarayıcısı
iOS 12+ ASWebAuthenticationSession
iOS 11 SFAuthenticationSession
iOS 10 SFSafariViewController

macOS için varsayılan yapılandırma

Version Web tarayıcısı
macOS 10.15+ ASWebAuthenticationSession
diğer sürümler WKWebView

Geliştiriciler MSAL uygulamaları için farklı bir sistem tarayıcısı da seçebilir:

  • SFAuthenticationSession , 'nin iOS 11 sürümüdür ASWebAuthenticationSession.
  • SFSafariViewController daha genel amaçlıdır ve web'e göz atmak için bir arabirim sağlar ve oturum açma amacıyla da kullanılabilir. iOS 9 ve 10'da tanımlama bilgileri ve diğer web sitesi verileri Safari ile paylaşılır ancak iOS 11 ve sonraki sürümlerde paylaşılmaz.

Uygulama içi tarayıcı

WKWebView , web içeriğini görüntüleyen bir uygulama içi tarayıcıdır. Tanımlama bilgilerini veya web sitesi verilerini diğer WKWebView örnekleriyle veya Safari tarayıcısıyla paylaşmaz. WKWebView, hem iOS hem de macOS için kullanılabilen platformlar arası bir tarayıcıdır.

Kullandığınız tarayıcı, tanımlama bilgilerini paylaşma şekli nedeniyle SSO deneyimini etkiler. Aşağıdaki tablolarda tarayıcı başına SSO deneyimleri özetlenmiştir.

Teknoloji Tarayıcı Türü iOS kullanılabilirliği macOS kullanılabilirliği Tanımlama bilgilerini ve diğer verileri paylaşır MSAL kullanılabilirliği Tek oturum açma (SSO)
ASWebAuthenticationSession System iOS12 ve üstü macOS 10.15 ve üstü Yes iOS ve macOS 10.15+ w/ Safari örnekleri
SFAuthenticationSession System iOS11 ve üstü N/A Yes Yalnızca iOS w/ Safari örnekleri
SFSafariViewController System iOS11 ve üstü N/A Hayır Yalnızca iOS Hayır**
SFSafariViewController System iOS10 N/A Yes Yalnızca iOS w/ Safari örnekleri
WKWebView Uygulama içi iOS8 ve üstü macOS 10.10 ve üstü Hayır iOS ve macOS Hayır**

** SSO'nun çalışması için belirteçlerin uygulamalar arasında paylaşılması gerekir. Bu, iOS için Microsoft Authenticator gibi bir belirteç önbelleği veya aracı uygulaması gerektirir.

İstek için varsayılan tarayıcıyı değiştirme

uygulamasında aşağıdaki özelliği MSALWebviewParametersdeğiştirerek UX gereksinimlerinize bağlı olarak uygulama içi tarayıcıyı veya belirli bir sistem tarayıcısını kullanabilirsiniz:

@property (nonatomic) MSALWebviewType webviewType;

Etkileşimli istek başına değiştirme

Her istek, özelliği API'ye geçirmeden önce değiştirilerek varsayılan tarayıcıyı MSALInteractiveTokenParameters.webviewParameters.webviewTypeacquireTokenWithParameters:completionBlock: geçersiz kılacak şekilde yapılandırılabilir.

Ayrıca MSAL, MSALInteractiveTokenParameters.webviewParameters.customWebView özelliği ayarlanarak özel WKWebView iletilmesini destekler.

Örneğin:

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)

Özel bir web görünümü kullanıyorsanız, görüntülenen web içeriğinin durumunu belirtmek için bildirimler kullanılır, örneğin:

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

MSAL tarafından desteklenen tüm web tarayıcısı türleri MSALWebviewType sabit listesinde bildirilir

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

Sonraki Adımlar

Kimlik doğrulama akışları ve uygulama senaryoları hakkında daha fazla bilgi edinin