Compartilhar via

对自承载网关使用令牌身份验证

适用于:开发人员 | 高级

Azure API 管理 自承载网关 需要与其关联的基于云的 API 管理实例建立连接,以便报告状态、检查和应用配置更新以及发送指标和事件。

本文介绍如何使用基于令牌的默认身份验证方法启用自承载网关进行身份验证。 此方法使用访问令牌和终结点 URL 在自行托管的网关和您的 API 管理实例之间建立安全通信。 有关其他身份验证选项,请参阅 自承载网关身份验证选项

先决条件

  • 开发人员或高级服务层级中的 API 管理实例。 如果需要,请完成以下快速入门: 创建 Azure API 管理实例
  • 实例上的 网关资源
  • Azure Kubernetes 服务(AKS)群集或 Kubernetes 群集。
  • 自托管网关容器映像版本 2.0 或更高版本

生成访问令牌

在 API 管理中预配网关资源时,会自动生成默认身份验证令牌。 要检索令牌,请执行以下步骤:

  1. 在 Microsoft Azure 门户中,转到 API 管理实例。
  2. 选择 “部署”和“基础结构>网关”。
  3. 从列表中选择网关。
  4. 在网关页上,选择 “设置>部署”。
  5. 复制 令牌 值。 使用此令牌向 API 管理实例认证自托管网关。
  6. 为环境选择一个部署脚本,以便在下一部分中复制和使用,以使用令牌身份验证部署网关。

重要

  • 确保访问令牌安全。 此令牌授予对网关配置的访问权限。 不要将其提交到版本控制系统或将其公开。
  • 访问令牌具有定义的生存期,必须定期轮换。 可以订阅系统事件,以在令牌即将过期或已过期时收到通知。 有关详细信息,请参阅本文后面的部分。

部署自托管网关

使用默认的令牌身份验证,将自承载网关部署到容器化环境中,例如 Kubernetes。

可以使用 Helm 图表部署具有令牌身份验证的自承载网关。

helm install 命令中的以下值替换为实际值:

  • <gateway-name>:Azure API 管理实例名称
  • <gateway-url>:网关的 URL,格式 https://<gateway-name>.configuration.azure-api.cn
  • <gateway-key>:访问令牌

有关先决条件和详细信息,请参阅 使用 Helm 部署 API 管理自承载网关

helm install --name azure-api-management-gateway azure-apim-gateway/azure-api-management-gateway \
             --set gateway.configuration.uri='<gateway-url>' \
             --set gateway.auth.key='<gateway-key>'

确认网关正在运行

  1. 运行以下命令来检查网关 Pod 是否正在运行。 Pod 名称将有所不同。

    kubectl get pods
    NAME                                           READY     STATUS    RESTARTS   AGE
    azure-api-management-gateway-59f5fb94c-s9stz   1/1       Running   0          1m
    
  2. 运行以下命令来检查网关服务是否正在运行。 你的服务名称和 IP 地址与此不同。

    kubectl get services
    NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)               AGE
    azure-api-management-gateway   ClusterIP   10.0.229.55     <none>        8080/TCP,8081/TCP     1m
    
  3. 返回到Azure门户,确认部署的网关节点报告正常状态。

小窍门

使用 kubectl logs <gateway-pod-name> 命令查看自承载网关日志的快照。

令牌轮换和管理

访问令牌具有定义的生存期。 令牌过期后,网关将失去与 API 管理实例的连接。

若要轮换令牌,请执行以下步骤:

  1. 在 Microsoft Azure 门户中,转到 API 管理实例。
  2. 选择 “部署”和“基础结构>网关”。
  3. 选择网关。
  4. “部署 ”选项卡上,选择“ 重新生成令牌”。
  5. 复制新令牌。
  6. 使用新令牌更新 Kubernetes Secret:
kubectl patch secret apim-access-token -n <namespace-name> -p '{"data":{"config.service.auth.key":"'$(echo -n "<new-token>" | base64)'"}}' --type=merge