【问题标题】:OAuth2 app with Touch ID带有 Touch ID 的 OAuth2 应用
【发布时间】:2017-08-22 19:38:05
【问题描述】:

第三方应用有什么方法可以在逻辑上使用 Touch ID 对使用 OAuth2 的 Web 服务进行身份验证?

假设我拥有一个需要使用 OAuth2 进行身份验证的 Web 服务。它同时支持implicit and authorization-code grants(尽管如果需要我可以添加对其他授权的支持)。

第三方拥有使用此网络服务的移动应用。它打开一个本机 Web 视图进行身份验证,并在其中加载我的身份验证 URL。用户在我的域中输入他们的用户名/密码,然后我将 OAuth 令牌返回给应用程序。

如果这个应用想要实现 Touch ID 来加速身份验证,有没有一种方法可以通过 OAuth2 来实现?

我的理解是,OAuth2 隐式授权和授权码授权的目的是防止父应用访问用户的凭据。它只能访问生成的 OAuth 令牌,并且仅在有限的时间内有效。

使用 Touch ID,您通常会使用 Keychain Services 存储密码。所以这显然需要你访问密码。

我想他们可以将 OAuth 令牌而不是密码存储在钥匙串中,但这只会在短时间内有效。

【问题讨论】:

  • 我也对此感兴趣,但还没有找到解决方案。

标签: oauth-2.0 touch-id


【解决方案1】:

到目前为止,我想出的唯一答案是您最后提到的:存储 OAuth 令牌——但也是一个长期存在的刷新令牌。刷新令牌可以存在多长时间绝对取决于您的特定安全需求。

【讨论】:

    【解决方案2】:

    我还不知道任何标准流程,但这里有一些常见的注意事项。简单地存储长期凭证(密码或刷新令牌,甚至在静止时加密)将以难以审计的方式混淆安全上下文。使用任何本地身份验证(特定于应用程序的解锁 PIN、任何生物识别或简单的系统解锁)时,以服务器可以验证的方式执行此操作非常重要。因此,第一步是设备身份验证,您的应用程序的每个实例都应使用唯一的客户端 ID/客户端凭据(我建议实现 Dynamic Client Registration Protocol 来帮助解决此问题,但可能还有其他选择)。然后,最好直接在设备上生成一些可验证的密钥信息,将其放入安全存储中(受任何本地解锁机制保护,并在生物特征发生变化时失效)并使用它来生成某种 MAC,用于例如作为 jwt-bearer flow 一部分的 JWT(或 OAuth 断言框架的一些新扩展)。 JWT 令牌可以包含可以为服务器提供更多上下文的附加元数据(声明),例如它可以做出明智的决定以在某些情况下强制重新进行身份验证。

    重申:

    1. 设备已获得授权并颁发了唯一的客户端凭据对。
    2. 本地生成的密钥保存在加密存储中,并受某些本地解锁机制(系统锁屏、PIN、生物识别等)保护
    3. 密钥在服务器上注册并绑定到设备。
    4. 解锁时,密钥用于生成 JWT,用作与服务器进行身份验证的断言。

    对我来说似乎很标准,也许有人应该在考虑所有实现细节、当前实践和安全考虑之后为此编写一个 BCP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 2013-05-28
      • 2014-12-12
      • 1970-01-01
      相关资源
      最近更新 更多