Войдите в SFAuthenticationSession, затем откройте ссылку в SFSafariViewController, который выполняет SSO
Я использую AppAuth-iOS для входа в AD B2C, AppAuth-iOS использует SFAuthenticationSession для выполнения запросов аутентификации на iOS 11+. Я предположил, что когда я вызываю SFSafariViewController, чтобы открыть ссылку на веб-приложение, которое выполняет SSO с B2C, оно автоматически аутентифицирует пользователя в нем. Однако это не похоже на работу.
Разве это не должно работать? Я делаю это неправильно?
Я попытался изменить модуль AppAuth-iOS в своем проекте и попытался открыть запрос аутентификации в веб-просмотре и использовать веб-просмотр, чтобы также открыть ссылку... не работает. Кроме того, я читал о случаях, когда Safari не делился файлами cookie, относится ли это также к просмотру веб-страниц? Использует ли веб-браузер браузер Safari? Я также читал другие материалы, связанные с этой проблемой, но они сбивают меня с толку, и, в конце концов, для меня нет закрытия для них.
Это код из OIDExternalUserAgentIOS.m из AppAuth-iOS, который используется для связи приложения с входом в систему B2C:
SFAuthenticationSession *authenticationVC =
[[SFAuthenticationSession alloc] initWithURL:requestURL
callbackURLScheme:redirectScheme
completionHandler:^(NSURL * _Nullable callbackURL,
NSError * _Nullable error) {
__strong OIDExternalUserAgentIOS *strongSelf = weakSelf;
if (!strongSelf)
return;
strongSelf->_authenticationVC = nil;
if (callbackURL) {
[strongSelf->_session resumeExternalUserAgentFlowWithURL:callbackURL];
Я использую этот код, чтобы открыть ссылку,
SFSafariViewController *svc = [[SFSafariViewController alloc] initWithURL:URL];
svc.delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
[self presentViewController:svc animated:YES completion:nil];
Я надеюсь, что SSO будет работать между SFAuthenticationSession и SFSafariViewController.
Большое спасибо.
0 ответов
Я предполагаю, что вы пытались использовать WKwebView. В таком случае wkwebview не передает файлы cookie с веб-браузером Safari. Каждое веб-представление выполняется в отдельном процессе, отличном от изолированного.