2014-01-18 61 views
0

我正在使用BackboneJS构建一个消息传递应用程序,该应用程序使用REST接口自然存在。基于用户限制REST API结果

我遇到的问题是,我不知道如何限制用户可以拉什么数据从API回来。例如,对/消息的调用目前将为所有用户返回消息。我希望该资源只返回属于当前用户的消息。

网上搜索似乎表明的OAuth2是解决这一问题的最佳途径,但所有的教程谈论被重定向到另一个地方,以确认访问和检索访问令牌。

鉴于我的用户将已经登录到消息应用程序,并且REST API实际上是同一应用程序的一部分,我不喜欢让用户确认我的应用程序可以访问我自己的API 。

有没有更好的方法?

+0

这是节点项目吗? –

+0

你真的应该在你的服务器端进行管理。服务器应该能够管理会话,并查看谁应该能够看到什么。 –

+0

@JonathanMiles不,它是常规的,PHP在客户端运行在Apache上的Backbone – michael

回答

1

的oauth2可能是你最好的选择 - 你肯定不希望推出自己的安全。然而,你想到的oAuth2的味道可能不是你想要的。

的oauth2有四个不同的口味,被称为授权授予类型:

  1. 授权代码:这是你思考的类型。它通常被称为三脚oAuth,因为在令牌授予过程中有三个角色(应用程序,资源所有者和用户)。该应用程序询问用户资源所有者是否可以提供对资源的特定访问类型。这是一个相当复杂的过程,它允许验证用户凭据而不允许应用程序访问它们。这不是必要的,因为你既是应用程序又是资源所有者。

  2. 客户端证书:这是授权与服务器的客户端应用程序的方法。它根本不使用用户凭证。如果您完全信任您的客户端应用程序(所有客户端应用程序),并且不会将其他用户的数据暴露给使用该应用程序的用户,或者您仅通过API提供非用户数据(例如,地图数据或目录数据),您可能可以使用这种相当简单的oAuth2类型。但是,如果您希望保护用户数据的警惕性(并且不允许应用程序在用户未提供凭据的情况下访问数据),则可能不会使用此数据。

  3. 资源所有者密码凭证:用户名和用户密码通过HTTPS传送到后台服务器,其认证以及通过提供一个访问令牌授权访问。访问令牌随后可以在每次调用时传递,并且在访问后端之前它仍然有效,直到经过可配置的时间段。这意味着拦截令牌的人只能在有限的时间内(通常是几分钟)成功使用该令牌。拦截器不会知道用户的用户名和密码。此外,您可以为应用程序提供刷新令牌,刷新令牌可用于在新过期之后获取新的访问令牌(直到刷新令牌过期 - 通常过期日期会更长)。由于证书不是经常通过线路传递(并且只能通过加密传递),所以这通常是保护用户证书并且不要求用户经常传递(良好的用户体验)的最佳解决方案。实现比授权代码授予类型简单得多。

  4. 隐:这是最安全的方法 - 无凭证被验证服务器端的。这通常用于无法安全存储凭据的客户端脚本语言。如果您担心安全问题,请尽量避免使用此类安全措施。

因此,检出OAuth 2.0,并查找资源所有者密码凭据授权类型。

+0

好吧,我想我明白了不同之处。我需要做的是直接使用客户端用户名和密码从API请求访问令牌。 API使用寿命较短的访问令牌和寿命较长的刷新令牌进行响应。访问令牌用于识别用户的请求,刷新令牌用于在访问令牌到期时重新生成访问令牌? 你说不要推出自己的?即使我遵循oAuth2协议编写自己的类是不是一件坏事? – michael

+0

听起来像你已经想通了。当我说不要推出自己的,我的意思是不设计自己的身份验证协议。实现oAuth2你自己很好。祝你好运! –