我一直在研究保护用于 android/iphone 应用程序或网站应用程序的 API 的技术。
我找到了一种我喜欢的技术,但不确定它是好还是坏(除了是一个非常长的过程)。
处理(最初是用户端):
首先通过散列用户密码创建盐。
然后通过散列请求的 url(通过查询字符串在末尾附加用户名)和 salt 来创建签名。
最后,通过对用户名和签名进行哈希处理来创建令牌。
令牌在标头内传递给服务器(每次)。
第一个请求:
第一个请求必须针对验证端点,并包含 device_id 作为查询字符串。
在服务器上进行相同的处理(如上),如果令牌与用户发送的令牌匹配,则将 device_id 存储在数据库中并分配给该用户名以供将来参考(在请求的 url 中找到设备 ID)并用于随后验证用户名/设备。
所有后续请求:
对于每个请求,处理必须在用户端和服务器端进行,令牌每次都不同(随着请求的 url 更改)。
没有包含代码,因为它尚未编写。