OAuth 2.0和OIDC的区别和联系,你能给我讲明白吗?

摘要:OAuth 什么是 OAuth? 总的来说,OAuth 不是一个 API 或者服务:它是一个授权开放标准,并且任何人都可以实现它。 更明确来说,OAuth 是一个标准,应用程序可以用来提供客户端程序“安全授权访问”。OAuth 在 HTTP
OAuth 目录OAuth什么是 OAuth?为什么是 OAuth?SAMLOAuth 和 APIOAuth 主要组件OAuth 作用域OAuth 参与者OAuth 令牌OAuth 工作流OAuth 不是一个认证协议通过 OAuth 2.0 伪认证进入 OpenID ConnectOAuth 2.0 总结OAuth 2.0PKCE权限类型Authorization CodeOAuth 2.1基于 OAuth 2.0 构建的协议OpenID Connect什么是 OpenID Connect?OpenID Connect 如何不同于 OpenID 2.0?规范组织引用 什么是 OAuth? 总的来说,OAuth 不是一个 API 或者服务:它是一个授权开放标准,并且任何人都可以实现它。 更明确来说,OAuth 是一个标准,应用程序可以用来提供客户端程序“安全授权访问”。OAuth 在 HTTPs 上工作并通过访问令牌授权设备、API、服务、和应用程序,而不是凭证。 有两个版本的 OAuth:OAuth 1.0a 和 OAuth 2.0 。这些规范是完全不同的,并且不能一起使用,它们之间没有向后兼容。 为什么是 OAuth? OAuth 的创建,是对直接认证模式的回应。这个模式因 HTTP Basic 认证而闻名,提示用户输入用户名和密码。Basic 认证一直用于服务器端应用程序 API 认证的原始表单:替代每次请求发送用户名和密码,用户发送一个 API key ID 和密钥。在 OAuth 之前,网站提示你键入用户名和密码到一个表单中,它们会以你的身份登录到你的数据中(例如:你的 Gmail 账户)。通常这叫做密码反模式。 为了能创建一个更好的 Web 系统,联合身份被创建用于单点登录(SSO)。在这种场景下,终端用户和他们的身份提供商对话,并且身份提供商生成一个加密的签名令交给应用程认证用户。应用程序信任身份提供商。只要信任关系和签名断言工作,就没问题。下图显示如何工作。 联合身份因 SAML 2.0(一个发布于 2005/03/15 的 OASIS 标准) 出名。它是一个巨大的规范,但是主要的两个组件是它的认证请求协议(也叫做 Web SSO)和它打包身份特性并对其签名的方式,被叫做 SAML 断言。 SAML SAML 在你的浏览器中是一个基础的会话缓存让你访问 Web 应用程序。它受限于设备文件类型和浏览器之外的场景。 OAuth 和 API 我们构建 API 的方式也发生了很大的变化。在 2015 年,大家投入 WS-* 构建 Web 服务。如今,大多数开发者已经迁移到 REST 和无状态 API。REST 简单的说是 HTTP 命令通过网络推送 JSON 包。 开发者构建大量的 API。如今 API 经济可能是你在会议室中常听见的词汇。公司需要保护他们的 REST API,以一种允许很多设备访问它们的方式。在从前,你要输入你的用户名、密码目录,然后 app 以你的身份登录。这就产生了授权问题。 “我如何允许一个 app 访问我的数据而不需要给它我的密码?” 如果你见过下面的会话,那就是我们在谈论的。一个应用程序请求它是否可以代表你访问数据。 这就是 OAuth。 OAuth 是一个用于 REST/API 委托授权框架。它使应用程序能够在不泄露用户密码的情况下获得用户数据的有限访问(scopes)。它从授权中解绑认证并支持多用户实例定位到不同设备的能力。它支持服务到服务的应用程序、以浏览器为基础的应用程序、移动端/原生 app、控制台程序和电视应用程序。 你可以认为这就像旅馆的房卡,但是用于应用程序。如果你有一个旅馆的房卡,你可以进入你的房间。你如果获取一个旅馆的房卡?你必须在前台做一个认证流程以得到房卡。认证后获得房卡,你可以通过旅馆访问资源。 简单的分解后, OAuth 是: App 从用户请求授权 用户授权 App 并且传递验证 App 提交授权验证到服务器获取一个令牌 令牌被限制只能访问用户为特定应用授权的内容 OAuth 主要组件 OAuth 构建于下列主要组件之上: 作用域和准许(Scopes and Consent) 参与者(Actors) 客户端(Clients) 令牌(Tokens) 授权服务(Authorization Server) 工作流(Flows) OAuth 作用域 作用域是当应用程序请求许可时你在授权页面上看到的内容。它们是客户端在请求令牌时请求的权限包(权限包:一堆权限)。它们是程序员在写应用程序时写的。 作用域从强制中解耦授权策略决策。这是 OAuth 的第一个关键点。权限是最重要的。
阅读全文