如何从REST服务认证用户

3
我正在尝试使用Dropwizard构建的REST服务对用户进行身份验证。之前我在github上找到了一个关于使用openID进行身份验证的很好的例子:https://github.com/gary-rowe/DropwizardOpenID 然而,目前我不想处理openID,只想让用户1.注册,2.登录。
我的问题/困惑如下:
1. 对于注册:我考虑将用户的用户名/密码作为POST请求发送,凭据可以作为表单参数或JSON主体的一部分。但是,这里发送明文密码是否存在安全风险?
2. 对于登录:我考虑使用Dropwizard中的Authenticator。
3. 我不想以明文形式存储密码。在以明文形式接收到用户密码后,应该采取什么策略?我正在寻找一些Java库来协助进行密码盐和MD5处理。

1
你有读过他们的认证文档吗?OAuth2是最安全和符合RESTful标准的方法;至于明文发送凭据,你是在构建一个Web前端吗?如果是这样,请通过https提供您的网站,这将不会成为问题。 - brandonscript
我不预见任何外部应用程序使用API来获取数据。我的API只会被我的应用的移动和Web界面使用。对此,Oauth2不是有些过度了吗? - birdy
OAuth2是一种很好的方法,可以确保每个已登录的用户都收到自己的访问令牌,您可以跟踪和管理。除了完全放弃API(并仅使用会话/cookie)外,这仍然是最好的和最可扩展的方法。现在做这项工作,它将持续(永远?)。 - brandonscript
也许我没有正确理解。如果我选择OAuth2路线,我必须向其中一个OAuth2提供者(例如Google、GitHub等)注册我的应用程序,对吗?然后我可以使用该令牌来授权用户?... - birdy
不不不... Dropwizard 后端支持 OAuth2 - 因此您将实现自己的 OAuth2 服务,然后让浏览器与其进行身份验证握手;完全独立于 Google 等服务。 - brandonscript
显示剩余2条评论
2个回答

1

查看文档,我们可以发现 Dropwizard 支持独立的 OAuth2 实现:

http://dropwizard.codahale.com/manual/auth/#oauth2

OAuth2有几个优点,其中许多可以在此处阅读:OAuth 2.0:收益和用例-为什么?

需要注意的事项:

  • 处理身份验证时,应始终通过HTTPS进行主机托管以确保传输加密。
  • Dropwizard声称他们的OAuth2实现尚未最终确定,可能会在将来更改。作为备选方案,他们也支持基本认证,使用HTTPS仍然相当安全。
  • 实现这不涉及使用任何第三方“社交”认证服务,如Google或Facebook。

1
感谢您对Dropwizard OpenID项目的推荐。很高兴它能帮助您入门。
如果您想采用纯Web表单方式,请查看我的另一个项目MultiBit Merchant,它提供多种身份验证方法(Web表单、HMAC、Cookie)。
您需要深入了解才能真正看到它的工作原理,因为这个项目并不是一个演示项目,而且还在不断地发展。
加载完项目后,请查找WebFormClientAuthenticator,这将使您进入正确的区域。
Dropwizard身份验证涉及的一般原则在这篇博客文章中进行了讨论。虽然它针对的是HMAC,但您可以轻松地使用之前引用的源代码来适应Web表单或Cookie。

这些都是MIT许可,所以您可以根据需要自由使用它们。


谢谢。我正在查看代码并同时实现我的简单服务。我还有一个问题 - https://dev59.com/8mIj5IYBdhLWcg3wEhQA - birdy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接