基于RESTAPI令牌的身份验证?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (10)

目前,获取令牌的方式如下:

curl -X POST localhost/token --data "api_key=81169d80...
                                     &verifier=2f5ae51a...
                                     &timestamp=1234567
                                     &user=foo
                                     &pass=bar"

api_keytimestampverifier所有请求都需要

sha1(timestamp + api_key + shared_secret)
curl localhost/posts?api_key=81169d80...
                    &verifier=81169d80...
                    &token=9fUyas64...
                    &timestamp=1234567
提问于
用户回答回答于

如果可以使用SSL连接:

url = username:key@myhost.com/api/call/nonce

如果这是不可能的,而且所传输的信息也不是秘密的,建议使用哈希来保护请求:

nonce = generate_secure_password(length: 16);
one_time_key = nonce + '-' + sha1(nonce+salt+shared_key);
url = username:one_time_key@myhost.com/api/call

用户回答回答于

纯粹的RESTful API应该使用底层协议标准功能:

  1. 对于HTTP,RESTful API应该符合现有的HTTP标准头。添加新的HTTP头违反了REST原则。不要重新发明轮子,使用HTTP / 1.1标准中的所有标准功能 - 包括状态响应代码,标题等等。RESTFul Web服务应该利用和依赖HTTP标准。
  2. RESTful服务必须是无状态的。任何技巧,例如试图记住服务器上先前REST请求状态的基于令牌的认证都违反了REST原则。再次,这是一个必须; 也就是说,如果您的Web服务器在服务器上保存任何与请求/响应上下文相关的信息,以尝试在服务器上建立任何类型的会话,那么Web服务不是无状态的

扫码关注云+社区