手机隐式流上的无提示刷新令牌

时间:2019-07-17 01:39:16

标签: javascript react-native oauth-2.0

我正在构建一个应用程序,其中必须使用Oauth2的隐式流程(服务器无法提供授权码+ PKCE,因此我被困在那里)。

我已经看到网络人过去常常依靠隐藏一个iframe来维持服务器和应用之间的会话,而不必重新连接即可获得新的新鲜访问令牌。

我实际上是想知道使用移动应用程序和Web视图模拟相同行为是否可行/可行?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

强烈建议不要对任何类型的应用程序使用隐式流。这是OAuth工作组的最新建议。您可以在 OAuth 2.0安全性最佳最新实践 草案(具体情况为Section 3.1.2)中阅读有关此内容的更多信息。

我的建议是使用Authoirzation代码流(在最坏的情况下避免PKCE,因为服务器不支持该代码流。)

另一种替代方法是使用 Resource Owner Password Credentials Grant 。这比采用脆弱的解决方案更安全。

答案 1 :(得分:1)

为了支持各种类型的本机应用程序,您的服务器将需要支持注册三种类型的重定向URL,每种类型都支持稍微不同的用例。

自定义URL方案

某些平台(例如iOS)允许应用程序注册自定义URL方案,只要在浏览器或其他应用程序中打开带有该方案的URL,该应用程序便会启动该应用程序。通过自定义URL方案支持重定向URL,客户端可以启动外部浏览器以完成授权流程,然后在授权完成后将其重定向回应用程序。

应用程序开发人员应选择一种全局唯一的URL方案,并可以对其进行断言控制。由于操作系统通常没有特定应用程序是否已声明URL方案的注册表,因此从理论上讲,两个应用程序可以独立选择相同的方案,例如myapp://。如果要帮助防止应用程序开发人员使用自定义方案发生冲突,则应建议(甚至强制执行)他们使用的方案是所控制域的反向域名模式。至少,您可以要求重定向URL至少包含一个。以免与其他系统方案(例如mailto或ftp)冲突。

例如,如果一个应用程序具有一个名为photoprintr.example.org的相应网站,则可用作其URL方案的反向域名将是org.example.photoprintr。开发人员将注册的重定向URL将以org.example.photoprintr://开头。通过执行此操作,可以帮助鼓励开发人员选择与其他已安装的应用程序不冲突的显式URL方案。

使用自定义URL方案的应用程序将按授权请求中所述正常启动授权请求,但将提供具有其自定义URL方案的重定向URL。授权服务器仍应验证此URL之前是否已注册为允许的重定向URL,并且可以将其视为由网络应用注册的任何其他重定向URL。

当授权服务器使用自定义方案将本机应用程序重定向到URL时,操作系统将启动该应用程序,并使整个重定向URL可供原始应用程序访问。该应用程序可以像普通的OAuth 2.0客户端一样提取授权代码。

HTTPS URL匹配

某些平台允许应用程序注册URL格式,这些URL格式指示每当系统浏览器访问与注册模式匹配的URL时,应启动该应用程序。应用程序通常使用它来“深度链接”到本机应用程序,例如,在浏览器中查看Yelp URL时,Yelp应用程序将打开到餐厅页面。

应用程序还可使用此技术来注册URL,该模式将在授权服务器重定向回应用程序时启动应用程序。如果平台提供此功能,则推荐使用本机应用程序,因为它可以提供最完整的应用程序所属的URL。如果平台不支持应用要求的网址,这也可以提供合理的后备。

后备网址

本机应用程序可用于支持无缝重定向的另一种技术是在回送接口的随机端口上打开新的HTTP服务器。通常仅在台式机操作系统上完成此操作,因为移动操作系统通常不向应用程序开发人员提供此功能。

此方法适用于命令行应用程序和桌面GUI应用程序。该应用程序将启动HTTP服务器,然后启动授权请求,将重定向URL设置为环回地址,例如http://127.0.0.1:49152/redirect,然后启动浏览器。授权服务器将浏览器重定向回环回地址时,应用程序可以从请求中获取授权代码。

为了支持该用例,授权服务器将必须支持注册以http://127.0.0.1:[port]/http://::1:[port]/http://localhost:[port]/开头的重定向URL。授权服务器应允许任意路径组件以及任意端口号。请注意,在这种情况下,可以使用HTTP方案而不是HTTPS,因为请求永远不会离开设备。

注册

与服务器端应用程序一样,本机应用程序也必须在授权服务器上注册其重定向URL。这意味着除了服务器端应用程序的传统HTTPS URL之外,授权服务器还需要允许匹配上述所有模式的注册重定向URL。

在授权服务器上启动授权请求时,服务器将验证所有请求参数,包括给定的重定向URL。授权应拒绝请求中无法识别的URL,以帮助避免授权代码拦截攻击。

参考:https://www.oauth.com/oauth2-servers/oauth-native-apps/redirect-urls-for-native-apps/