将外部 IDP 与 Edge API 搭配使用时,您通过 IDP 互动获取 OAuth2 访问令牌和刷新令牌的过程称为“密码流”。借助 密码流,您可以使用浏览器获取动态密码,然后使用该密码获取 OAuth2 令牌。
不过,您的开发环境可能支持常见开发任务的自动化, 例如测试自动化或 CI/CD。如需在启用外部 IDP 时自动执行这些任务, 您需要一种方法来获取和刷新 OAuth2 令牌,而无需从 浏览器复制/粘贴密码。
Edge 支持通过在启用了 IDP 的组织中使用机器用户来自动生成令牌 。机器用户无需指定密码即可 获取 OAuth2 令牌。这意味着,您可以使用 Edge 管理 API 完全自动执行 获取和刷新 OAuth2 令牌的过程。
您可以通过以下两种方式为启用了 IDP 的组织创建机器用户:
以下部分将介绍这两种方法。
您无法为未启用外部 IDP 的组织创建机器用户。
使用 apigee-ssoadminapi.sh 创建机器用户
使用 apigee-ssoadminapi.sh
实用程序在启用了 IDP 的组织中创建机器用户。如需了解详情,请参阅使用
apigee-ssoadminapi.sh。您可以创建一个供所有
组织使用的机器用户,也可以为每个组织创建一个单独的机器用户。
机器用户是在 Edge 数据存储区(而不是 IDP)中创建和存储的。因此,您 无需使用 Edge 界面和 Edge 管理 API 来维护机器用户。
创建机器用户时,您必须指定电子邮件地址和密码。创建机器用户后,您需要将其分配给一个或多个组织。
如需使用 apigee-ssoadminapi.sh 创建机器用户,请执行以下操作:
- 使用以下
apigee-ssoadminapi.sh命令创建机器用户:apigee-ssoadminapi.sh saml machineuser add --admin SSO_ADMIN_NAME \ --secret SSO_ADMIN_SECRET --host Edge_SSO_IP_or_DNS \ -u machine_user_email -p machine_user_password
其中:
- SSO_ADMIN_NAME 是管理员用户名,由用于配置 Apigee SSO 模块的配置文件中的
SSO_ADMIN_NAME属性定义。默认值为ssoadmin。 - SSO_ADMIN_SECRET 是配置文件中
SSO_ADMIN_SECRET属性指定的管理员密码。在此示例中,您可以省略
--port和--ssl的值,因为apigee-sso模块对--port使用默认 值 9099,对--ssl使用默认值 http。如果您的 安装未使用这些默认值,请根据需要指定它们。
- SSO_ADMIN_NAME 是管理员用户名,由用于配置 Apigee SSO 模块的配置文件中的
- 登录 Edge 界面,将机器用户的电子邮件地址添加到您的组织,并将机器用户分配给必要的角色。如需了解详情,请参阅 添加全局用户。
使用 Edge 管理 API 创建机器用户
您可以使用 Edge 管理 API(而不是
apigee-ssoadminapi.sh 实用程序)创建机器用户。
如需使用管理 API 创建机器用户,请执行以下操作:
- 使用以下
curl命令获取ssoadmin用户(apigee-sso的管理员账号的用户名)的令牌:curl "http://Edge_SSO_IP_DNS:9099/oauth/token" -i -X POST \ -H 'Accept: application/json' / -H 'Content-Type: application/x-www-form-urlencoded' \ -d "response_type=token" -d "grant_type=client_credentials" \ --data-urlencode "client_secret=SSO_ADMIN_SECRET" \ --data-urlencode "client_id=ssoadmin"
其中,SSO_ADMIN_SECRET 是您在安装
apigee-sso时设置的管理员密码,由配置文件中的SSO_ADMIN_SECRET属性指定。此命令会显示您需要用于进行下一次调用的令牌。
- 使用以下
curl命令创建机器用户,并传递您在上一步中收到的令牌:curl "http://edge_sso_IP_DNS:9099/Users" -i -X POST \ -H "Accept: application/json" -H "Content-Type: application/json" \ -d '{"userName" : "machine_user_email", "name" : {"formatted":"DevOps", "familyName" : "last_name", "givenName" : "first_name"}, "emails" : [ {"value" : "machine_user_email", "primary" : true } ], "active" : true, "verified" : true, "password" : "machine_user_password" }' \ -H "Authorization: Bearer token"您需要在后续步骤中使用机器用户密码。
- 登录 Edge 界面。
- 将机器用户的电子邮件地址添加到您的组织,并将机器用户分配给 必要的角色。如需了解详情,请参阅添加 全局用户。
获取和刷新机器用户令牌
使用 Edge API 通过传递机器用户的 凭据(而不是密码)来获取和刷新 OAuth2 令牌。
如需为机器用户获取 OAuth2 令牌,请执行以下操作:
- 使用以下 API 调用生成初始访问令牌和刷新令牌:
curl -H "Content-Type: application/x-www-form-urlencoded;charset=utf-8" \ -H "accept: application/json;charset=utf-8" \ -H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST \ http://Edge_SSO_IP_DNS:9099/oauth/token -s \ -d 'grant_type=password&username=m_user_email&password=m_user_password'
保存令牌以供日后使用。
- 将访问令牌作为
Bearer标头传递给 Edge 管理 API 调用,如 以下示例所示:curl -H "Authorization: Bearer access_token" \ http://MS_IP_DNS:8080/v1/organizations/org_name
其中,org_name 是包含机器用户的组织的名称。
- 如需稍后刷新访问令牌,请使用以下包含刷新令牌的调用:
curl -H "Content-Type:application/x-www-form-urlencoded;charset=utf-8" \ -H "Accept: application/json;charset=utf-8" \ -H "Authorization: Basic ZWRnZWNsaTplZGdlY2xpc2VjcmV0" -X POST \ http://edge_sso_IP_DNS:9099/oauth/token \ -d 'grant_type=refresh_token&refresh_token=refreshToken'