我正在为我创建的 API 实施 oauth2 解决方案,我正在努力应对潜在的不安全感(或者至少我的理解)。
仅生成一个令牌并将其用作端点请求的身份验证凭据是否正确。是什么阻止了潜在的暴力攻击,攻击者只是将令牌提交给 API,希望令牌有效并正在使用中?
我可能误解了一些东西,但我无法在我的生活中得到它是什么。
我正在为我创建的 API 实施 oauth2 解决方案,我正在努力应对潜在的不安全感(或者至少我的理解)。
仅生成一个令牌并将其用作端点请求的身份验证凭据是否正确。是什么阻止了潜在的暴力攻击,攻击者只是将令牌提交给 API,希望令牌有效并正在使用中?
我可能误解了一些东西,但我无法在我的生活中得到它是什么。
当然,令牌应该是难以想象的。例如,它们不应该是简单的连续整数。令牌长度也没有限制。基本上有两种选择:
1)构建一个使用您自己的密钥加密的长令牌(注意:它不必很长,但它会因为密码学会隐含地使其变长)。您可以在返回时检查令牌是否真的属于您,因为您是唯一可以加密和解密这些令牌的人。
2) 构建也存储在数据库中的令牌,并且相当难以创建,因此您将检查数据库中是否存在令牌。
您也可以混合使用这两种方法。您还应该为令牌添加一些过期时间(在第一种情况下嵌入其中,或者在第二种情况下将令牌放在数据库中)。
OAuth 2.0 中最容易受到暴力攻击的授权类型之一是资源所有者密码凭证类型。在这种情况下,黑客可以访问客户端凭据(clientId 和密码),他/她只需要资源所有者(用户)凭据(用户名和密码)。Java - Spring Security 中描述了一个身份验证实现模型,可以避免这个问题。