Welcome friends to leave messages. But please do not send advertising information, it is useless. I don't have money to pay

OAuth、OIDC 和 IdentityServer4 三者的关系

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

前言

 

1、OAuth2 是一个授权框架(Authorization Framework),主要用于:

  • 让第三方应用(客户端)代表用户访问受保护资源(如API),而不暴露用户的凭据(比如密码)。

OAuth2 中的四个角色:

  1. Resource Owner:资源拥有者(比如用户)
  2. Client:第三方应用(比如App)
  3. Authorization Server:授权服务器(比如 IDS4)
  4. Resource Server:资源服务器(比如 API 服务)

常见的 OAuth2 授权模式:

  • 授权码模式(Authorization Code)
  • 密码模式(Resource Owner Password Credentials)
  • 客户端凭据(Client Credentials)
  • 隐式授权(Implicit)已过时

2、OIDC(OpenID Connect) 是建立在 OAuth2 之上的身份认证协议

它扩展了 OAuth2,提供了用户身份的认证机制,并引入了一个新的令牌:

  • ID Token(身份令牌):包含用户信息(如用户名、邮箱等)

核心特点:

  • OIDC = OAuth2 + 用户身份认证
  • 用于登录场景(Login)
  • 基于标准 JWT 格式的 ID Token
  • 可与 OAuth2 的 Access Token 同时返回

3、IdentityServer4(简称 IDS4) 是一个基于 .NET 的开源 OIDC 和 OAuth2 服务器实现

它可以做什么?

  • 实现 OIDC(用户登录认证)
  • 实现 OAuth2(资源授权)
  • 管理客户端(Client)、用户、资源、授权策略等
  • 生成 Access Token、ID Token、Refresh Token

其他

假设有一个这样的需求: 客户端程序需要访问资源服务器的 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

全部评论



提问