Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Microsoft Authentication Library (MSAL) для macOS и iOS поддерживает единый вход между приложениями и браузерами macOS/iOS. В этой статье рассматриваются следующие сценарии единого входа:
Этот тип единого входа (SSO) работает между несколькими приложениями, распространяемыми одним и тем же разработчиком Apple. Это обеспечивает тихий SSO (то есть у пользователя не запрашиваются учетные данные), считывая токены обновления, записанные другими приложениями в связке ключей, и незаметно обменивая их на токены доступа.
Microsoft предоставляет приложения, называемые брокерами, которые обеспечивают единый вход (SSO) между приложениями разных поставщиков при условии, что мобильное устройство зарегистрировано в Microsoft Entra ID. Для этого типа единого входа требуется установить приложение брокера на устройстве пользователя.
- Единый вход между MSAL и Safari
Единый вход достигается с помощью класса ASWebAuthenticationSession. Он использует существующее состояние входа из других приложений и браузера Safari. Это не ограничивается приложениями, распределенными одним и тем же разработчиком Apple, но для этого требуется некоторое взаимодействие с пользователем.
Если вы используете в приложении веб-представление по умолчанию для входа пользователей в систему, будет автоматически доступен единый вход между приложениями на базе MSAL и Safari. Дополнительные сведения о веб-представлениях, поддерживаемых MSAL, см. в статье "Настройка браузеров и веб-представлений".
Этот тип единого входа в настоящее время недоступен в macOS. MSAL в macOS поддерживает только WKWebView, которая не поддерживает единый вход в Safari.
Note
IOS очищает файлы cookie сеанса сразу после входа из-за использования временного браузера для выполнения входа. Этот браузер не передаёт сеансовые файлы cookie. Чтобы SSO работал на iOS, необходимо включить KMSI, чтобы использовать постоянные файлы cookie.
- Бесшовный единый вход в приложениях ADAL и MSAL для macOS/iOS
MSAL Objective-C поддерживает миграцию и единый вход с приложениями на основе ADAL Objective C. Приложения должны распространяться тем же разработчиком Apple.
Инструкции по межприложенческому единому входу между приложениями на основе ADAL и MSAL см. в статье SSO между приложениями ADAL и MSAL в macOS и iOS.
Бесшовный SSO между приложениями
MSAL поддерживает общий доступ к единому входу через группы доступа к цепочке ключей iOS.
Чтобы включить единый вход в приложения, вам потребуется выполнить следующие действия, описанные ниже.
- Убедитесь, что все приложения используют один и тот же идентификатор клиента или идентификатор приложения.
- Убедитесь, что все приложения совместно используют один и тот же сертификат подписи из Apple, чтобы предоставить общий доступ к цепочкам ключей.
- Запросите одно и то же право доступа к связке ключей для всех ваших приложений.
- Сообщите библиотекам MSAL SDK об общей цепочке ключей, которую нужно использовать, если она отличается от цепочки ключей по умолчанию.
Использование одного и того же идентификатора клиента и идентификатора приложения
Чтобы платформа идентификации Microsoft знала, какие приложения могут совместно использовать токены, эти приложения должны иметь один и тот же идентификатор клиента или идентификатор приложения. Это уникальный идентификатор, предоставленный при регистрации первого приложения на портале.
Способ, с помощью которого платформа удостоверений Microsoft различает приложения, использующие один и тот же идентификатор приложения, — по их URI перенаправления. Каждое приложение может иметь несколько URI перенаправления, зарегистрированных на портале подключения. У каждого приложения в вашем наборе будет свой URI перенаправления. Рассмотрим пример.
URI перенаправления App1: msauth.com.contoso.mytestapp1://auth
URI перенаправления App2: msauth.com.contoso.mytestapp2://auth
URI перенаправления App3: msauth.com.contoso.mytestapp3://auth
Формат URI перенаправления должен быть совместим с поддерживаемым форматом MSAL, который задокументирован в требованиях к формату URI перенаправления MSAL.
Настройка общего доступа к цепочке ключей между приложениями
См. статью Apple «Добавление функциональных возможностей», чтобы включить совместное использование связки ключей. Важно, чтобы вы решили, как назвать свою связку ключей, и добавили эту возможность во все приложения, которые будут участвовать в едином входе (SSO).
При правильной настройке прав вы увидите entitlements.plist файл в каталоге проекта, который содержит примерно следующий пример:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.myapp.mytestapp</string>
<string>$(AppIdentifierPrefix)com.myapp.mycache</string>
</array>
</dict>
</plist>
Добавление новой группы цепочки ключей
Добавьте новую группу цепочек ключей в проект функции. Группа цепочки ключей должна быть следующей:
-
com.microsoft.adalcacheв iOS -
com.microsoft.identity.universalstorageв macOS.
Дополнительные сведения см. в группах цепочки ключей.
Настройка объекта приложения
После того как вы включите возможность доступа к связке ключей в каждом из ваших приложений и будете готовы использовать SSO, настройте MSALPublicClientApplication, указав вашу группу доступа к связке ключей, как показано в следующем примере:
Objective-C.
NSError *error = nil;
MSALPublicClientApplicationConfig *configuration = [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"<my-client-id>"];
configuration.cacheConfig.keychainSharingGroup = @"my.keychain.group";
MSALPublicClientApplication *application = [[MSALPublicClientApplication alloc] initWithConfiguration:configuration error:&error];
Swift:
let config = MSALPublicClientApplicationConfig(clientId: "<my-client-id>")
config.cacheConfig.keychainSharingGroup = "my.keychain.group"
do {
let application = try MSALPublicClientApplication(configuration: config)
// continue on with application
} catch let error as NSError {
// handle error here
}
Предупреждение
При совместном использовании цепочки ключей в приложениях любой из приложений может удалять пользователей или даже все маркеры в приложении. Это особенно влияет, если у вас есть приложения, которые полагаются на маркеры для выполнения фоновой работы. Совместное использование связки ключей означает, что при использовании операций удаления в пакете SDK Microsoft Identity вашему приложению следует быть очень осторожным.
Вот и все! SDK идентификации Microsoft теперь будет использовать общие учетные данные во всех ваших приложениях. Список учетных записей также будет общим для экземпляров приложения.
SSO через брокер аутентификации в iOS
MSAL поддерживает проверку подлинности через брокер с помощью Microsoft Authenticator. Microsoft Authenticator предоставляет единый вход для Microsoft Entra зарегистрированных устройств, а также помогает приложению следовать политикам условного доступа.
Ниже описано, как включить единый вход с помощью брокера проверки подлинности для приложения:
Зарегистрируйте в файле Info.plist приложения URI перенаправления в формате, совместимом с брокером. Совместимый с брокером формат URI перенаправления:
msauth.<app.bundle.id>://auth. Замените "<app.bundle.id>" идентификатором пакета приложения. Рассмотрим пример.<key>CFBundleURLSchemes</key> <array> <string>msauth.<app.bundle.id></string> </array>Добавьте следующие схемы в файл Info.plist вашего приложения в разделе
LSApplicationQueriesSchemes:<key>LSApplicationQueriesSchemes</key> <array> <string>msauthv2</string> <string>msauthv3</string> </array>Добавьте следующее в файл
AppDelegate.mдля обработки обратных вызовов:Objective-C.
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options { return [MSALPublicClientApplication handleMSALResponse:url sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]]; }Swift:
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String) }
Если вы используете Xcode 11, следует вместо этого поместить обработчик обратного вызова MSAL в файл SceneDelegate.
Если вы поддерживаете UISceneDelegate и UIApplicationDelegate для совместимости с более старыми версиями iOS, вызов MSAL необходимо поместить в оба файла.
Objective-C.
- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts
{
UIOpenURLContext *context = URLContexts.anyObject;
NSURL *url = context.URL;
NSString *sourceApplication = context.options.sourceApplication;
[MSALPublicClientApplication handleMSALResponse:url sourceApplication:sourceApplication];
}
Swift:
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let urlContext = URLContexts.first else {
return
}
let url = urlContext.url
let sourceApp = urlContext.options.sourceApplication
MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: sourceApp)
}