【Security】Authentication(身份认证)- OpenID Connect (OIDC)

Posted by 西维蜀黍 on 2025-05-22, Last Modified on 2025-05-23

OpenID Connect (OIDC)

OpenID Connect(简称 OIDC)是一个基于 OAuth 2.0 协议的身份认证层,它允许客户端应用程序验证用户的身份,并获取用户的基本信息(称为 profile 信息),这些信息通过一个称为 ID Token 的安全令牌提供。

OIDC 的核心作用

  • OAuth 2.0 解决了**授权(Authorization)**的问题:某个应用能否访问某些资源。
  • OpenID Connect 在其基础上解决了**身份认证(Authentication)**的问题:你是谁?

组成结构

+-------------+          +---------------+          +-----------------+
|  用户浏览器   | <------> |  客户端应用     | <------> | 身份提供方(OP) |
+-------------+          +---------------+          +-----------------+
                               ↑                            ↑
                               |---  ID Token, Access Token ----|
项目 说明
ID Token JWT 格式的身份令牌,包含用户身份信息(如 sub、email、name 等)
UserInfo Endpoint 一个标准化的 API 接口,客户端可以用 Access Token 请求更多用户资料
Discovery Endpoint 提供元信息,比如授权端点、token 端点、密钥等
Scopes 用于控制访问权限,常用的有 openid(必须)、profile、email 等
Claims 表示用户信息的字段,如 sub、name、email

示例 ID Token(JWT 结构):

{
  "iss": "https://accounts.google.com",
  "sub": "1234567890",
  "name": "Alice",
  "email": "alice@example.com",
  "iat": 1680000000,
  "exp": 1680003600
}

例子 - 一个典型 OIDC 登录流程(简化版)

  1. 用户点击登录,客户端跳转到身份提供方(如 Google)的授权端点。
  2. 用户登录并同意授权。
  3. 身份提供方重定向回客户端,同时返回一个授权码。
  4. 客户端使用授权码换取:
    • Access Token(访问资源用)
    • ID Token(用户身份信息)
  5. 客户端解析 ID Token,完成登录认证流程。

Reference