本文介绍如何为云原生网关配置OIDC(OpenID Connect)认证鉴权。

前提条件

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

背景信息

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

基于OIDC认证

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

假设有以下四个角色:
  • 客户端:直接为用户提供服务。
  • 认证服务:OpenID提供方,通常是指OpenID认证服务器,为第三方颁发用于认证的ID Token。
  • 业务服务:提供业务服务。
  • 用户:指资源持有者。
业务角色
业务流程如下:
  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是否合法,然后返回业务应答。

云原生网关OIDC认证流程

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

OIDC业务流程
业务流程如下:
  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. 网关将业务应答返回给客户端。

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

创建认证鉴权规则

  1. 登录MSE网关管理控制台
  2. 在左侧导航栏选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。
  3. 网关列表页面,单击目标网关名称,进入网关详情页面。
  4. 网关详情页面左侧导航栏选择安全能力 > 认证鉴权
  5. 在页面左上角单击创建鉴权配置网关鉴权相关参数,然后单击确定
    创建OIDC认证鉴权

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

    参数 描述
    名称 自定义云原生网关鉴权的名称。
    类型 选择OIDC认证方式。
    Issuer 设置认证服务的Issuer,即签发人。
    重定向URL 输入授权成功后的重定向地址,需要与OIDC中配置的重定向地址保持一致。
    注意 格式为http(s)://yourdomain/path(地址中的path必须为 /oauth2/callback)
    Client-ID 输入服务注册的应用ID。
    Client-Secret 输入服务注册的应用Secret。
    Client-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:请求访问的接口Path,即paths。

创建认证路由

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

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

  • 关联域名:选择创建鉴权配置的重定向URL的域名,如果没有配置域名可以选择*。
    注意 如果使用HTTPS,必须配置域名并关联。
  • 路径:选择前缀匹配,并输入/oauth2
  • 目标服务:选择oauth2-proxy。

查看鉴权详情

  1. 登录MSE网关管理控制台
  2. 在左侧导航栏选择云原生网关 > 网关列表,并在顶部菜单栏选择地域。
  3. 网关列表页面,单击目标网关名称,进入网关详情页面。
  4. 网关详情页面左侧导航栏选择安全能力 > 认证鉴权
  5. 认证鉴权页面单击鉴权规则名称或操作列的详情,可查看当前认证配置授权信息的管理。
    查看OIDC授权详情

    您可在授权信息区域单击新增信息,在对话框中输入域名path,新增授权规则。

结果验证

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

相关操作

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

  • 开启鉴权:在认证鉴权页面,单击目标鉴权规则操作列的开启,使认证鉴权信息生效。
  • 关闭鉴权:在认证鉴权页面,单击目标鉴权规则操作列的关闭,关闭网关认证鉴权信息。
  • 编辑鉴权:在认证鉴权页面,单击目标鉴权规则操作列的编辑,可编辑网关认证鉴权信息。
  • 删除鉴权:在认证鉴权页面,单击目标鉴权规则操作列的删除,可删除网关认证鉴权信息
注意 只有在认证鉴权信息关闭的状态下才可执行编辑和删除操作。