关于网上一个如何使用 Oauth 实现一个安全的 REST API 服务的问题
网友答案整理:
1、Amazon是拥有最大的、使用最多的在线网络API的网络服务之一,并且根本不支持OAuth!的Pey
2、Amazon是如何保持API请求安全的
你不清楚为什么,但读完整页关于如何为Amazon网络服务装配一个请求后,你依然觉得不完全合理。
3、这个“签名”和什么连在一起?
4、代码示例中的“data”参数是什么?
这样,你会继续查找关于“安全API设计”的文章。
当遇到其他人问同样的问题时,你看到一些指出"HMAC"或其他事物的优秀回复,但还是不太确定。
你找到其他鼓励你使用“HMAC”的文章并且你正H-FINE地使用它,如果有人将“HMAC”解释成简明的H_ENGLISH的话。
5、你的确偶遇了一个有道理的蒸馏的基本概念,它是这样一简明的英语描述的:
一个服务器和客户端知道一个公钥和一个私钥;
只有服务器和客户端知道私钥,但每个人都知道公钥。。。但不关心别人所知道的。
一个客户端生成一个唯一的HMAC(哈希)表示它到服务器的请求。
通过把请求数据(参数和值或XML/JSON或任何它计划发送的数据)以及请求数据的散列blob和私钥结合来实现。
客户端随后将这个HASH以及所有它将要发送的参数和值一并发给服务器。
服务器接到请求,并使用与客户端相同的方式重新生成自己独有的基于提交值的HMAC(哈希)。
然后,服务器比较这两个HMAC,如果相同,服务器就信任这个客户端并执行请求。
这似乎很直截了当。最初让你困惑的是,你以为原始请求是经过加密传送的,但实际上,HMAC方法所做的一切只是使用只有客户端和服务器才知道的私钥将参数生成为一些独特的校验和(哈希)。
随后,客户端将这个校验和及原始参数和值发给服务器,然后服务器复核校验和(哈希)以确定它接受客户端所发的请求。
因为根据假设,只有在客户端和服务器知道私钥,我们假设如果他们的哈希匹配,那么它们会互相信任,以至服务器随即正常处理这个请求。
你知道在现实中,这就相当于某人过来对你说:“Jimmy让我告诉你把钱给Johnny”,但你不知道这个人是谁,所以你要伸出手去试探他,看看他是否知道这个秘密握手。
如果三次握手证明无误,则通讯继续进行,否则中断通讯。.