security - 为了安全起见,OIDC提供的id token有什么好处?如果 id 令牌被盗怎么办?
问题描述
我已经阅读了很多关于 OIDC 和 OAuth2 的内容,我知道 id 令牌主要用于客户端了解用户是谁以及用户当前是否仍然在线。
此外,Id 令牌可以防止一类冒充攻击[您可以在本文中找到更多详细信息]。
但是如果 id 令牌被盗怎么办?攻击者可以使用 id 令牌冒充用户吗?
在我们的项目中,除了 OIDC 之外,我们只确保 https。我还应该采取哪些其他安全措施来减轻模拟攻击?
解决方案
OIDC 的目标或目的不是为了比 OAuth2 更安全,这种比较没有意义。他们解决不同的问题。
让我们从 OAuth2 开始。简而言之,OAuth2 解决了当网站持有用户数据并且该用户希望将其部分数据的访问权限授予另一个网站时的问题。假设您有一个 Facebook 帐户,但希望允许我的应用程序访问您在 Facebook 上的一些数据,或者更具体的示例,您希望允许我的 awesomeapp.com 应用程序发布到您的 Facebook 墙的链接。为此,我的网站将您重定向到 Facebook,您登录,获取访问令牌,然后将该访问令牌发送回我的网站,以便我可以以您的名义使用它来获取您允许我访问的内容。
请注意,缺少一件事。我不知道你是谁。我只有一个访问令牌,我可以用它做一些事情,但我没有关于你的身份信息。当然,这可以以不同的方式被滥用,访问令牌可以保存您的电子邮件地址或其他任何东西,但它是有限的,大小很重要,并且没有标准的方式。
至少在 OIDC 出现之前不会。OIDC 提供身份元素。
ID 令牌的目的是提供身份信息,告诉我你是谁。它可能会声称您的电子邮件地址是什么、您所在的安全组、您为哪家公司工作或其他任何内容。此外,它还可用于下载更多声明,以防它们不完全适合实际令牌(请参阅userinfo)。这些声明来自身份提供者,比如 Facebook,我的应用程序当然必须信任它,即我会相信 Facebook 告诉我的关于你的任何信息。
使用纯 OAuth2,这一切都是可能的,但是没有标准的、众所周知的方法来做到这一点(或者,它是 OIDC :))。你可以自己发明和实现一些东西,但这些东西比最初看起来要复杂得多。这就是发明 OIDC 的原因,因此您不必这样做。但毕竟 OIDC 只是一种使用 OAuth2 提供身份的方式。最后,如果您愿意,它只是一个扩展的 OAuth2。
至于您需要考虑哪些安全因素 - 您的这部分问题太宽泛了,很遗憾无法回答。安全是一个非常复杂的话题。
推荐阅读
- android - Unity AndroidSdkVersions.AndroidApiLevel29 缺失
- c - 冲突类型
- python - 如何使用户输入不是字符串或输入而是运算符?
- github - README 在 npmjs 中变形但出现在 github
- python - 从 pd.DataFrame 索引中删除 np.nan
- typescript - Angular 9 HttpClient - TypeError:url.indexOf 不是函数
- php - Laravel 迁移类型年份变得未定义的方法
- php - 为什么 curl 链接通过 localhost 重定向?
- java - 为空时 EditText 崩溃
- python - 用 BeautifulSoup 在开始的 div 标签的描述中抓取?