我应该重新使用OAuth 2.0访问令牌吗?
我正在构建一个OAuth 2.0授权服务器。
还有一个使用我的授权服务器的第三方Web应用程序(客户端)。 这是一个普通的Web应用程序,用户可能会与此应用程序建立多个活动会话(例如,办公室和家庭计算机,或同一台计算机上的多个Web浏览器)。
我的授权服务器向客户端发出一次访问令牌#1(有或没有刷新令牌,这在这里并不重要)。 当用户开始与客户端的新会话时,授权服务器是否应为客户端应用程序为该新会话提供相同的访问令牌#1,或者是否应该发出新的#2令牌?
我的思想:
从安全角度来看,新令牌可能听起来更好,但如果用户想要管理其授权,他会为每个客户端会话看到一个单独的条目,这可能很麻烦。
例如,GitHub为以前获得授权的客户端返回相同的标记,并在我的GitHub帐户的“应用程序”页面上,我看到每个应用程序只有一个条目,不管我已启动多少个会话,这很方便。
然而,这种方法意味着我必须以可逆的方式(纯文本或用一些已知密钥加密)在授权或资源服务器中存储访问令牌,而不是使用不可逆的散列(就像您通常对密码做的一样,存储盐和密码散列来自bcrypt,pbkdf2或类似的东西)。
请注意,我不是安全专家,这个解释是我对oauth的一般想法。 之所以我在一开始提到这一点,是因为我看到您正在创建基于oauth 2.0协议的自己的AUTH SERVER ,这意味着有些人可能会使用服务器进行身份验证,因此我不希望您拥有错误的概念。
session-oauth不匹配
我想首先明确这一点,不要混合会话和oauth。 这些是通常发现在一起工作的两个单独的事情恕我直言
Oauth协议只是向应用程序/用户提供访问令牌,应用程序/用户可以通过该令牌查询服务器以获取与令牌相关的数据。
另一方面, 会话取决于应用程序本身。 一旦某个应用程序收到该令牌,他们就会从中取出一个会话。 当用户登录或注销时,会话被破坏,而不是oauth。
那么oauth token的命运是什么?
那么从服务器的角度来看,你的每个令牌应该在一段时间后过期。 这就对了。 服务器不知道其他任何东西。 它为您提供令牌,然后在'n'秒后过期。
但是,应用可能会决定撤销访问令牌。 也许他们的网站被黑客攻击,或者他们的所有API调用都完成了。 然后他们可以向您的服务器发送特殊请求,告诉您强制过期令牌。
那么我应该怎么做用户打开多个会话?
绝对没有。 作为oauth服务提供商,您根本不关心会话。 所有你知道的是,如果应用程序要求你输入一个令牌,那么你给他们一个。
不过,我也会回答你关于会议的问题。 你应该为同一用户产生不同的会话吗? 我会说是的。 如果您有相同的会话,那么如果您从一台计算机注销,并在第二台计算机上刷新页面,由于会话已过期,您的其他浏览器/计算机也会自动注销。
那么github如何管理不显示额外条目?
那么我不为他们工作,所以我不知道。 但我想他们会检查每个会话,如果两个或更多会话与同一用户关联,他们知道用户必须使用多个设备。 然后当你的一个设备向github发送一些请求时,他们可以从IP地址猜测你的位置,如果你的很多机器都从同一个地方发出请求,你就必须使用多台机器。 如果没有,那么也许一些攻击者也在使用您的帐户。
这是AFAIK银行如何预测恶意用户的方式 - 这不是唯一的方式,他们有时也会预测您用于访问银行记录的模式,如果这种模式不同,您的帐户很有可能会被盗用。
所以现在你可能会问我,你真的确定我应该创建尽可能多的令牌作为应用程序要求我吗?
这是我不太确定的部分。 从我所看到的,oauth有两件事。 谷歌这两个术语的更多信息:
回答“我应该重新使用OAuth 2.0访问令牌吗?”
是的,令牌应该在给定的到期时间内使用多次(谷歌将其设置为1小时)。 过期后,使用刷新令牌获取另一个访问令牌并根据需要多次使用它。 继续重复这个过程。
如果您的用户不会在线为您启动oauth进程,并且您没有刷新令牌,那么应用程序需要具有“离线”令牌。
我应该存储我的授权令牌吗?
如果你的应用需要它,你也可以,但由于可能会泄露,因此无法推荐。 令牌应该在给定的时间限制内提取数据,并在需要时重新发布令牌。 但是,如果你愿意,你一定可以储存它们。
另一方面,预计“离线”令牌将被存储。 如果你喜欢,你可以加密它们,但如果范围不是太广泛,我根本不会打扰。
链接地址: http://www.djcxy.com/p/90421.html