OIDC (OpenID Connect) 接入文档
通过标准OIDC协议进行身份认证,支持自动发现配置和ID Token
什么是OIDC?
OpenID Connect (OIDC) 是基于OAuth 2.0协议的身份认证层。它在OAuth 2.0的基础上增加了身份认证功能,提供了标准化的用户身份信息获取方式。OIDC支持自动发现配置,使得第三方应用可以更容易地集成身份认证功能。
OIDC vs OAuth2.0
- OAuth2.0:主要用于授权,获取访问令牌来访问受保护的资源
- OIDC:在OAuth2.0基础上增加身份认证,提供ID Token包含用户身份信息
- 自动发现:OIDC支持通过发现端点自动获取配置信息
- 标准化:OIDC提供了标准化的用户信息格式和获取方式
发现端点
发现配置
https://connect.czl.net/.well-known/openid-configuration
通过访问发现端点,您可以获得完整的OIDC配置信息,包括:
- 授权端点 (authorization_endpoint)
- 令牌端点 (token_endpoint)
- 用户信息端点 (userinfo_endpoint)
- JWKS端点 (jwks_uri)
- 支持的响应类型和权限范围
- 支持的签名算法
OIDC流程示例
1. 获取OIDC配置信息:
GET https://connect.czl.net/.well-known/openid-configuration
Response:
{
"issuer": "https://connect.czl.net",
"authorization_endpoint": "https://connect.czl.net/api/oidc/auth",
"token_endpoint": "https://connect.czl.net/api/oidc/token",
"userinfo_endpoint": "https://connect.czl.net/api/oidc/userinfo",
"jwks_uri": "https://connect.czl.net/api/oidc/jwks",
"response_types_supported": ["code", "id_token", "token id_token"],
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["RS256"],
"scopes_supported": ["openid", "profile", "email"]
}
2. 发起OIDC授权请求(必须包含openid scope):
https://connect.czl.net/api/oidc/auth?
response_type=code
&client_id=YOUR_CLIENT_ID
&redirect_uri=YOUR_REDIRECT_URI
&scope=openid profile email
&state=RANDOM_STATE_VALUE
&nonce=RANDOM_NONCE_VALUE
3. 令牌交换(获得ID Token):
POST https://connect.czl.net/api/oidc/token
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=AUTHORIZATION_CODE
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&redirect_uri=YOUR_REDIRECT_URI
Response:
{
"access_token": "ACCESS_TOKEN",
"id_token": "ID_TOKEN_JWT",
"token_type": "bearer",
"expires_in": 3600
}
4. ID Token包含的用户信息(解码后的JWT payload):
{
"iss": "https://connect.czl.net",
"sub": "1",
"aud": "YOUR_CLIENT_ID",
"exp": 1640995200,
"iat": 1640991600,
"nonce": "RANDOM_NONCE_VALUE",
"username": "zhangsan",
"nickname": "张三",
"email": "zhangsan@gmail.com",
"avatar": "https://avatars.githubusercontent.com/u/95951386?v=4",
"groups": "t0,t1,t2,t3,t4,t5,viewer,admin"
}
OIDC注意事项
- scope参数必须包含"openid"才能启用OIDC功能
- ID Token使用RS256算法签名,需要使用JWKS端点获取公钥进行验证
- 建议使用nonce参数防止重放攻击
- ID Token有效期为1小时
- 现有OAuth2.0应用无需修改即可继续工作
- OIDC完全兼容OAuth2.0,只是在其基础上增加了身份认证功能
- 生产环境必须使用HTTPS
- 客户端应验证ID Token的签名、颁发者、受众和过期时间
- ID Token中同样包含groups字段,提供用户权限级别信息