概述
OIDC全称为OpenID Connect,是一种基于OAuth 2.0协议的扩展。它允许客户端应用程序在获取访问令牌的同时也能获取关于最终用户身份的信息。OIDC的主要目的是为了进行用户身份验证,同时也可以传递用户属性。
OIDC协议中主要有四种角色
(1)资源所有者:这是指实际的用户,即系统中的真实个体,他们拥有访问受保护资源的权限。
(2)客户端:也被称为依赖方 (Relying Party),是指希望访问资源的应用程序。客户端需要向认证服务器申请访问令牌和ID Token。
(3)认证服务器 (ID Provider):负责处理用户的认证和授权请求。它会验证用户的身份,并在认证成功后发放访问令牌和ID Token给客户端。
(4)业务后端服务:存储受保护资源的服务器,这些资源只能通过有效的访问令牌访问。资源服务器会检查访问令牌的有效性,以决定是否允许客户端访问资源。
典型的OIDC工作流程通常如下:
(1)客户端应用向认证服务器请求授权,提供其客户端ID和其他参数。
(2)请求被重定向到认证服务器并由用户进行登录。
(3)登录成功后,用户会被重定向回客户端应用,并附带一个授权码(Authorization Code)。
(4)客户端应用使用授权码向认证服务器请求访问令牌和ID Token。
(5)认证服务器返回访问令牌和ID Token给客户端应用。
(6)客户端应用可以使用访问令牌来访问受保护的资源,同时使用ID Token来进行用户身份验证。
OIDC广泛应用于单点登录(SSO)场景中,用户只需要在一个地方登录就可以访问多个不同的应用程序和服务。
在云原生网关中支持配置OIDC策略,云原生网关作为客户端实现OIDC认证,流程如下
OIDC策略配置
前置条件
- 部署好身份认证服务(IDP)
- 在IDP中为云原生网关申请客户端(clientid,client secret等)
OIDC策略配置
在 安全认证 > 认证鉴权菜单下,选择创建鉴权,鉴权类型选择OIDC,填写相关参数即可;参数说明如下
参数 | 说明 |
---|---|
clientId | 云原生网关作为OIDC客户端的clientid。 |
clientSecret | 云原生网关作为OIDC客户端的client secret。 |
discovery | OIDC配置发现端点,通常以 .well-known/openid-configuration 的形式附加在 OpenID Provider 的基础 URL 上。 |
realm | 对于一些IDP实现(如Keycloak),realm代表一个虚拟的边界或环境,每个realm内有自己独立的配置,用于实现逻辑上的隔离。 |
redirectUri | IDP认证成功后重定向的uri。 |
scope | IDP中定义的当前客户端(云原生网关)可以访问的范围,比如openid scope 表示请求用户的基本身份信息,而 profile 和 email 则分别表示请求更详细的用户资料和电子邮件地址。 |
bearerOnly | 打开该选项时,网关只会对请求中的鉴权信息做校验。 |
sslVerify | 网关是否校验IDP的证书信息。 |
setAccessTokenHeader | 是否在转发到后端的请求头部中设置Access Token。 |
accessTokenInAuthorizationHeader | setAccessTokenHeader为true时生效,如果打开则在Authorization头部设置Access Token,否则在X-Access-Token头部设置Access Token。 |
setIdTokenHeader | 打开时将在转发给后端的X-ID-Token头部设置id token。 |
setUserInfoHeader | 打开时将在转发给后端的X-Userinfo头部设置user info。 |
logoutPath | 登出路径。 |
timeout | 网关和IDP通信的超时时间。 |
introspectionEndpoint | token校验端点。 |
introspectionEndpointAuthMethod | 请求token校验端点的方法。 |
publicKey | token校验的公钥。 |
tokenSigningAlgValuesExpected | token签名校验算法。 |