在iOS 11中使用SFAuthenticationSession创建SSO

时间:2017-09-25 21:00:15

标签: ios swift ios11 sfsafariviewcontroller sfauthenticationsession

我正在处理两个iOS应用程序,它们共享相同的钥匙串令牌,当用户通过在Web视图中输入用户名和密码登录任一应用程序时,它们会收到这些令牌。保存在钥匙串中的令牌保存时间限制为几小时/天 - 当用户使用应用程序并进行请求/输入正在浏览器中打开的项目时,它们会被刷新。

在iOS 11发布之前,应用程序中的Web视图是一个SFSafariViewController实例,它非常方便,因为它共享了应用程序之间的cookie,一旦用户在一个应用程序的浏览器中登录,他就会自动登录到其他应用程序,从而实现SSO体验。

在iOS 11中,SFSafariViewController的行为发生了变化,它不再共享我的两个应用程序中不同SFSafariViewController实例之间的cookie。相反,Apple希望我们使用SFAuthenticationSession来实现相同的行为。

在我的应用程序中,我有一个大约50行的表,几乎所有这些行都在SFSafariViewController中打开了一个不同的URL。所以现在,在iOS 11中,我每次都需要创建一个新的SFAuthenticationSession实例(创建实例后不能更改URL),为了实际显示Web视图,我需要调用start()方法在这个例子上。但是,此方法只能在同一个实例上调用一次(否则它将返回'false'并且不执行任何操作),并且每次调用它时,它都会弹出“myapp”要使用“mydomain.com”的通知登录。 因此,这意味着我的用户会在表格中的每一行上看到此警报消息。

有没有办法让我的应用只显示一次同意提醒消息,例如在第一次或什么?我希望我的用户在我的两个应用程序中拥有SSO体验,这就是我首先使用SFSafariViewController的原因,但我不希望他们在应用程序中每次点击时看到这个恼人的警报。

1 个答案:

答案 0 :(得分:2)

目前无法使用SFAuthenticationSession仅显示提醒消息一次,我们在应用上遇到了同样的问题。

我和其他许多人一起向Apple提交了一个有关此问题的错误,要求他们只按照您的建议展示一次。 this GitHub thread的结尾讨论了警报。