OAuth:存储访问令牌和密钥

19

我们有很多客户使用我们的API来支持他们的网站。

我在工作中开始了一次关于使用OAuth进行认证API调用的讨论。我们将同时有两个和三个步骤的流程。

对于三个步骤的流程,我们仍然没有就如何存储访问令牌和密钥达成共识。

解决这个问题的常见方法是让客户在自己的数据库中存储访问令牌和密钥,但由于客户不想处理代码更改和实现问题,所以这个方法不可行。

我们正在考虑的其他选项:

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

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

我不确定这两个选项是否都是好主意。有人有什么建议吗?

谢谢。


我个人因为安全原因而害怕使用Session/Cookie,因为这就像访问令牌一样。 - user284291
4个回答

13

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

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

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

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


1

正如Jason所提到的,如果消费者应用程序不存储身份验证所需的令牌,则无法进行经过身份验证的请求-他们可以以任何方式存储这些令牌,但这是方程式中必需的部分。它可以是文件系统、内存缓存、数据库或内存。

我唯一看到的使用cookie存储这些令牌凭证的方法是,消费者应用程序将这些令牌凭证设置为用户浏览器中的cookie,并要求用户在每个请求中将其发送回消费者-然而,这似乎很荒谬,因为首先,消费者应用程序再次需要更改其代码来处理此问题,其次,令牌和令牌密钥将冗余地在网络和用户浏览器中传输,如果用户自己决定进行黑客攻击,则可能存在安全漏洞。


0

当我实现三脚式OAuth时,我遇到了同样的问题。我将我的应用程序上线到Google App Engine并使用Google DataStore存储访问令牌。

然而,这里提到了存储数据和查询的配额here!这是在使用Google App Engine时唯一的限制!


0

关于1)将访问令牌和密钥保存在cookie中

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

我会选择使用数据库或PHP会话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接