当前位置: 首页 > 知识库问答 >
问题:

OpenID Connect为OAuth 2.0添加了什么(为什么OAuth 2.0不足以进行身份验证?)

傅皓君
2023-03-14

我现在已经读了很多关于这方面的文章,但是我仍然不清楚OpenID Connect在OAuth 2.0之上提供的主要价值。

我的理解是:
当通过OAuth 2.0流接收访问令牌时,客户端确实知道用户已通过授权服务器的身份验证。OpenID Connect似乎只是添加了一个带有用户信息的ID令牌,但该信息可能是访问令牌的一部分,也可能通过受保护的资源(如单独的userDetails资源)提供。这似乎不能证明创建OpenID Connect是合理的,所以我确信我遗漏了一些东西。。。

谢谢你的帮助!

添加的详细信息太长,无法发表评论。非常感谢你迄今为止的帮助。

多亏了你的回答,我想我离你越来越近了。所以我回顾了这篇文章:http://oauth.net/articles/authentication/.它说“OAuth对用户没有任何说明”。但是,您信任该服务在发出访问令牌之前对最终html" target="_blank">用户进行身份验证。在“常见陷阱”部分,本文讨论了为什么不能使用访问令牌进行身份验证。据我所知,我有以下问题:

访问令牌作为身份验证的证明访问令牌是在某个先前点进行身份验证的证明。如果客户端确实希望在获得访问令牌后的某个时刻对用户进行身份验证,那么为什么不在当前最终用户尝试访问客户端时重复现有的Oauth流呢?

访问受保护的资源,如上所述-如果客户端在任何时候都需要身份验证,请重复Oauth流。

接入令牌的注入不清楚OpenID如何帮助实现这一点

缺乏受众限制为什么向天真的客户机提供有效的ID令牌和访问令牌更难?这是否与服务器端流相关?同样,如果需要,可以重复OAuth流。

注入无效用户信息这似乎需要签名,而不是单独的令牌。如果OAuth流通过HTTPS进行,是否会为标识提供者添加任何安全性来对用户详细信息进行两次签名?

每个潜在的身份提供者都有不同的协议这似乎是公平的,但如果唯一的目的是对用于用户信息的令牌进行标准化,那就显得很奇怪了。

共有3个答案

柴声
2023-03-14

OAuth 2.0是关于授予第三方对资源的有限访问权限。RFC从

OAuth 2.0授权框架使第三方应用程序能够获得对HTTP服务的有限访问。。。

OpenID Connect是关于建立最终用户的身份。OpenID连接核心规范从

OpenID Connect 1.0是OAuth 2.0协议之上的一个简单标识层。它使客户端能够根据授权服务器执行的身份验证终端用户的身份...

在OAuth 2.0中,当资源服务器收到包含访问令牌的请求时,资源服务器知道资源所有者已授予第三方对资源的访问权。访问令牌表示此批准,但它不标识提交此批准的第三方。

如果一家公司认为像Salesforce或Google这样的人在管理用户帐户、密码、数字证书等方面比他们更有能力,那么该公司可以使用OpenID Connect将这一责任“外包”给OpenID Connect提供商。当公司在OpenID连接流的上下文中收到id令牌时,它知道提供商已经对最终用户进行了身份验证并建立了用户的身份。

OpenID Connect重新调整了OAuth 2.0流的用途,以便可以建立最终用户的身份。

太叔富
2023-03-14

身份验证服务器可以对ID令牌进行签名。客户端应用程序可以验证签名,以确认最终用户已通过身份验证服务器的身份验证。受访问令牌保护的资源调用不提供这种机制。

此外,OpenID Connect还引入了与身份验证相关的其他机制,例如:

  1. 身份验证上下文类引用
  2. 最长认证期限
  3. sub索赔中的索赔请求参数

满足政府更高级别的安全要求。

阅读OpenID Connect Core 1.0和其他相关规范。此外,您可能会发现“授权交互”有助于总结OpenID Connect为控制最终用户身份验证所添加的内容。

太叔豪
2023-03-14

OAuth访问令牌对客户端是不透明的,可能由任何人提供,这意味着它不一定由登录用户交给客户端。攻击者可以向客户端提供访问令牌,该令牌是攻击者在其自己的(不一定是恶意的)服务中从其他用户处获得的。来自OpenID Connect的ID令牌确保用户最近在OP登录,并提供可由客户端验证的有关该用户的信息。此外,ID令牌专门针对您的客户机。

这些差异在本文中描述得相当清楚http://oauth.net/articles/authentication/

 类似资料:
  • 我正在尝试使用Mailkit从我的Gmail中接收电子邮件: 行:客户端。身份验证(oauth 2);引发异常- MailKit.Security.AuthenticationException 我按照这个答案设置了我的Gmail API,但是后来我遇到了认证失败的问题。 这是日志: 范围,我使用:GmailService.Scope.Gmail只读,因为我只需要检索电子邮件。 将我的范围更新为:

  • 根据RFC6750-OAuth 2.0授权框架:承载令牌用法,承载令牌为: 一种具有财产的安全令牌,任何拥有令牌的一方(“持票人”)都可以以任何其他拥有令牌的一方可以使用的任何方式使用该令牌。 对我来说,这个定义是模糊的,我找不到任何规范。 假设我正在实现一个授权提供者,我可以为承载令牌提供任何类型的字符串吗? 它可能是随机字符串吗? 它必须是某些属性的base64编码吗? 是否应该对它进行哈希?

  • 我试图理解为什么JWT认证是无状态的。在有状态认证中,会有一个会话id。这里有一张JWT的代币,上面有签名。所以身份验证服务器发布JWT令牌,但是我可以说后续请求中JWT令牌的验证是由endpoint服务器(应用服务器)而不是身份验证服务器来完成的吗?我相信这是可能的,因为JWT是用截止日期(还有一些其他信息)签名的,并且认证服务器的公共证书对所有endpoint服务器都是可用的。 因此,认证服务

  • 问题内容: 简而言之… 首先,为什么npm建议仅以非root用户身份运行它?我不相信高,每一个其他的包管理器(,,,)是错误的,需要sudo的。 其次,当我遵循他们的建议(并以非超级用户身份运行)时,它将不起作用(因为非超级用户没有对/ usr / local / lib的许可)。我如何遵循他们的建议?我不会去,因为这对我来说似乎是个坏主意。 详细描述… 我通过(自述文件中的说明)安装了npm。

  • 这是我的文件: 以下行位于文件中: 我正在通过Maven使用Tomcat8.0和所有最新的依赖项。

  • 我的问题是:为什么这是流动?我想是出于安全原因,但我想不通。为什么实现是这样的,而不是在第一次调用(“/authorize”)之后立即获得访问令牌? 我们为什么需要这个代码?