oauth2.0 OpenID Connect:在移动的应用程序和浏览器之间传递SSO授权-什么是安全的方法?

b5lpy0ml  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(174)

我不确定是否有一种“适当的”方法,但是在我只是拼凑出我自己的不兼容实现之前,也许所有标准中都有一些东西可以满足我的需要?
情况是这样的:苹果公司已经宣布,他们的手机上的应用程序必须包括所有标准的功能本身.没有更多的iframe与网页内容!如果你需要显示来自网络的东西,打开系统浏览器(Safari)!不幸的是,我们需要显示来自网络的东西,所以在这里我们去.
现在,应用程序需要用户之前进行过的身份验证。我们存储所需的任何令牌。当打开浏览器时,我们不希望强制用户重新进行身份验证。我们需要以某种方式将访问凭据传递给浏览器,并且最好安全地执行此操作。此外,浏览器中的网页将需要从我们的OpenID Connect服务器获取令牌。
不幸的是,应用程序和浏览器之间的唯一通信点是URL,所以我们给予的一切都将在那里,在众目睽睽之下。我知道OAuth非常担心这一点,以至于他们不可能只使用屏幕上可见的东西来拦截身份验证,而是使用一次性中间代码,反向通道和PKCE等东西。
不幸的是,我看不到任何方法可以使用默认的流“开箱即用”来实现我所需要的。我可以想到对这些流的修改,但我不是安全Maven,所以我宁愿使用经过Maven审查的标准。

smdncfj3

smdncfj31#

酒店SCENARIO

这是一个很好的问题,因为许多公司希望在移动的应用程序中以安全的方式显示现有的Web内容,并避免额外的登录。

通过断开连接的浏览器实现Web +移动的集成解决方案?

理想情况下,你想做的是将移动的应用的JWT传递给HTTP头中的外部Web内容。
您可能需要在查询字符串中传递JWT,在这种情况下,我会尝试遵循signed request model,尽管它并不简单。我使用过SalesForce签名请求,尽管我自己没有实现完整的解决方案。

  • 移动的应用程序在POST /API/token中调用API方法
  • API返回一个加密的有效负载,其中包括JWT
  • 移动的应用程序在https://mywebapp?token = 0a 78904 cwdu打开网页
  • Web UI调用POST /API/decrypt-token获取JWT
  • Web UI将令牌存储在内存中,并使用它来调用API

你会想要防止原始令牌被写入Web服务器日志.我相信这种类型的PF解决方案的建议是使用一次性密钥,如上面的链接中所述.当然,Web会话将有一些限制,如沉默令牌续订不工作.

通过WKWEBVIEW实现Web +移动的集成解决方案

在过去,我通过让Web UI从移动的应用程序获取访问令牌来管理移动的应用程序中的安全Web内容。这可以实现集成的UX,并且您可以使用“尽可能标准”的OAuth解决方案。

  • 当Web UI在移动的应用的Web视图中运行时,它不再执行自己的OAuth处理,而是调用移动的应用以获取令牌并触发登录
  • 这意味着在Web和移动的视图之间存在单一登录,并且Web视图获得移动的用户体验的所有好处,例如令牌的安全存储
  • Web UI不再受到Web视图积极丢弃Cookie等事情的影响
    有效使用网页浏览?

在大多数情况下,Web视图可能不是一个好的长期解决方案。我知道,如果苹果使用以下任何行为,他们很可能会reject apps in 2020

  • 使用UIWebView -Cordova默认值-您需要更新到WKWebView
  • 交付一个应用程序,它只是一个重新打包的网站,没有移动的视图
  • 搜索性质可疑的网站内容(广告等)

我怀疑WKWebView的使用是负责任的和可信赖的,但我可能是错的,所以请不要相信我的话。

更新

出于兴趣,有一个nonce pattern可以潜在地用于在Web和移动的应用程序之间共享数据,尽管更简单的选择通常只是使用API共享数据,并多次写入视图。

相关问题