【问题标题】:How to secure basic methods like user creation in an API如何保护 API 中的用户创建等基本方法
【发布时间】:2016-10-11 02:01:46
【问题描述】:

我正在学习如何使用 Rails 开发 API,但我找不到如何保护用户创建等基本方法。假设我有一个 Rails 后端 API 和一个前端移动应用程序。我希望应用程序能够进行 API 调用以创建新用户。当然,不是每个人都应该能够创建一个新用户,所以它应该有某种身份验证。我可以使用基本身份验证或摘要身份验证(并不重要,因为我肯定会使用 SSL),但是我必须将凭据硬编码到我的应用程序中。如果凭据以某种方式被发现,我将不得不更改它们,但这意味着应用程序的所有实例都不再经过身份验证,并且它们无法再创建用户。

我想拥有的东西:

  1. 只有我的应用才能使用用户创建调用。
  2. 更改凭据应该很容易,或者凭据应随时间自动更改。例如,如果它们涉及日期和时间,则更难破解。
  3. 应该不可能(或非常难以)击败背后的系统,同时随着时间的推移了解一些凭据。

是否可以让我的应用随机生成公钥和私钥对并使用它们?保护这些调用的标准方法是什么?

提前致谢,

鲁根·海德布切尔

【问题讨论】:

    标签: ruby-on-rails rest authentication api-design


    【解决方案1】:

    我可以分享我自己的经验:

    • https 与 API 的协议通信。 这是你关于私钥/公钥的最后一句话,所有内容都内置在 https 中。
    • Doorkeeper(我们将其与 Devise 结合使用)用于 Oauth 的 gem(在我的例子中是 github 帐户)作为身份验证,而您可以使用成对的用户/密码。
    • CanCanCangem 作为授权(用户创建限制是授权而不是身份验证)

    这三个工具的集合应该为您的 API 提供基本的安全级别。我相信cancancan 可能正在讨论中,而devise 主要是行业标准。

    【讨论】:

    • 我一定会研究这些宝石的!但这是否表明我的应用程序也是被授权创建其他用户的某个用户?
    • 是的!作为管理员组中的用户威胁您的应用程序。 API 客户端必须具有访问资源的凭据。因此,您作为客户端的外部应用程序应该具有凭据。
    • 但是如果发现该用户的登录凭据怎么办?我可以轻松取消该用户的授权,但该应用程序仍然没有用,对吧?
    • 我已经更新了我的答案。阅读有关 OAuth 2.0 授权类型的更多信息以了解不同的选项。通常你有下一个选项。 (1) 使用登录名和密码,当密码泄露时,您必须将密码传递给应用程序,这通常很难实现安全的方式。 (2) 使用 OAuth。您的应用程序将要求将用户重定向到身份验证服务器以进行身份​​验证,在成功的情况下,用户使用您的应用程序使用的令牌回复。令牌将是应用程序作为用户的一次授权。如果用户密码被泄露,您将使令牌无效并强制用户再次通过身份验证。
    • 那么我会研究 OAuth!非常感谢! :)
    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2016-04-20
    • 2014-04-22
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多