将外部 IDP 与 Edge API 搭配使用时,从 CLI 获取 OIDC/OAuth2
访问令牌的标准流程是 OAuth 2.0 设备代码流程。在此流程中,您可以使用 get_token 实用程序,该实用程序会提示您在浏览器中访问网址以通过 IDP 进行身份验证,然后自动解除对终端的屏蔽。
不过,您的开发环境可能支持常见开发任务的自动化, 例如测试自动化或 CI/CD 流水线。如需在启用外部 IDP 时自动执行这些任务, 您需要一种以无头方式获取和刷新 OAuth2 令牌的方法,而无需浏览器交互。
Edge 支持通过使用无头机器用户自动生成令牌。机器用户可以通过标准密码授权获取 OIDC/OAuth2 令牌,而无需浏览器。这意味着您可以完全自动执行 脚本的令牌获取和刷新流程。
创建机器用户
您可以创建一个供所有组织使用的机器用户,也可以为每个组织创建一个单独的机器用户。
机器用户直接在本地 OpenLDAP 目录中创建和存储,并明确标记为机器用户 (employeeType: machineuser)。这样,即使对于人工用户严格强制执行联合 SAML/OIDC,Apigee SSO 也可以通过密码授权安全地对机器用户进行身份验证。
如需详细了解如何创建、列出和管理机器用户,请参阅使用 apigee-machineuser.sh 管理机器用户。
获取和刷新机器用户令牌
您可以使用 get_token 和 acurl 实用程序(在 /opt/apigee/apigee-openldap/bin/ 中提供)或标准 curl 来获取机器用户的令牌。
- 使用 Apigee 实用程序 :
get_token和acurl封装容器会自动处理令牌缓存、有效负载生成和自动刷新。如需详细了解如何使用这些工具以及相关示例,请参阅 使用 get_token 和 acurl 实用程序。 - 使用标准 curl :如果您的自动化脚本无权访问 Apigee 封装容器,则可以使用以下标准
curl命令直接与 Apigee SSO 进行交互:
如需使用标准 curl 获取和刷新令牌,请执行以下操作
- 使用以下 API 调用直接从 Apigee SSO 生成初始访问令牌和刷新令牌:
curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" \ -H "accept: application/json;charset=utf-8" \ -X POST http://Edge_SSO_IP_DNS:9099/token -s \ -d 'grant_type=password&username=machineUserEmail&password=machineUserPassword&client_id=edgecli&client_secret=edgeclisecret&scope=openid%20profile%20email%20offline_access' - 在
Authorization: Bearer标头中将访问令牌传递给 Edge Management API 调用:curl -H "Authorization: Bearer access_token" \ http://MS_IP_DNS:8080/v1/organizations/org_name
- 如需稍后以原生方式刷新访问令牌,请使用以下包含刷新令牌的调用:
curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" \ -H "Accept: application/json;charset=utf-8" \ -X POST http://Edge_SSO_IP_DNS:9099/token \ -d 'grant_type=refresh_token&refresh_token=refreshToken&client_id=edgecli&client_secret=edgeclisecret'