Reactor API中的密钥
在Reactor API中,密码是表示身份验证凭据的资源。 在事件转发中使用密码来向另一个系统验证以进行安全的数据交换。 因此,只能在事件转发属性(platform
属性设置为edge
的属性)中创建密钥。
type_of
属性中当前表示三种受支持的密钥类型:
token
simple-http
oauth2-client_credentials
本指南简要介绍如何配置用于事件转发的密钥。 有关如何在Reactor API中管理密码的详细指导,包括密码结构的JSON示例,请参阅密码端点指南。
凭据
每个密钥都包含一个credentials
属性,该属性保存其各自的凭据值。 在在API中创建密钥时,每种类型的密钥都有不同的必需属性,如以下部分所示:
token
token
type_of
值为token
的密钥只需要credentials
下的单个特性:
token
令牌存储为静态值,因此在创建密钥时,密钥的expires_at
和refresh_at
属性将设置为null
。
simple-http
simple-http
type_of
值为simple-http
的密钥需要credentials
下的以下属性:
username
password
创建密钥后,将使用username:password
的BASE64编码交换这两个属性。 交换后,密码的expires_at
和refresh_at
属性设置为null
。
oauth2-client_credentials
oauth2-client_credentials
type_of
值为oauth2-client_credentials
的密钥需要credentials
下的以下属性:
client_id
client_secret
token_url
refresh_offset
14400
(四个小时)。创建或更新oauth2-client_credentials
密钥后,根据OAuth协议的客户端凭据流程,在POST请求中将client_id
和client_secret
(可能还有options
)交换给token_url
。
如果授权服务使用200 OK
和JSON响应正文进行响应,则解析正文并将access_token
推送到Edge环境,并使用expires_in
计算密码的expires_at
和refresh_at
属性。 如果密码上不存在环境关联,则会丢弃access_token
。
在以下条件下,凭据交换被视为成功:
expires_in
大于28800
(8小时)。refresh_offset
小于expires_in
减去14400
的值(四个小时)。 例如,如果expires_in
是36000
(10个小时),而refresh_offset
是28800
(8个小时),则交换被视为失败,因为28800
大于36000
-14400
(21600
)。
如果交换成功,密码的状态属性将设置为succeeded
,并设置expires_at
和refresh_at
的值:
expires_at
是当前UTC时间加上expires_in
的值。refresh_at
是当前UTC时间加上expires_in
的值减去refresh_offset
的值。 例如,如果expires_in
是43200
(十二小时),refresh_offset
是14400
(四个小时),则refresh_at
属性将在当前UTC时间之后设置为28800
(八个小时)。
如果交换由于任何原因失败,meta
对象中的status_details
属性将使用相关信息更新。
正在刷新oauth2-client_credentials
密码
如果已将oauth2-client_credentials
密钥分配给环境并且其状态为succeeded
(已成功交换凭据),则将在refresh_at
上自动执行新的交换。
如果交换成功,meta
对象中的refresh_status
属性将设置为succeeded
,同时相应地更新expires_at
、refresh_at
和activated_at
。
如果交换失败,则再次尝试该操作3次,最后一次尝试的时间不超过访问令牌过期前的2小时。 如果所有尝试都失败,meta
对象中的refresh_status_details
属性将更新为相关详细信息。
oauth2-google
oauth2-google
type_of
值为oauth2-google
的密钥需要credentials
下的以下属性:
scopes
列出用于身份验证的Google产品范围。 支持以下范围:
- Google广告:
https://www.googleapis.com/auth/adwords
- Google Pub/Sub:
https://www.googleapis.com/auth/pubsub
创建oauth2-google
密钥后,响应包含meta.authorization_url
属性。 您必须将此URL复制并粘贴到浏览器中才能完成Google身份验证流程。
重新授权oauth2-google
密码
oauth2-google
密码的授权URL将在创建密码后一小时过期(如meta.authorization_url_expires_at
所指示)。 在此时间之后,必须重新授权密钥才能更新身份验证过程。
有关如何通过向Reactor API发出PATCH请求来重新授权oauth2-google
密钥的详细信息,请参阅密钥端点指南。
环境关系
创建密码时,必须指定密码将存在的环境。 密钥会立即部署到在其中创建它们的环境。
密钥只能与一个环境关联。 一旦秘密与环境之间的关系建立,就不能从环境中清除该秘密,也不能将该秘密与不同的环境相关联。
成功交换密钥的凭据后,为将密钥与环境相关联,将在环境中安全地保存Exchange项目(token
的令牌字符串、simple-http
的Base64编码字符串或oauth2-client_credentials
的访问令牌)。
在环境中成功保存Exchange工件后,密码的activated_at
属性将设置为当前的UTC时间,现在可以使用数据元素引用该属性。 有关引用密码的更多信息,请参阅下一节。
引用密钥 referencing-secrets
为了引用密码,您必须在事件转发属性上创建类型为“密码”(由Core扩展提供)的数据元素。 配置此数据元素时,系统会提示您指明每个环境要使用的密码。 然后,您可以创建引用机密数据元素的规则,例如HTTP调用的标头中的规则。
succeeded
机密与正在生成库的环境关联。 例如,如果某个库的机密数据元素没有为暂存密码部分配置succeeded
密码,则尝试在暂存环境中构建该库会导致错误。在运行时,将机密数据元素替换为保存在环境中的相应机密交换构件。