配置OIDC认证鉴权

通过OIDC协议与企业的认证鉴权系统整合,可以实现对内部服务的统一认证和授权管理,避免了重复的对接工作,同时简化了认证流程。云原生API网关提供了统一认证鉴权,加强了系统的安全性,并提供了更加灵活的安全策略配置。整合OIDC协议还能实现单点登录,您只需一次登录即可访问多个服务。

前提条件

已创建统一的认证鉴权服务,且支持标准的OIDC(OpenID Connect)协议。

背景信息

网关作为外界访问内部服务的一个控制点,需要对外部的请求进行认证鉴权,确保内部服务的安全性。企业内一般会自建一套统一的认证鉴权体系,云原生API网关支持通过OIDC协议与自建的认证鉴权体系打通,支持对接入的内部服务做统一认证鉴权,避免每个服务都需要对接认证鉴权体系。

基于OIDC认证

OIDC(OpenID Connect)是一种安全认证机制,第三方应用连接到身份认证提供商(Identify Provider)获取用户信息,并把这些信息以安全可靠的方式返回给第三方应用。OIDC对OAuth2.0协议进行了扩展,通过扩展的ID Token字段,提供用户基础身份信息,ID Token使用JWT(JSON Web Token)格式进行封装,提供自包含性、防篡改机制,可以安全地传递给第三方应用程序并容易被验证。

假设有以下四个角色:

  • 客户端:直接为用户提供服务。

  • 认证服务:OpenID提供方,通常是指OpenID认证服务器,为第三方颁发用于认证的ID Token。

  • 业务服务:提供业务服务。

  • 用户:指资源持有者。

image

业务流程如下:

  1. 客户端发送认证请求给认证服务。

  2. 用户在认证页面进行授权确认(通过用户名和密码登录)。

  3. 认证服务对认证请求进行验证,并返回Code给客户端。

  4. 客户端向业务服务请求回调接口,请求中携带Code。

  5. 业务服务请求认证服务颁发Token,请求中携带Code、Client ID、Client Secret。

  6. 认证服务验证合法性,并返回ID Token。

  7. 认证成功,业务服务返回ID Token给客户端。

  8. 客户端向业务请求,请求中携带ID Token。

  9. 业务服务验证ID Token是否合法,然后返回业务应答。

云原生API网关OIDC认证流程

在上述OIDC认证流程中,如果有不同的业务服务,例如用户服务、订单服务等,则每个业务服务都需要实现认证鉴权逻辑,包括校验请求是否合法、对接认证服务等。通过云原生API网关的OIDC认证功能,可以实现在网关统一认证鉴权。

image

业务流程如下:

  1. 客户端向网关发起认证请求。

  2. 网关将认证请求直接转发到给认证服务。

  3. 认证服务读取请求中的验证信息(例如用户名、密码)进行验证,验证通过后返回Code给网关。

  4. 网关将携带Code的应答返回给客户端。

  5. 客户端向网关请求回调接口,请求中携带Code。

  6. 网关请求认证服务颁发Token,请求中携带Code、Client ID、Client Secret。

  7. 认证服务验证合法性,并返回ID Token。

  8. 认证成功,网关将携带ID Token的应答返回给客户端。

  9. 客户端向网关发起业务请求,请求中携带ID Token,网关校验请求中是否携带ID Token和合法性。

  10. 网关校验客户端的业务请求合法,将请求透传给业务服务。

  11. 业务服务进行业务处理后应答。

  12. 网关将业务应答返回客户端。

在整个认证鉴权过程中,云原生API网关会验证请求是否合法。如果请求不合法,云原生API网关会重定向到用户登录页面,并能代理请求认证服务实现用户登录认证,实现业务服务对认证服务无感知。

创建认证鉴权规则

  1. 登录云原生API网关控制台

  2. 在左侧导航栏,选择实例,并在顶部菜单栏选择地域。

  3. 实例页面,单击目标网关实例名称。

  4. 在左侧导航栏,单击安全管理 > 全局认证鉴权

  5. 在页面左上角,单击创建鉴权配置网关鉴权相关参数,然后单击确定

    云原生API网关OIDC认证鉴权参数说明如下。

    参数

    描述

    开启

    是否开启云原生API网关鉴权。

    鉴权名称

    自定义云原生API网关鉴权的名称。

    鉴权类型

    选择OIDC认证方式。

    Issuer

    设置认证服务的Issuer,即签发人。

    重定向URL

    输入授权成功后的重定向地址,需要与OIDC中配置的重定向地址保持一致。

    重要

    格式为http(s)://yourdomain/path(地址中的path必须为 /oauth2/callback

    Client-ID

    输入服务注册的应用ID。

    Client-Secret

    输入服务注册的应用Secret。

    Cookie-Domain

    输入Cookie的域名,认证通过后会将Cookie发送到指定的域名,保持登录状态。例如:设置Cookie-domain=a.example.com,则Cookie会发送到域名a.example.com;设置Cookie-domain=.example.com,则Cookie会发送到example.com的所有子域名。

    Scope

    输入授权作用域,多个域值用英文分号(;)分隔。

    授权

    授权模式支持白名单模式黑名单模式

    • 白名单模式:白名单中的hosts+paths不需要校验即可访问,其余的都需要校验。

    • 黑名单模式:黑名单中的hosts+paths需要校验,其余可直接访问。

    单击+规则条件,设置请求域名和路径。

    • 域名:请求访问的域名,即hosts。

    • 路径(Path):请求访问的接口路径,即paths。

创建认证路由

云原生API网关认证鉴权规则创建完成后,然后创建认证相关路由规则。具体操作,请参见创建路由

认证规则路由参数配置如下:

  • 关联域名:选择创建鉴权配置的重定向URL的域名,如果没有配置域名可以选择*。

    重要

    如果使用HTTPS,必须配置域名并关联。

  • 路径:选择前缀匹配,并输入/oauth2

  • 目标服务:选择目标服务oauth2-proxy。

查看鉴权详情

  1. 登录云原生API网关控制台

  2. 在左侧导航栏,选择实例,并在顶部菜单栏选择地域。

  3. 实例页面,单击目标网关实例名称。

  4. 在左侧导航栏,单击安全管理 > 全局认证鉴权

  5. 全局认证鉴权页面,单击鉴权规则名称或操作列的详情,可查看当前认证配置授权信息的管理。

    image.png

您可在授权信息区域单击创建授权信息,在对话框中输入请求域名请求Path,并选择匹配方式,单击确定新增授权规则。

结果验证

返回全局认证鉴权页面查看鉴权信息,如果已包含新建网关鉴权信息,则说明网关认证鉴权新建成功。

相关操作

您还可以执行以下其他操作,管理网关的认证鉴权:

  • 开启鉴权:在全局认证鉴权页面,单击目标鉴权规则操作列的开启,使认证鉴权信息生效。

  • 关闭鉴权:在全局认证鉴权页面,单击目标鉴权规则操作列的关闭,关闭网关认证鉴权信息。

  • 编辑鉴权:在全局认证鉴权页面,单击目标鉴权规则操作列的编辑,可编辑网关认证鉴权信息。

  • 删除鉴权:在全局认证鉴权页面,单击目标鉴权规则操作列的删除,可删除网关认证鉴权信息。

说明

只有在认证鉴权信息关闭的状态下才可执行删除操作。

相关文档

如果您想了解其他认证鉴权机制,请参见网关认证鉴权概述