OAuth、OIDC 和 IdentityServer4 三者的关系

5/6/2022 5:32:35 PM
777
0

前言

工作中经常听到关于 OAuth2 的讨论,但很难用只言片语将这一整套体系解释清楚。本文希望通过查阅资料和开发实践,阐明 OAuth2、OIDC 和 IdentityServer4 三者关于 what、why、和 how 的问题。

OAuth、OIDC 和 IdentityServer4 三者的关系

假设有一个这样的需求: 客户端程序需要访问资源服务器的 API,又不希望每次访问都带上用户名密码做一次认证。面对这样的需求,不同的开发人员有自己的考虑,可能的实现多种多样。在经过长期沉淀和提炼之后,先驱们总结出了在不同场景下「委托授权」的最佳实践,然后为这一套最佳实践制定出一套规范 - OAuth。

OAuth 标准化了「委托授权」涉及的各个参与方、数据和 EndPoint,其目的在于为实现者提供一套统一的参考标准。由于时代原因,OAuth 1.0 已经不适合现代 Web 技术的使用场景,所以本文中谈到的 OAuth 均指 OAuth 2.0。OAuth 先于 OIDC 诞生,两者均为规范(Specifications),OAuth 对应 RFC6749,OIDC 对应 OpenID Connect Core 1.0 incorporating errata set 1,而 IdentityServer4 为 OIDC 在 .NET 平台 官方授权的实现类库。

OIDC是一个OAuth2上层的简单身份层协议。它允许客户端验证用户的身份并获取基本的用户配置信息。OIDC使用JSON Web Token(JWT)作为信息返回,通过符合OAuth2的流程来获取。例如,如果选择使用Google帐户登录Auth0,这就使用了OIDC。成功通过Google身份验证并授权Auth0访问您的信息后,Google会将有关用户和执行的身份验证的信息发送回Auth0。此信息在JWT中返回,包含ID Token或者Access Token。

JWT包含Claims,它们是有关实体(通常是用户)的Claims(例如名称或电子邮件地址)和其他元数据。OIDC规范定义了一组标准的权利要求。这组标准声明包括姓名,电子邮件,性别,出生日期等。但是,如果要获取有关用户的信息,并且当前没有最能反映此信息的标准声明,则可以创建自定义声明并将其添加到令牌中。

 

 OAuth 2.0 和 OpenID Connect  https://blog.frosthe.net/security-oauth2-and-openid-connect/

 OIDC详细流程  https://linianhui.github.io/oidc-in-action/01-oidc-sso/#oidc-client-trigger-authentication-request

全部评论



提问