我可能需要为我正在创建的 API 实现 OAuth2.0 服务器。此 API 将允许第 3 方代表用户执行操作。
OAuth2.0 有 3 个电源调用。首先,有一个电话提示用户同意。这会返回一个code
. 第二个是用code
交换 的地方access token
。最后,access token
用于代表用户调用 API。
为了实现,我认为第一次调用会生成一个随机字符串,它充当code
. 然后code
将带有指向当前用户的指针和随机的 存储在数据库中HMAC Key
,然后将随机数据作为 返回给第 3 方code
。
当第 3 方请求 时access token
,会生成另一条随机数据并与code
. 此字符串使用HMAC key
来自步骤 1 的 签名,然后此签名字符串和签名与签名一起返回以形成access token
.
当 API 调用发生时,从数据库中检索与hmac key
提供的对应的。access_token
的签名access_token
使用 hmac 密钥进行验证。
用户只需从其授权 HMAC 密钥列表中删除一个 HMAC 密钥,即可撤销第 3 方访问。此外,但只是签署随机数据,我可以避免存储每个创建的每个 access_token,而是维护一个简短的 hmac 密钥列表。
无论如何,这是我第一次尝试思考这个问题。令人惊讶的是,关于有效实现 OAuth2.0 的服务器端的信息很少。我宁愿在数据库中保留尽可能少的信息。签署随机数据然后撤销 HMAC 密钥的优点是我不必存储每个access token
授权调用生成的每个数据。
需要思考!一定有更好的方法!
编辑:
我不是在寻找实现。不过还是谢谢!另外,我假设整个系统将通过 HTTPs 运行。另外,我说的是纯 OAuth2.0 流程,我不是在谈论带有签名和客户端密钥的 OAuth1.0。我在问如何设计 OAuth2.0 服务器背后的密码学,该服务器将以与(例如)Google 的 OAuth2.0 流程类似的方式工作。