2012-06-02 54 views
6

S.O.有许多优秀的问题(和答案)。围绕着REST和安全问题。许多人说“纯粹主义者不会喜欢这个,但是等等......”然后其他人说“你永远不应该这样做,因为等等等等”。授权RESTful服务的实用示例?

但我还没有看到解决方案“纯粹主义者”暗示以下情况。所以我的问题是 - 什么是以下场景的“纯RESTful解决方案”?

简单的场景...

试想建库/网站,让用户管理他们最喜爱的食谱。该网站公开了一个RESTful API,以便用户可以从他们想要编写的自定义程序(利用此API)查询和操作他们的列表。

因此,用户“A”有3个最喜欢的食谱,ID为“1”,“2”和“3”。

用户“B”有2个最喜欢的食谱,ID为“4”和“5”。

我们需要确保如果用户A发送DELETE命令到/Recipes/4他将得到一个Forbidden (403)响应。

我通常会做...

我通常会做的是让他们先调用的验证方法,并把他们某种身份验证令牌,其有效期为30分钟左右。通常这个令牌将通过cookie传递。

什么是纯解决方案?

纯REST解决方案是否让它们将它作为查询字符串中的变量传递? Are cookies the devil?令牌应该作为URL的一部分使用(而不是查询字符串参数)?还有其他的东西可以清楚地回答这个问题吗?

+1

这里有点迂回:我想你的情况下,你会想要一个403,而不是一个401。身份验证与服务,但在你的情况下,用户A是_forbidden_​​得到食谱4.我知道它doesn没有回答这个问题,但值得指出。 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html显示了区别。 (重新认证不会帮助用户A看到配方4,因此是403)。 –

+0

正确 - 实际上任何一个都是问题...首先401 - 如同,您是授权的,其次是403 - 如同您的“权限是什么” “ - 进入状态/会话/用户上下文辩论......无论哪种方式,问题依然存在。感谢您的澄清! –

+2

是的,两者都很重要。最简单的解决方案当然是基于https的基本身份验证。我认为这是“纯粹的”。你在寻找替代品吗? –

回答

4

登录时,你得到了验证令牌资源路径令牌在授权头。这就是它的设计目的。请参阅http://greenbytes.de/tech/webdav/draft-ietf-httpbis-p7-auth-12.html

+0

我喜欢这个想法,但它看起来像我可能会不正确地使用认证头...我会继续看如果这是“正确”:) –

+0

@TimothyKhouri你看到什么让你认为你会滥用auth头部? –

+0

该头文件似乎特定于基本和摘要访问验证:http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.8 –

0

一个简单的无状态和饼干免费解决方案将给每个用户一个相同的令牌。

有一些方法可以生成这些令牌,以便它们足够稀疏以防出现安全问题。

例如https://www.grc.com/passwords.htm

假设你用户A和用户B你生成用户A的令牌X和用户B的令牌Ÿ

所以用户A将使用类似/X/Recipes/1

和用户B将使用类似/Y/Recipes/4

这是安全的,因为用户A是唯一知道他的令牌的人,正如我之前提到的,生成令牌的方式可以确保其他人猜测该令牌的“不可能”。

因此,如果其他人(如用户B在URL中使用其他标记,比如说/Z/Recipes/1),则应该能够识别并返回相应的错误消息。

您可以让用户在url中传递令牌,如上所示,或将其作为Autherticantion消息嵌入到HTTP请求中。

+0

你的意思是一个独特的令牌吗?如果它们都具有相同的标记,那么任何人都可以删除任何东西... – evanmcdonnal

+1

我不太会遵循......我认为问题仍然存在 - 它们如何传递该“密码” - 它是否与查询字符串中的每个请求一起,帖子,cookie等 - 此解决方案具有相同的问题。 –

+0

@TimothyKhouri上面看到我的更新,让我知道如果这回答你的问题.. – xvatar

1

将auth令牌视为资源。

您通过获取参数为凭据的身份验证令牌进行身份验证(例如,基于https的基本身份验证)。

注销通过执行删除操作中。

+0

对,但他们如何传递令牌是同一个问题。是通过查询字符串,标题等,我觉得我现在重复了这个评论4次 - 显然这是一个尚未(明确)回答的问题。此外,是否有效/纯粹让他们通过标头或cookie传递令牌? –

+0

通过标题。这应该是有帮助的:http://stackoverflow.com/questions/549/the-definitive-guide-to-forms-based-website-authentication。这适用于任何方法,RESTful或不。使用纯粹的RESTful方法,认证令牌被视为资源,以便它不是一个古怪的RPC – matb33