问题标签 [sfauthenticationsession]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1588 浏览

ios - 有没有办法在显示 SFAuthenticationSession 提示之前知道是否有可用的 cookie

在 iOS 11 上,Apple 引入了一种在 Web 和移动应用程序之间共享身份验证数据的新方法SFAuthenticationSession

SFAuthenticationSession向每个可能从未使用过我的网站的新用户显示提示以让他们同意,然后从中一无所获并要求他们登录,这将是一种糟糕的用户体验。

苹果方面的文档很空。这是我找到的唯一例子。

有没有办法在显示提示之前知道是否有可用的 cookie SFAuthenticationSession?或者,Associated Domains启用后,在使用我的域进行身份验证时,系统不应该显示提示?

0 投票
1 回答
3571 浏览

ios - 与 Safari 同步 - SFSafariViewController 的扩展

我知道它SFSafariViewController有私有 cookie 存储和其他实现。但是,我知道我们可以为每个(每个本机系统)Swift 类编写一个扩展。我需要与本机 Safari 共享 cookie,或者Safari通过一些标头请求从我的应用程序中打开。至少,如何创建一个API用于获取/设置cookies?

0 投票
1 回答
2292 浏览

ios - 在 iOS 11 中使用 SFAuthenticationSession 创建 SSO

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

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

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

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

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

0 投票
5 回答
14261 浏览

ios - SFAuthenticationSession/ASWebAuthenticationSession 和注销

我计划将应用程序从带有 的旧 OAuth 流程切换SFSafariViewController到带有 iOS 11 的新流程SFAuthenticationSession。登录不是问题,转移到新 API 花了我几分钟时间来实现。但是注销让我感到困惑。

如何?

我找不到任何提及想要在文档中的任何位置提供注销选项的内容。使用旧SFSafariViewController的使cookies无效?不,它们不再与SFAuthenticationSession. 一旦我重新启动身份验证会话,用户就会自动登录并且没有出路。那么如何启用注销呢?还是我只是忽略了一些完全明显的东西?

更新:我发现了一种技术意义上的“有效方式”,但它对用户来说很疯狂:在清除 cookie 的注销页面上打开一个新的 SFAuthenticationSession。但这意味着在注销时,警报视图会再次询问用户是否愿意通过该服务登录。如果选择(“登录”),则打开 cookie 清除注销页面,用户必须手动关闭视图,这可以被完成处理程序捕获,我们知道我们可以再次打开登录视图.. 显示登录提示退出?我真的不喜欢这个解决方案。

有任何想法吗?我是否仍然忽略了一个完全明显的解决方案?

更新 2:由于到目前为止没有人对此问题有任何线索,这可能不是一件容易的事。我已经通过他们的报告工具向 Apple 提交了一个建议,以阐明如何处理此问题或将其构建到 API 中(如果不可用)。如果我得到答案,将发布。

更新 3:在进一步思考这个问题后,我们发现了另一种可能的(虽然也没有吸引力)解决方案,如果您可以影响 OAuth 提供程序的登录页面:使 cookie 的寿命很短。然后登录页面可以在没有自动登录的情况下打开。但是这会破坏在应用程序之间共享登录会话的整个目的......并且您需要能够影响登录页面。

更新 4:由于 iOS 12SFAuthenticationSession已被弃用并被ASWebAuthenticationSession. 但是ASWebAuthenticationSession,在注销方面没有任何改变。这仍然是不可能的。和以前一样的问题。

0 投票
1 回答
614 浏览

ios - 使用 addUIInterruptionMonitor() 清除 XCUITest 中的 SFAuthenticationSession 警报

有没有人成功地用来addUIInterruptionMonitor清除运行 XCUITest 时start()产生的警报?SFAuthenticationSession

我无法让它在 Xcode 9.1/iOS 11.1.1(模拟器或设备)上运行。标准建议(设置处理程序并随后在警报出现之前与设备交互)没有帮助。

测试记录器说app.alerts.firstMatch.buttons["Continue"]).tap()应该可以解决问题,但这也不起作用。来自另一个 SO 答案的这种技术有时可以工作,但在 CI 上并不始终如一。

所以我想知道“官方”解决方案是否对任何人都有效。

0 投票
1 回答
1374 浏览

ios - 为什么 SFAuthenticationSession 每次都提示同意?

