我知道这个问题已经被问过很多次,形状和形式各不相同,但我还不清楚一些事情。令人困惑的是,围绕Web的这个主题的资源如何引用" user"没有明确的背景。 API密钥是为用户发布的,访问令牌也是如此,但我不认为API密钥用户与访问令牌用户相同。
- 您是否需要为最终用户客户端的不同实例使用不同的API密钥?例如,如果我为第三方API构建移动应用程序,每个实例是否都保留自己的API密钥?我不认为他们这样做,但我如何绑定API密钥,并一起访问令牌以表示某个请求来自已知用户授权的应用程序的特定实例?如果我是auth提供者,我是否必须跟踪每个提供者?
- API密钥和访问令牌通常由一对公钥和共享密钥表示。作为服务提供者(服务器端),我使用哪一个来验证我收到的消息,API密钥或访问令牌?如果我理解正确的话,那就是每个请求都应附带一个从API密钥的秘密部分派生的签名,以便服务器可以检查它是否来自可信客户端。现在我对访问令牌秘密有什么用处?我知道访问令牌用于验证系统用户是否授权应用程序代表他们进行操作,但是消息的哪一部分对访问令牌秘密有用?
- 是否从(安全的)随机数生成的哈希值和时间戳盐是一个很好的API密钥生成策略?
- 是否有(最好是开源的,基于Java的)框架来完成大部分工作?