在 SFSafariViewController 中设置请求授权头

Posted

技术标签:

【中文标题】在 SFSafariViewController 中设置请求授权头【英文标题】:Set the request Authorization header in SFSafariViewController 【发布时间】:2018-04-26 11:42:03 【问题描述】:

我有具有用户名和密码的应用程序,以便用户登录到该应用程序。 一些(不太重要的)功能仍然是网页。

但为了用户友好,用户在登录后再次登录很烦人。

我正在查看 SFSafariViewController,它看起来很有希望,但我试图在调用 URL 时设置 Authorization 标头。我已经知道用户令牌,但需要将其设置为授权标头。

所以流程是这样的:

User log in inside App -> get token -> set this token as Authorization header -> call my web app url

这个控制器可以做到吗?

【问题讨论】:

@Jeff,您浏览的网站是否由您控制?如果是,那么您应该能够使用 cookie 来做到这一点? SFSafariViewController 将与 Safari 共享 cookie。另外看看这是否有帮助github.com/MrCaiWH/HHDemo/blob/… 嗨@TarunLalwani,(@Jeff 没有发布问题:D)。是的,该网站在我的控制之下,是的,我可以使用 cookie 来做到这一点。但是,我记得你不能用 SFSafariViewController 中的代码设置你自己的 cookie。我知道它可以与 Safari 共享 cookie 存储,但我不想先用 Safari 登录,而是在我的应用程序中...... 您可以导航到 SFSafariViewController 中设置 cookie 本身的 url?既然你控制了网站,那么创建这样的 url 应该仍然是可能的? 因此,如果我理解正确,您建议我在网站上创建新端点,将用户名和密码放入 url 中,如果正确设置 cookie。在按钮上,我首先打开这个端点,然后在设置 cookie 时打开原始端点?我怎么知道什么时候需要调用原始站点?你有没有一个接一个地调用一个站点的例子... 所以你将重定向到第一个 url 本身,它应该检查是否设置了 cookie,如果没有,它会重定向到登录,用户登录并成功登录后,你重定向回现在可以工作的第一个 url .下次您来时,Safari 将存储您的 cookie,因此在 cookie 有效之前不会显示登录页面。如果您需要在标头中设置令牌,您将使用 axios 中间件自动将身份验证标头添加到请求中。所以最终它都可以用网络本身来处理。您需要从应用程序传达的任何信息都可以作为查询参数转到特殊 url 【参考方案1】:

正如所讨论的,你应该做什么

当您从应用程序登录时,您会收到一个令牌。接下来,您应该为login 创建一个额外的端点,例如loginWithToken。相同的格式可能类似于

https://example.com/loginWithToken?token=xyz&returnURL=def

从您的应用程序中,您将导航此 URL,然后它会执行与 login 页面相同的操作。将此令牌存储在 cookieslocalStorage 中。完成后,页面应重定向到returnURL

这样应用就无需从SFSafariViewController重新登录

【讨论】:

在 URL 上传递的令牌是否存在任何可能的安全问题?我猜不是,但获得更多意见是件好事。 我认为这不应该有安全问题。我在少数地方见过这种方法 这绝对是一个安全问题。用户可能会在页面加载前点击分享按钮,然后在社交媒体上无意中分享 URL(包括他们的令牌)。 @jason,您可以使用 JWT 使令牌超时。这段时间可以任意短 正确,这是对某人以其他用户身份登录的缓解措施。但是,JWT 可能具有其他编码的 PII,例如名称或电子邮件。您必须非常小心这种方法。

以上是关于在 SFSafariViewController 中设置请求授权头的主要内容,如果未能解决你的问题,请参考以下文章

FBSDK 登录 - SFSafariViewController 已禁用?

SFSafariViewController 详细信息

是否可以在 UITabBarController 内显示 SFSafariViewController?

在 SFSafariViewController 上设置完成按钮颜色

在 SFSafariViewController 中嵌入 Javascript

Android 相当于 iOS 的 SFSafariViewController