我正在SFAuthenticationSession使用SSOOAuth

调用该start()方法时,iOS 会弹出一个同意对话框,要求用户允许应用程序使用OAuth提供程序。每次启动身份验证会话时都会出现同意弹出窗口。

这是设计使然吗?它似乎应该出现一次,就像其他同意对话框一样。

0 投票
0 回答
456 浏览

ios - SFAuthenticationSession 是否在应用程序之间共享 cookie

我正在使用单点登录 (SSO) 让用户登录 iOS 应用程序。我使用 SFAuthenticationSession 实现了 SSO。我创建了另一个应用程序并实现了使用相同登录 URL 的相同 SSO 机制。我期待这两个应用程序将共享相同的 SFAuthenticationSession cookie,以便用户在成功登录第一个应用程序后不会在第二个应用程序中再次输入密码。不共享cookies是SFAuthenticationSession的正常行为吗?如果是,这意味着不可能使用 SFAuthenticationSession 实现 SSO 机制?使用普通的 webviews 会解决这个问题吗?我在论坛上找到了一个类似的主题,但问题是在 ios 11 beta 上遇到的。也许问题在此期间解决了?

0 投票
1 回答
174 浏览

objective-c - login.microsoftonline.com 无法使用 Xcode 9 模拟器工作

有人使用 AppAuth 9.1 和 Xcode 9 吗?我已成功使用 SFAuthenticationSession 调用我想要的登录页面,然后将我重定向到 login.microsoftonline.com .. 但是,我得到了这个空白页面。

我在我的 ios 10.2 设备上运行没有任何问题,或者在 Xcode 8 模拟器上运行有任何问题。接受建议!

在此处输入图像描述

更新:我注意到 login.microsoftonline.com 之后的所有信息都丢失了。但不确定是什么原因

0 投票
1 回答
915 浏览

ios - SFSafariViewController 的 SSO 体验

SFSafariViewController描述中写道

您将使用 SFAuthenticationSession 的两种情况是:

使用身份验证协议(例如 OAuth)登录第三方服务。此选项适用于社交网络应用程序。

为应用程序提供单点登录 (SSO) 体验。此选项适用于在同一设备上安装了许多应用程序的企业公司。

我想实现第二种情况。我有不同的应用程序并使用 SFSafariViewController 来实现 SSO。问题是在我的测试中,cookie 没有在不同的应用程序之间共享。我登录了一个应用程序,然后当我尝试使用相同的登录 URL 登录另一个应用程序时,我必须再次写入我的凭据,即使会话在第一个应用程序中仍然处于活动状态。这是正常的行为吗?如果我的应用程序之间没有共享 cookie,我应该如何实现 SSO 体验?

0 投票
0 回答
1085 浏览

oauth - iOS 11 AppAuth 处理重定向的重定向 URI

在我的 iOS 应用程序(特别是 iOS 11 )上使用AppAuth (v 0.90.0)进行 Google OAuth 身份验证时,会发生以下情况:

  1. 使用重定向 URI 在 iOS 客户端上启动 Google 身份验证http://myproduct.com/oauth-redirect。因为客户端 ID 是 Web 应用程序的 ID,所以我无法指定自定义 URL。
  2. AppAuth 在客户端启动 SFAuthenticationSession,系统提示我允许登录。选择继续。(https://github.com/openid/AppAuth-iOS/blob/0.90.0/Source/iOS/OIDAuthorizationUICoordinatorIOS.m#L91-L95
  3. http://myproduct.com/oauth-redirect重定向到自定义 URL myproduct://auth,并且 SFAuthenticationSession 完成块使用回调 URL 运行myproduct://auth
  4. 当 AppAuth 恢复身份验证流程时,它会检查原始 URL 是否与上一步中的回调 URL 相同:https ://github.com/openid/AppAuth-iOS/blob/0.90.0/Source/OIDAuthorizationService.m #L108-L110
  5. 因为http://myproduct.com/oauth-redirectmyproduct://auth不同,所以流动停止。

请注意,我正在使用 Web 应用程序 clientID,以便我可以在服务器端执行令牌交换。

在以前的 AppAuth 版本中,这是可能的,因为我能够resumeAuthorizationFlowWithURL直接使用更新后的 URL 进行调用。

有没有办法支持这个用例而无需更新 AppAuth?