身份验证和 REST

Posted

技术标签:

【中文标题】身份验证和 REST【英文标题】:Authentication and REST 【发布时间】:2011-11-01 23:54:49 【问题描述】:

我已经实施了一个胜利服务。我想扩展它以通过 REST 启用一些功能。我已经使用 WCF 休息功能实现了它,它可以按我的意愿工作。到目前为止一切顺利。

我的问题是安全和身份验证。据我所知,身份验证没有“一种方式”,我已经阅读了几篇关于它的文章......还有这里和其他论坛,互联网上的博客......我完全迷失了。我已经阅读了关于 SSL、OAUTH、HMAC 等的优缺点。

我需要的功能是以某种方式对用户进行身份验证,用户名/密码对我来说是最好的方式。

这些用户来自互联网浏览器,但稍后我计划在未来拥有更多客户端,例如 android 或 iPhone 应用程序。

那么,您认为哪种方法最好(也是最简单的...)对用户进行身份验证以进行 REST 协议?

谢谢!

.Net4/WCF/Visual Studio 2010

【问题讨论】:

这个 SO 问题值得一读:***.com/questions/454355/… 谢谢,我之前已经看过了,但我没有得到清晰直接的答案 好的,您实际上打算如何授权您的用户,您打算使用 Windows 身份验证还是自定义数据库? 我有一个自定义数据库 Pablo 的博客条目有一个很好的例子:weblogs.asp.net/cibrax/archive/2009/03/20/… - 我刚刚下载了演示项目,它看起来很清楚,它提供了一种实现自定义会员提供程序的方法,您可以定制使用您自己的数据库,它通过基本身份验证排除用户凭据:en.wikipedia.org/wiki/Basic_access_authentication 【参考方案1】:

那么,您认为哪种方法最好(也是最简单的...)对用户进行身份验证以进行 REST 协议?

最简单的RESTful认证方案肯定是HTTP基本认证。当然,它不是很安全,但它可以是第一步。

在服务器端,您只需设置一个 HTTP 反向代理(Apache、Cherokee 或任何其他),就可以使用零代码实现。

在客户端,大部分时间也是零代码(使用 Java、.Net、jQuery.ajax、普通 XMLHttpRequest 等)。

【讨论】:

为什么说它不是很安全? 在 HTTP 上,基本身份验证意味着以明文形式发送登录名和密码...但是,为了防止窃听,您可以将基本身份验证与 HTTPS 混合使用。【参考方案2】:

根据定义,任何身份验证方式都需要每个用户的状态。即使该状态是密码或 api 密钥的形式。但是我曾经使用过的每个 REST api 都忽略了 REST 的这一部分,因为它们都需要一个 API 密钥。当考虑到安全性时,REST 可能不是最佳选择。浏览器擅长跟踪会话 ID,并且使用会话 ID 比 API 密钥更安全,因为该值过期。使用会话 ID 是一种非常安全且经过验证的设计模式,尽管它“较少 RESTful”。但是,开销要求非常低。

【讨论】:

【参考方案3】:

如果您想通过 HTTP 对 HTTP 或 REST 服务进行身份验证,只需遵循 AWS 的操作即可。它有效,它在生产中,有实现示例(客户端和服务器端)。

http://s3.amazonaws.com/doc/s3-developer-guide/RESTAuthentication.html

【讨论】:

以上是关于身份验证和 REST的主要内容,如果未能解决你的问题,请参考以下文章

REST API 的身份管理和身份验证

使用 JWT 联合身份的 REST 身份验证/授权

Spring Data REST 中的身份验证和授权

通过 SSL 和 HTTP 基本身份验证的 REST 服务

Intranet API 的 REST 身份验证缓存

REST 安全性,使用基本身份验证和 jwt 令牌验证是一种不好的做法吗?