【问题标题】:How to implement HMAC-SHA authentication from scratch?如何从头实现 HMAC-SHA 认证?
【发布时间】:2014-04-13 09:39:24
【问题描述】:

我想使用与 AWS 签名流程类似的技术为 Web 应用程序 API 实施身份验证。服务器将为用户 Web 浏览器客户端呈现 html。该应用程序还将为非浏览器客户端(iphone、android、黑莓、ipad 等)返回 json。我正在尝试编写身份验证代码,以允许单个用户从多个客户端登录(记住)应用程序。从任何一个客户端注销不应撤销所有其他客户端的令牌/cookie。

  1. 当用户注册或登录时,客户端(尤其是本机移动客户端或 Web 浏览器)如何获取私钥/密钥?我的理解是不应该通过网络发送密钥?可以只通过 ssl 发送吗?

  2. 对于浏览器客户端,私钥是存储在 cookie 中还是其他形式的本地存储中? IE。对于通用 api 令牌身份验证,令牌将存储在浏览器上的 cookie 和手机上的数据库中

  3. 当客户端是浏览器时,如何用私钥对请求签名进行签名?即生成 id + 私钥 + 请求的哈希。对于本地移动客户端或服务器到服务器的通信,我相信有一些库可用于生成签名请求。当请求来自浏览器时,这是如何工作的?

  4. 如果需要在多个客户端(平板电脑、iphone、工作计算机、家用笔记本电脑等)上记住用户,用户是否需要为每个客户端拥有一组私钥/令牌?

我会在 Rails 中使用 Devise,但它需要您编写自己的令牌身份验证代码。

我也在研究 OAuth,问题 2 和 4 都适用,但我真的很想研究 AWS 方法。

【问题讨论】:

  • 能否请您从您正在谈论的场景的介绍性段落开始,而不是直接跳入没有上下文的问题?我不太清楚你在说什么。

标签: security authentication language-agnostic hmac


【解决方案1】:

您从解决方案 (HMAC) 开始,但我认为您的“问题”不适合您的解决方案 :)。

我会尽我所能回答这个问题。

  1. 据我了解,私钥将派生自共享的公钥。或者您可以共享一个私钥,但前提是已经建立了身份验证(换句话说:您已经确定您正在与谁交谈)并且连接是安全的(加密的)。不过,您仍然容易受到中间人的攻击。
  2. 我不确定。 cookie 不安全。窃取cookie,窃取私钥。我的首选是本地存储的密钥(文件或存储),由密码加密
  3. 您必须设计某种客户端库(在 javascript 或类似的语言中)。
  4. 是的。

当您可以共享令牌时,为什么要共享密钥,例如 oAuth 实现。令牌由您的应用程序生成,并在有限的时间内有效。通过这种方式,您可以共享访问权限,但不能共享对您的应用程序的访问权限。您使用用户名和密码(或密钥文件)登录并获得一个令牌,该令牌授予您访问权限,直到令牌被撤销。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-21
    • 2013-06-05
    • 2021-09-14
    • 2017-02-14
    相关资源
    最近更新 更多