【问题标题】:What type of token should be used for internal/private rest token based api authencation?应该使用哪种类型的令牌进行基于内部/私有 rest 令牌的 api 身份验证?
【发布时间】:2014-08-28 09:28:10
【问题描述】:

我正在实现一个使用内部/私有 rest api 进行后端处理的 web 应用程序。 我计划为其实施基于令牌的身份验证。我正在阅读有关它的内容,并遇到了 X-Auth 令牌和承载令牌。

我看不出它们之间有太大区别,因为它们都是带有生成令牌的标头。但我想以标准方式进行。

其中哪一个更适合我的需求。如果不是,哪种代币更合适?

【问题讨论】:

  • 您要针对自己的系统还是第三方系统进行身份验证?
  • @PM77-1 我将根据自己的身份进行身份验证。

标签: security rest


【解决方案1】:

我只会回答我自己的问题,以防万一它对其他人有用。

我们最终实现了一个使用带有承载令牌的身份验证标头的流程。它基本上是你给潜在用户/客户的令牌。

您可以通过身份验证端点提供它的一种方式,如果他们传入正确的用户名或密码,您可以使用不记名令牌进行响应。

对受保护资源的成功请求然后将在身份验证标头中使用该令牌。

关于它的一点参考: https://www.rfc-editor.org/rfc/rfc6750

这里有一个很好的解释:

What are Bearer Tokens and token_type in OAuth 2?

希望对你有帮助。

【讨论】:

  • 确保您使用正确的grant_type,因为在当今的应用程序中,几乎不可能不将您的api暴露给您的合作伙伴或开发人员。保持内部应用程序(client_credential)、内部身份验证(密码)和第三方(授权代码)等的grant_type(s)的清晰分离,有助于您长期维护AuthN/AuthZ。
【解决方案2】:

我认为对此没有统一的答案。首先,我怀疑您可能会将标头与标记混淆,所以让我们从这里开始。这是来自 whireshark 的 sn-p,通常的 HTTP GET 方法:

GET /22789/610/144208714.mp4?token2=1404763288_a4b48d3fc547294893b3b8d817ef1c59&aksessionid=690e90bada20cdc5 HTTP/1.1
Host: pdl.vimeocdn.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0
Accept: video/webm,video/ogg,video/*;q=0.9,application/ogg;q=0.7,audio/*;q=0.6,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
DNT: 1
Range: bytes=427217-
Referer: http://vimeo.com/59253805
Cookie: aka_debug=cpcode:133150~clientip:87.81.132.48~ghostip:176.255.247.64~requestid:57d39e3~time:1404762182~ghostforwardip:~edgecache:cache-hit
Connection: keep-alive

请注意令牌如何位于 GET 请求行正文中的问号后面。后面是什么?被称为请求参数,这取决于您是否将此参数命名为“token”、“token2”或“mysuperhash”。在此特定示例中,令牌以类似 unix 的时间戳开头,因此,如果您尝试将此请求完全粘贴到浏览器中,则由于链接已过期,访问将被拒绝。

第一行之后的每一行基本上都是一个标题。虽然有一些常规标头(例如主机或时间)​​,但如何命名您希望用于特定目的的标头完全取决于您。

在 nginx 和 Apache 服务器中,您有始终存在的变量,您可以通过这些变量轻松访问参数和标头。此外,nginx 允许您基于令牌配置条件访问,因此您甚至不需要成为程序员(除了获得正确配置行的能力),您可以看看:http://nginx.org/en/docs/http/ngx_http_secure_link_module.html

如何构造该令牌是一个特定的架构决策。您可以基于时间、整个 URI、客户端 IP 地址等来保护访问。通常,它比看起来更复杂,因为您需要考虑授权用户可能落后的接入网络中的许多可能性。在 nginx 的情况下,您受限于 md-5 哈希。这是一种旧得好快的方法,但它被认为是妥协的,所以如果你想要更好的保护,你可以考虑在你自己的实现中使用 sha-1(库在 openssh 包中可用)。

【讨论】:

  • 将令牌附加为 GET 参数的错误做法,它们会进入日志!当您想使用令牌使服务器无状态时,使用 cookie 是没有用的
猜你喜欢
  • 2016-07-16
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
  • 2013-08-23
  • 2015-12-24
  • 2016-08-24
  • 2017-04-19
  • 1970-01-01
相关资源
最近更新 更多