【问题标题】:REST API user and client authenticationREST API 用户和客户端身份验证
【发布时间】:2018-07-19 23:16:24
【问题描述】:

我正在构建一个 REST API 作为移动应用程序的后端。我想检查对 API 的请求是否来自我们的移动应用程序。但是,API 将要求最终用户登录才能访问某些端点。

我的问题是,我如何对所有传入请求进行身份验证,以确保它们来自我们自己的应用程序,同时对某些请求的最终用户进行身份验证?

我正在考虑发送一个 API 密钥以及 Authentication HTTP 标头中的所有请求来验证移动应用程序,并且(用逗号分隔)还发送一个 JWT 以验证最终用户。虽然这可以工作,但它似乎有点“hacky”。

验证移动应用和 移动应用的最终用户?

【问题讨论】:

    标签: rest authentication jwt


    【解决方案1】:

    使用应用程序令牌和用户特定会话令牌是分离两者身份验证的一种方法。应用程序令牌对于您的应用程序来说是唯一的,并且应该被混淆,以便检查客户端的二进制文件不会导致容易检测到令牌。用户登录时应生成用户特定的会话令牌。客户端将此用户会话密钥添加到未来的 API 调用中,服务器将检查会话密钥是否有效,并可以使用它来查找存储的任何会话状态为客户。

    但是,您最好实现完整的 oauth2 规范。如ultimate guide to mobile API security中所述:

    以下是从用户角度来看 OAuth2 令牌身份验证的工作原理 (OAuth2 将此称为密码授予流程):

    1. 用户打开您的移动应用程序并提示输入他们的用户名或电子邮件和密码。

    2. 您从您的移动应用向您的 API 服务发送一个 POST 请求,其中包含用户的用户名或电子邮件和密码数据(通过 SSL!)。

    3. 您验证用户凭据,并为用户创建一个在一定时间后过期的访问令牌。

    4. 您将此访问令牌存储在移动设备上,将其视为允许您访问 API 服务的 API 密钥。

    5. 访问令牌过期且不再有效后,您会再次提示用户输入用户名或电子邮件和密码。

    OAuth2 在保护 API 方面的优势在于它不需要您将 API 密钥存储在不安全的环境中。相反,它会生成可以临时存储在不受信任的环境中的访问令牌。

    这很棒,因为即使攻击者设法获取了您的临时访问令牌,它也会过期!这降低了潜在的损害(我们将在下一篇文章中更深入地介绍这一点)。

    【讨论】:

    • 感谢您提供的重要信息。 OAuth2 听起来像是一个很有前途的选择,但它使用了用户名和密码的组合。我的 API 不需要移动应用程序的用户登录,仅适用于某些端点。在这种情况下我将如何使用 OAuth2?
    • 我将引导您阅读对 oauth2 的有用解释,希望能回答您的所有问题:gist.github.com/seanpianka/8a4d2fd23c6b947f3d58c1e378e17d7a
    猜你喜欢
    • 2016-01-31
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2019-07-30
    • 2017-08-08
    • 2021-06-05
    • 2016-01-09
    相关资源
    最近更新 更多