1
499
刷新令牌的思想是,如果访问令牌受到损害,因为它是短暂的,攻击者有一个有限的窗口来滥用它。
话虽如此 当然,这与不同时控制授权服务器和资源服务器的实现不同。 下面是一篇讨论刷新令牌用法的好文章: OAuth Archives .
|
2
591
Catchdave提供的讨论链接还有另一个问题 valid point (original, dead link) 由迪克·哈特制作,我认为除了上面写的内容之外,这里还值得一提:
实际上,在资源服务器和授权服务器是同一个实体,并且用户和它们之间的连接(通常)是同等安全的情况下,将刷新令牌与访问令牌分开是没有多大意义的。
一般来说,令牌可以是指向服务器数据库中特定记录的随机标识符,也可以包含其自身的所有信息(当然,这些信息必须用 MAC 具有长寿命访问令牌的系统应该如何工作
具有长寿命刷新令牌和短命访问令牌的系统应该如何工作 这里我们发布两个密钥:随机刷新令牌和数据库中相应的记录,以及签名的自包含访问令牌,其中包含过期时间戳字段。 由于访问令牌是自包含的,因此我们根本不必访问数据库来检查其有效性。我们所要做的就是解码令牌并验证签名和时间戳。 尽管如此,我们仍然需要保留刷新令牌的数据库,但是对该数据库的请求数通常由访问令牌的寿命定义(寿命越长,访问率越低)。
刷新令牌部分消除了Access令牌数据库的单点故障(SPoF,Single Point of Failure),但也存在一些明显的缺点。
我希望这个答案是有意义的,并帮助一些人作出更深思熟虑的决定。我还想指出,一些著名的OAuth2提供商,包括github和foursquare,采用了没有刷新令牌的协议,并且似乎对此很满意。 |
3
223
最佳平衡 在骚扰用户之间 输入用户名/密码,并保留撤销潜在用户访问权限的权限 谢谢你的服务。 想象一下这样的场景。您向用户发出3600秒的访问令牌,刷新令牌的时间比一天长得多。
当我们试图平衡我们的工作、用户体验和令牌被盗的潜在风险时,您可以看到refresh令牌表现得非常完美。你的看门狗在服务器端可以检查多个IP的变化,api调用的频率,以确定用户是否应该是一个好用户。 换言之,您还可以尝试通过在每个api调用上实现基本IP看门狗或任何其他措施来限制对被盗令牌/滥用服务的损害控制。但这是昂贵的,因为您必须读取和写入有关用户的记录,并会减慢服务器响应速度。 |
4
82
因此,刷新令牌的唯一目的是限制通过有线发送到auth服务的客户端凭据的使用。越短越好 TTL |
5
64
为了澄清一些困惑,你必须理解 client secret 以及 用户密码 ,这是非常不同的。 这个 客户 是一个应用程序/网站/程序/…,由服务器支持,希望 验证 用户 通过使用第三方身份验证服务。客户机机密是一个(随机)字符串,该字符串对此客户机和身份验证服务器都是已知的。使用这个秘密,客户机可以通过身份验证服务器识别自己,接收 请求访问令牌。 要获取初始访问令牌和刷新令牌,需要:
客户 使用以下信息:
这清楚地显示了区别:在刷新时,客户机通过使用其客户机机密接收刷新访问令牌的授权,并因此可以使用刷新令牌重新验证用户 相反 用户ID+密码。这有效地防止了用户必须重新输入他/她的密码。 这也表明丢失刷新令牌没有问题,因为客户机ID和secret是未知的。它还表明,保持客户ID和客户机密是非常重要的 至关重要的 . |
6
39
这个答案来自justinricher通过oauth2标准邮件列表。这是经他许可张贴的。
另外,仅仅获得一个访问令牌并不意味着用户已经登录。实际上,用户可能已经不在了,这实际上是refresh令牌的预期用例。刷新访问令牌将为您提供代表用户访问API的权限,它不会告诉您用户是否在那里。
|
7
28
使用刷新令牌的主要原因是为了减少攻击面。 假设没有refresh键,让我们看一下这个示例: 一座建筑物有80扇门。所有的门都是用同一把钥匙打开的。钥匙每30分钟换一次。在30分钟结束时,我必须把旧钥匙交给钥匙制造者,然后得到一把新钥匙。 如果我是黑客,得到了你的钥匙,那么在30分钟结束时,我会把它快递给钥匙制造者,得到一把新钥匙。我将能够 打开所有车门,无论钥匙是否更换。 问题: 现在让我们来看看相同的例子,但是这次让我们假设有一个刷新键。 一座建筑物有80扇门。所有的门都是用同一把钥匙打开的。钥匙每30分钟换一次。要获得新密钥,我不能传递旧的访问令牌。我只需要传递刷新键。
在这30分钟里,我有多少次针对刷新键的黑客攻击机会?80? 没有。我只有一次黑客攻击的机会。在这段时间里,信使与钥匙制造者沟通。这就是攻击面。 我确实有80次破解钥匙的机会,但30分钟后就不行了。
访问令牌泄漏是不好的,但一旦过期,对攻击者就不再有用了。刷新令牌泄漏的情况要严重得多,但可能不太可能。(我认为刷新令牌泄漏的可能性是否比访问令牌泄漏的可能性低得多,这是一个值得怀疑的问题,但正是这个想法。) 关键是,访问令牌被添加到您发出的每个请求中,而刷新令牌仅在刷新流期间使用 所以MITM看到代币的可能性很小 此外,如果授权服务器与处理其他客户机请求的应用程序服务器分离,那么该应用程序服务器将永远不会看到刷新令牌。它只会看到无法使用更长时间的访问令牌。 分隔有利于安全。 刷新令牌不是关于什么?
|
8
20
客户可能在许多方面受到损害。例如,手机可以被克隆。访问令牌过期意味着客户端必须重新向授权服务器进行身份验证。在重新认证期间,授权服务器可以检查其他特征(IOW执行自适应访问管理)。 刷新令牌只允许客户端重新身份验证,其中as-re-authorize强制与用户进行对话,许多人表示他们不愿意这样做。 刷新令牌基本上适用于同一个位置,正常网站可能会选择在一小时左右后定期重新验证用户(例如银行网站)。由于大多数社交网站都不会对web用户进行重新身份验证,所以目前它的使用率并不高,那么他们为什么要对客户端进行重新身份验证呢? |
9
15
不能撤消访问令牌,只能撤消刷新令牌。 |
10
14
每个令牌都包含声明,声明可以包括用户名、角色或创建声明的提供者等任何内容。当令牌被刷新时,这些声明将被更新。 如果我们更频繁地刷新令牌,显然会给我们的身份服务带来更大的压力;然而,我们正在获得更准确和最新的声明。 |
11
6
假设你成功了
但如果你有
|
12
3
而刷新令牌由授权服务器保留。访问令牌是自包含的,因此资源服务器可以在不存储它的情况下对其进行验证,从而节省了验证时的检索工作。 讨论中缺少的另一点是rfc6749第55页
我认为使用refresh token的关键是,即使攻击者设法获得refresh token、客户机ID和秘密组合。如果每次刷新请求都会产生新的访问令牌和刷新令牌,则可以跟踪攻击者的后续调用以获取新的访问令牌。 |
13
2
让我们考虑一个系统,其中每个用户链接到一个或多个角色,每个角色链接到一个或多个访问权限。可以缓存这些信息以获得更好的API性能。但是,用户和角色配置可能会发生变化(例如,新的访问可能被授予,或者当前的访问可能被撤销),这些变化应该反映在缓存中。
换句话说,我们可以将昂贵的操作从使用访问令牌的每个API调用转移到使用刷新令牌生成访问令牌的事件。 |
14
1
|
Farid · 限制django每个客户的访问 2 年前 |
josegp · 在Nmap中-p-tag是什么意思 2 年前 |
kramer65 · 如何根据网站用户在S3上添加非公共网站文件? 6 年前 |
derf26 · 如何阻止React Web包包含包中的脚本。json 6 年前 |
user8663960 · 最好也是最简单的方法是保护登录表单的安全 6 年前 |