Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 如何从头开始实施HMAC-SHA身份验证?_Security_Authentication_Language Agnostic_Hmac - Fatal编程技术网

Security 如何从头开始实施HMAC-SHA身份验证?

Security 如何从头开始实施HMAC-SHA身份验证?,security,authentication,language-agnostic,hmac,Security,Authentication,Language Agnostic,Hmac,我想使用与AWS签名过程类似的技术实现web应用程序api的身份验证。服务器将为用户web浏览器客户端呈现html。该应用程序还将为非浏览器客户端(iphone、android、blackberry、ipad等)返回json。我正在尝试编写身份验证代码,允许单个用户从多个客户端登录(记住)到该应用程序。从任何一个客户端注销都不应撤销所有其他客户端的令牌/cookie 当用户注册或登录时,客户端(尤其是本机移动客户端或web浏览器)如何获取私钥/密钥?我的理解是密钥不应该通过网络发送?它可以通过s

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

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

  • 对于浏览器客户端,私钥是否存储在cookie或其他形式的本地存储中??即,对于通用api令牌身份验证,令牌是否会存储在浏览器上的cookie和手机上的db中

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

  • 如果需要在多个客户端(平板电脑、iphone、工作电脑、家用笔记本电脑等)上记住用户,用户是否需要为每个客户端提供一组私钥/令牌

  • 我会使用Desive with Rails,但它要求您编写自己的令牌身份验证代码

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

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

    我将尽力回答这个问题

  • 据我所知,私钥将由共享的公钥派生而来。或者,您可以共享私钥,但前提是已经建立了身份验证(换句话说:您已经确切知道您在与谁通话)并且连接是安全的(加密的)。你仍然容易受到中间人攻击。
  • 我不确定。饼干是不安全的。偷饼干,偷私钥。我的首选是本地存储的密钥(文件或存储器),由密码加密
  • 您必须设计某种客户端库(用javascript或类似的语言)

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

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