云原生网关支持自定义鉴权服务,方便在网关入口处完成鉴权,避免每个后端服务都接入鉴权服务。本文介绍如何为云原生网关配置自建认证鉴权。

背景信息

服务端通常根据客户端请求携带的凭证信息(即Token)来保护对外暴露的API接口的通信安全。Token的形式没有严格的规定,一般是业务根据实际业务场景来决定的。

  • 如果Token采用的是JSON WEB Token (JWT),那么在任何地方、任何时候都可以利用公钥来对Token的签名进行验签,无需访问一个中心化的鉴权服务。
  • 如果Token的形式是业务方自定义的格式,则服务端收到请求后,必须额外访问中心化的鉴权服务来完成鉴权操作。云原生网关支持自定义鉴权。

下面以一个例子来说明云原生网关接入自建的鉴权服务后的请求处理流程。

云原生网关接入自建的鉴权服务
  1. 客户端向网关发起认证请求,例如登录操作。
  2. 网关将认证请求直接转发给认证服务。
  3. 认证服务读取请求中的验证信息(例如用户名、密码)进行验证,验证通过后返回凭证信息(Token)给网关,由网关响应给客户端。
  4. 客户端向网关发起业务请求,例如下单操作/order,请求中携带上一步中身份认证成功后颁发的Token。
  5. 网关通过截取原始业务请求的Path、HTTP方法(GET、POST等)和Token来形成一个新的请求报文,向接入的自建鉴权服务发起鉴权请求。

    假设自建鉴权服务的鉴权API是/validateToken,那么鉴权请求的真实Path是鉴权API加上原始业务请求的Path后的结果,即/validateToken/order

    说明 如果需要额外携带客户端请求中的头部,那么需要在字段中按需配置头部。鉴权请求中的Host、Method、Path和Content-Length头部会被默认添加。如果客户端请求中已经有该头部,那么其值将会被覆盖。
  6. 鉴权服务收到鉴权请求后,既可以根据Token完成校验Token合法性的操作,又可以根据原始业务请求的Path完成鉴权操作。
    • 鉴权服务返回HTTP状态码200,表明Token合法且Token有权限访问该后端资源。网关继续将原始业务请求转发给受保护的后端服务,收到业务响应后再次转发给客户端,完成下单操作。
      说明 如果需要将鉴权响应中的头部添加到客户端请求中,那么需要在字段中按需配置头部。
    • 鉴权服务返回HTTP状态码非200,表明Token不合法或Token无权限访问该后端资源。网关直接返回鉴权服务的响应给客户端,此次下单操作失败。

创建自建认证鉴权

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

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

    参数 描述
    名称 自定义云原生网关鉴权的名称。支持小写字母、数字以及特殊字符,且不能以特殊字符开头和结尾。
    类型 选择自建的鉴权服务
    鉴权服务 选择鉴权的后端服务,可以在服务管理中添加。相关内容,请参见添加服务
    鉴权API 设置鉴权服务提供的鉴权API的Path,API的Path需是前缀匹配。
    例如,您的鉴权服务基于SpringMVC构建,对外开放的鉴权API为/check,那么需要能够处理/check/**的请求设置如下:
    @RequestMapping("/check/**")
    public ResponseEntity<RestResult<String>> check(){}
    Token位置 设置Token在请求报文中的Header位置,常见的有AuthorizationCookie,您可以选择下拉选择手动输入的方式模式设置Token位置。
    鉴权请求中允许携带的头部 如果需要额外携带客户端请求中的头部,那么需要在字段中按需配置头部。
    说明 Host、Method、Path和Content-Length头部会被默认添加,您无需手动添加。
    鉴权响应中允许保留的头部 如果需要将鉴权响应中的头部添加到客户端请求中,那么需要在字段中按需配置头部。
    说明 如果客户端请求中已经有该头部,那么其值将会被覆盖。
    超时时间 设置等待鉴权服务返回结果的最大等待时间(单位:秒),默认超时时间为10秒。
    模式 支持宽松模式和严格模式,建议您使用宽松模式。
    • 宽松模式:当鉴权服务不可用时(鉴权服务建立连接失败或者返回5xx请求),网关接受客户端请求。
    • 严格模式:当鉴权服务不可用时(鉴权服务建立连接失败或者返回5xx请求),网关拒绝客户端请求。
    授权 授权模式支持白名单模式和黑名单模式。
    • 白名单模式:白名单中的Hosts和Paths不需要校验即可访问,其余都需要校验。
    • 黑名单模式:黑名单中的Hosts和Paths需要校验,其余可直接访问。相关内容,请参见设置网关黑名单和白名单
    单击+添加新的规则条件,设置请求域名和路径。
    • 请求域名:请求访问的域名,即Hosts。
    • 请求Path:请求访问的接口Path,即Paths。
    Path支持精确匹配和前缀匹配。
    • 精确匹配:输入完整的Path,例如/app/v1/order
    • 前缀匹配:输入Path的前缀,并且末尾填一个*。例如,匹配所有以/app开头的请求,那么需设置为/app/*
    • 匹配所有Path:输入/*

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

查看鉴权服务详情

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

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

相关操作

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

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