繁体   English   中英

REST api项目的用户身份验证方法

[英]User authentication methods for REST api project

我的Web服务器具有REST API。 我需要向应用程序添加用户身份验证,其背后的思考过程是这样的:

  1. 从应用程序表单获取用户的用户名和密码
  2. 加密密码,Base64编码用户名和密码
  3. 通过HTTPS将数据发送到REST API
  4. Web服务器验证凭据,返回错误或成功

这样安全吗? 我看到了很多有关OAuth2的提及。 它是什么? 有什么比我的过程更好的呢?

您使用单词“ encrypt”代替用户密码“ hash”的事实表明您对此知识的了解非常有限。 这几乎肯定会导致您弄乱身份验证过程,并给用户的私人信息带来风险。

关于OAuth2真正重要的一点是,它可以与许多现有的第三方提供商(Google,Facebook,Twitter等)一起使用,而您的工作量却很小。

您无需执行任何操作即可存储凭据甚至对用户进行身份验证。 第三方负责所有这些工作,并简单地向客户端提供令牌(长随机字符串),然后将令牌传递到您的服务器。 然后,您的服务器与第三方服务器进行对话,以确保令牌有效(并获得所需的任何信息,例如用户名,电子邮件地址或其他信息)。

如果可以的话,您真的应该考虑使用它。 大型公司在确保其身份验证方法上付出了很多努力,您可以通过使用它们来获得所有这些。

最后一个好处是,用户不需要为另一个帐户创建和记住凭证。

Google提供了一些文档, 可以帮助您入门 ,还包括一个OAuth游乐场来测试它的实际工作方式。

OAuth2的一个非常基本的解释是,用户将登录到您的系统,并在发送前先对用户名和密码进行加密,然后通过身份验证将令牌发送回用户。

此后,每当用户尝试与Web服务器联系时,它将与每个API调用一起发送此令牌。 这样可以确保未经身份验证的人员无法访问您的Web服务器。

因此,基本上,您当前的方法包括OAuth2标准的一部分,但不是最重要的部分(令牌)。

在您的情况下,您将如何阻止未经身份验证的人员访问您的Web服务器? 如果项目很小,那么这样做的风险就不会那么大。但是对于大公司来说,这是一个真正的威胁,需要加以解决。

在为用户提供身份验证门户之前,您应该真正尝试了解加密和哈希之间的区别。 您可以使用许多不同的哈希算法。 我过去曾亲自使用过BCrypt,对此我也有一个相关的SO问题 如今,您可以在几乎所有主要的高级语言中找到几乎所有流行算法的实现。

显然,如果您不想做所有事情,则可以使用OAuth提供程序,该提供程序将处理所有困难的工作,例如安全地存储密码,为您保护数据库和所有其他安全方面。 有许多可靠的OAuth提供商,例如Google,Facebook,Yahoo等。

要牢记的一件事是托管应用程序的环境。 OAuth确实依赖于用户每次要访问您的应用时都可连接到OAuth提供程序的服务器。 因此,如果您位于公司防火墙或类似防火墙的后面,可能会阻止对Facebook等网站的访问,那么这可能是个大问题。

我个人更喜欢对API项目进行基于令牌的身份验证。 如果您不熟悉基于令牌的身份验证,则可以阅读此SO问题链接。

基于令牌的身份验证系统背后的一般概念很简单。 允许用户输入他们的用户名和密码,以获得一个令牌,该令牌允许他们获取特定资源-无需使用用户名和密码。 一旦获得了他们的令牌,用户就可以向远程站点提供令牌(在一段时间内可以访问特定资源)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM