没有 OIDC 的 OAuth2.0(普通 OAuth2.0)

Posted

技术标签:

【中文标题】没有 OIDC 的 OAuth2.0(普通 OAuth2.0)【英文标题】:OAuth2.0 without OIDC (Plain OAuth2.0) 【发布时间】:2021-10-06 15:01:36 【问题描述】:

据我了解,我们可以使用不同帐户登录的应用程序使用 OpenID Connect(OAuth2.0 的配置文件)。 OAuth 用于授权,OIDC 用于身份验证(它具有 ID Token-User Info Endpoint)。

那么,在 OIDC 之前是否无法使用 OAuth 从另一个应用程序帐户登录到应用程序? (如果可能,怎么做?)

如果普通 OAuth 不能用于身份验证,它是/曾经用于什么? 我的意思是它与“授权”到底有什么关系? 它通过访问令牌从资源服务中得到什么?

【问题讨论】:

【参考方案1】:

我一直觉得这方面的行话没有帮助,所以我理解你的困惑。这是一个简单的英文摘要:

OAuth 2.0

在 OIDC 应用使用 OAuth 2.0 获取令牌之前,这涉及到可选的用户同意。获取令牌的过程称为“委托”。

实际上,尽管所有现实世界的 OAuth 2.0 提供商也包括身份验证,以确保他们的系统安全。 OAuth 规范中没有定义如何进行身份验证。

OAuth 主要是关于保护数据,其中范围和声明是机制。这些链接提供了更多信息:

IAM Primer Scope Best Practices Claims Best Practices

OIDC

这只是添加了一些关于身份验证之前和之后的身份验证消息应该如何工作的更清晰的定义:

客户端只需包含一个openid 范围即可使用 OpenID Connect 客户端可以在重定向期间通过prompt=login 参数强制登录 客户端可以通过acr_values参数请求认证方法 一旦身份验证完成,客户端会收到一个 ID 令牌(断言),如果需要,可以对其进行数字验证,然后使用其中的信息(例如用户名)

OIDC 仍然没有定义实际身份验证的工作方式。

一起使用

如今,几乎所有 OAuth 安全应用程序(和库)都同时使用这两者,因此身份验证和委托都使用基于标准的解决方案。它为您提供最好的应用程序功能和设计模式,以确保安全。

【讨论】:

感谢您的回答。它解释了我的第一个问题,但我仍然对第二个问题感到困惑。如果 Oauth 并非旨在标准化身份验证,那么它的设计目的是什么?它从带有访问令牌的资源服务中得到什么(使用普通的 oauth 标准)?脸书好友、推特收藏等非凭据信息? 好的 - 我在答案的 OAuth 部分添加了更多信息

以上是关于没有 OIDC 的 OAuth2.0(普通 OAuth2.0)的主要内容,如果未能解决你的问题,请参考以下文章

OAuth 2.0只是授权协议,OIDC才是认证授权协议

OIDC, Oauth2.0 , SMAL 的合而不同

OAuth2.0和OIDC详解

授权与认证OAuth 2.0 和 OIDC 的异同点

低代码如何构建支持OAuth2.0的后端Web API

是否有基于 OIDC 的基于 IDaaS 的社交登录的标准模式?