我有一个Restful Web服务API,被不同的第三方使用。该API的一部分是受限制的(需要用户名/密码才能访问)。我想知道最好的实现身份验证的方法是什么?
我正在使用https,因此通信是加密的。我有两个想法:
- 用户在开始使用(受限制的)服务之前,使用POST发送用户名/密码(由于使用了https,凭据已加密)。登录成功后,服务器会发送回与此用户名匹配的随机单次使用值(nonce)。当下一个请求正在进行时,在用户名旁边,客户端发送先前返回的nonce。服务器匹配用户名和nonce,并在所请求的数据旁边返回新的nonce。每个新请求使用新的nonce。基本上,这是Digest访问身份验证的轻量级版本。
- 由于第三方使用此API,因此用户名/密码可以用于每个(受限制的)请求。由于使用了https,它们将被加密。此方法的缺点是,这不符合Restful规范(始终将使用POST)。
我更倾向于选择第一种方法(它符合Restful规范,相对容易实现,XML、JSON或HTML可以在不改变任何内容的情况下使用),但我想知道您的意见。您推荐哪一个:第一种、第二种还是第三种方法?
顺便说一下,我在服务器端使用Python。