OAuth:存储访问令牌和秘密问题怎么解决?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (4)
  • 关注 (0)
  • 查看 (306)

我们有许多客户使用我们的API来为他们的网站提供动力。

我已经开始了关于使用OAuth进行认证API调用的对话。

对于三足式流程,我们还没有就如何存储访问令牌和秘密达成共识。

解决这个问题的常见方法是让客户端将访问令牌和秘密存储在他们自己的数据库中,但这是不可能的,因为客户端不想处理代码更改和实现问题。

我们正在考虑的其他选项

1)将访问令牌和秘密保存在cookie中

2)将它们保存在会话中。

我不确定这些是否是一个好主意。 有没有人有什么建议?

提问于
用户回答回答于

我假设你正在谈论典型的“服务提供商”,“消费者”和“用户”类型的设置。 如果您的消费者(客户)拒绝做出任何更改,我不知道您是否能够实施三方oAuth。

会话和cookie可用于保存令牌,但问题在于它是您的客户(您的客户)需要保存它们 - 而不是您。 对您的API的调用发生在后端,因此在该范围内没有可用的会话或cookie。 如果您只是进行JavaScript调用,也许这确实起作用,但即使这样,通常通过代理进行调用,以避免跨域脚本问题。

无论哪种情况,如果令牌存储在会话或cookie中,它们将是“临时”密钥,并且当会话或cookie过期时,用户将不得不重新进行身份验证。 但是,只要用户不介意重新进行身份验证,oAuth规范就没有任何问题。

你可以参考使用MVC 5 Razor引擎编写的.NET示例应用程序

用户回答回答于

1)将访问令牌和秘密保存在cookie中

考虑你的客户在网吧,他没有清除cookies后下一个人复制这些信息会发生什么?

我会去DB或PHP会话

用户回答回答于

当我使用三脚式的oauth时,也遇到了同样的问题。 我在Google App Engine上在线申请了我的应用程序,并使用Google DataStore存储访问令牌。

但是,配额在这里被提及用于存储数据和抛出查询! 这是使用Google App Engine的唯一限制!

用户回答回答于

如果消费者应用程序不存储验证所需的令牌,那么消费者应用程序就不可能进行验证请求 - 它们可以以任何他们想要的方式存储它们,但这是等式所需的一部分。 它可以是文件系统,memcache,数据库,内存。

我看到使用cookie来存储这些信息的唯一方法是让消费者应用程序将这些令牌凭证设置为用户浏览器中的cookie,并将用户发送给用户,但每次请求都会将其发回给客户 - 但是,这似乎是荒谬的, 消费者应用程序将再次需要对其代码进行更改以处理此问题;其次,如果用户自己决定进行黑客行为,则令牌和令牌密钥将冗余地绕过网络和用户的浏览器,这可能成为安全漏洞。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励