Adobe I/O IMS 图书馆
Adobe I/O IMS图书馆帮助与IMS API进行互动,并创建和去除符号. 为了支持多个使用大小写和环境,本库没有管理单一的配置,而是调用多个配置 IMS 配置背景。 。 。 . 每个配置上下文都持有创建令牌所需的配置数据. 见 配置 下节.
安装
要安装 Adobe I/O IMS 库,只需使用 npm数字 :
npm install @adobe/aio-lib-ims --save
快速启动
在使用 AIO IMS 库之前, 您需要创建 Adobe 开发者控制台的集成程序, 您可以从其中获取集成细节来设置第一个配置上下文 。 让我们以 OAuth2 集成为例:
const { context, getToken, getTokenData } = require('@adobe/aio-lib-ims')
const config = {
redirect_uri: "https://callback.example.org",
client_id: "123456cafebabe",
client_secret: "12345678-cafe-babe-cafe-9999",
scope: "openid"
};
await context.set('example', config, true)
const token = await getToken('example')
const tokenDecoded = getTokenData(token)
见 API 文档 详细情况.
配置
AIO IMS 图书馆透明地维护登录配置并保存 使用和刷新在过期前再使用的迹象.
所有配置都存储在单个中 ims 根属性.
库支持为不同的使用大小写维护多个配置.
每个这样的配置都存储在自己命名的对象中,并带有 ims 配置 .
这种配置被称为 IMS( 配置) 上下文 并有一个标签,允许按名称引用配置.
这是一个例子 ims 配置
{
ims: {
contexts: {
sample_jwt: {
client_id: "<jwt-clientid>",
client_secret: "XXX",
technical_account_id: "<guid>@techacct.adobe.com",
meta_scopes: [
"ent_dataservices_sdk"
],
ims_org_id: "<org-guid>@AdobeOrg",
private_key: "XXX"
},
sample_oauth2: {
redirect_uri: "https://callback.example.com",
client_id: "<oauth2-clientid>",
client_secret: "XXX",
scope: "openid AdobeID"
},
}
}
}
在桌面上运行
当运行于您的本地机器时, AIO IMS 正在利用 Aio- cli 插件使用的配置模块 装入并更新存储在 .aio 财务报告和审定财务报表 .env 文档。 图书馆支持本地和全球的aio配置.
以下是依靠AIO IMS从现有配置中生成一个符号的例子:
const { context, getToken } = require('@adobe/aio-lib-ims')
await context.setCurrent('my-config')
const token = await getToken('my-config')
在 Adobe I/O 运行运行时动作
注:请选择更轻的 @adobe/aio-lib-core-auth (英语) 从 Adobe I/O 运行时动作生成 OAuth 令牌的库。 核心库注重高效地生成OAuth令牌,不依赖CLI所需的复杂上下文/插件逻辑. 它还使用内嵌式缓存,而不是App Builder State存储器,可能会遇到使用限制
AIO IMS库也可以被用到Adobe I/O跑时动作中. 在这种情况下,信息管理系统的配置必须事先确定。 图书馆依靠的是 Adobe App 构建器州立图书馆 将所有行动都作为访问标志,并减少向投管处提出的请求.
以下是Adobe I/O 运行时动作例
const { context, getToken } = require('@adobe/aio-lib-ims')
function main ({ imsContextConfig, ...params }) {
// the IMS context configuration is passed as an action parameter
// imsContextConfig = { client_id, client_secret, technical_account_id, meta_scopes, ims_org_id, private_key }
await context.set('my_ctx', imsContextConfig)
const token = await getToken('my_ctx')
}
几点考虑:
-
对字符集的额外限制.
- 名称空间必须通过 Adobe 开发者控制台( 遵循
amsorg-project(-workspace)?页:1 不支持遗留的命名空间 . - i/O 运行时动作名称和上下文名称(用于
context.set)必须是字母字符串和-, (中文(简体) ),_, (中文(简体) ),.被允许.
- 名称空间必须通过 Adobe 开发者控制台( 遵循
-
getToken('my_ctx')将永远在州内留下象征local=true|false用于context.set。 。 。 . -
只为单个 I/O 运行时动作缓存了符号, 这意味着缓存符号无法在动作和运行中获取
getToken在另一个具有相同上下文名的动作中,将重生出一个新的符号.
IMS 环境
IMS环境的使用被保留给Adobe使用.
供参考的是: env 配置上下文属性并取出一个值 prod 财务报告和审定财务报表 stage。 。 。 .
默认值为 prod。 。 。 .
一般来说,你不需要处理这个财产.
设置当前上下文( 高级)
默认上下文可以在本地设置 await context.setCurrent('contextname')。 。 。 .
这将写入以下配置到 ims 键 .aio 当前工作目录的文件 :
ims {
config: {
current: "contextname"
}
}
如果在同一工作目录中运行库, 那么 getToken 可以不通过 contextname数字 :
await context.set('contextname', config, true)
await context.setCurrent('contextname')
const token = await getToken() // generate a token for the config in the 'contextname' context
请注意: context.setCurrent 重写本地配置并替换默认值 aio 桌面环境中的 CLI OAuth 配置 .
这个会断的 aio 命令从同一目录中运行.
您可以通过执行恢复到原有行为 aio config delete ims.config.current 从目录.
JWT 配置( 已过期)
JWT配置已贬值,有利于OAuth服务器对服务器配置.
JWT(服务集成)配置需要具备以下属性:
| 财产 | 说明 |
|---|---|
| 客户端( d) | IMS(Oauth2)客户端ID. 这是 API 密钥 在 Adobe 开发者控制台的集成概览中. |
| 客户端 机密 | IMS( ONOTH2) 客户端秘密 |
| 技术 账户 id | 这个 技术账户编号 从 Adobe 开发者控制台中的集成概览屏幕 |
| 元镜 | 元范围名称阵列 。 这些是样本中一个矿石更特殊属性的标签 JWT 有效载荷。可以在 日本 选项卡中的 Adobe 开发者控制台集成 JWT 有效载荷 窗体属性 "https://<ims-host>/s/ent_dataservices_sdk": true,. 可能存在一种或多种取决于合并所订阅的服务。 要列出的值 元镜 属性是 URL 的最后一个部分。 举例来说,这将是 ent_dataservices_sdk。 。 。 . |
| ims org id (韩语) | 这个 组织标识 从 Adobe 开发者控制台中的集成概览屏幕. |
| 私钥 | 匹配任意一个的私钥 公钥 综合计划。 这可以作为一行中的私钥作为字符串,也可以是串的数组(每个元素都是从密钥文件中发出的一行) 见 设置私钥 节. |
| 密码句 | (单位:千美元)可选) (中文(简体) ). 私钥之通口. |
设置私钥
对于 JWT 配置,您的私人密钥在 Adobe 开发者控制台中生成,并在生成时被下载到您的计算机上.
Adobe 开发者 Console 不保留私有密钥(只保存您的对应公钥), 因此您必须设定您在 IMS 上下文配置中手动下载的私有密钥 .
您可以通过两种方式在配置中设置您的私钥:
- 导入私钥为字符串
- 设置私人密钥的文件引用
下面的指示假设一个私人密钥文件叫做 private.key 财务报告和审定财务报表 CONTEXT_NAME 是您 JWT 上下文的名称.
- 要导入您的私钥为字符串 :
aio config:set ims.contexts.CONTEXT_NAME.private_key path/to/your/private.key --file - 要设置私人密钥的文件引用 :
aio config:set ims.contexts.CONTEXT_NAME.private_key path/to/your/private.key
注意您的私钥路径, 如果它是相对路径, 将会相对于当前工作目录解决 .
OAuth2 配置
OAuth2 配置需要以下属性:
| 财产 | 说明 |
|---|---|
| 客户端( d) | IMS(Oauth2)客户端ID. 这是 API 密钥 在 Adobe 开发者控制台的集成概览中. |
| 客户端 机密 | IMS( ONOTH2) 客户端秘密 |
| 方向调整 uri | 这个 默认重定向 URI 从 Adobe 开发者控制台中的集成概览屏幕。 或者,任何URI匹配其中之一 重定向 URI 模式 可使用. |
| 范围 | 给令牌分配范围。 这是一系列逗号分离的域名, 取决于此集成所订阅的服务 。 Adobe 开发者控制台目前不披露为 OAuth2 集成定义的范围列表,在服务中可以找到一个很好的范围列表 OAuth 2.0 范围。至少您可能想要输入 openid。 。 。 . |
OAuth 服务器对服务器配置
此配置将取代 JWT 配置 .
OAuth 服务器对服务器(客户资格授权类型)配置需要以下属性: 用户身份认证
| 财产 | 说明 |
|---|---|
| 客户端( d) | IMS(Oauth2)客户端ID. 这是 API 密钥 在 Adobe 开发者控制台的集成概览中. |
| 客户端 机密 | IMS( ONDOTH2) 客户端机密阵列 |
| 技术账户( e) | 这个 技术账户电子邮件 从 Adobe 开发者控制台中的集成概览屏幕 |
| 技术 账户 id | 这个 技术账户编号 从 Adobe 开发者控制台中的集成概览屏幕 |
| 范围 | 给令牌分配范围。 这是一系列的字符串, 取决于此集成所订阅的服务 。 OAuth2 服务器对服务器证书定义的范围列表列于 Scopes 选项卡. |
| ims org id (韩语) | Adobe开发者控制台的集成概览屏幕中的组织ID. |
托肯验证
缓存
验证和无效可以被缓存来提高性能. 要使用缓存, 配置一个新的缓存, 并在初始化时传递给库 :
const { Ims, ValidationCache, getToken} = require('@adobe/aio-lib-ims')
const CACHE_MAX_AGE_MS = 5 * 60 * 1000 // 5 minutes
const VALID_CACHE_ENTRIES = 10000
const INVALID_CACHE_ENTRIES = 20000
const cache = new ValidationCache(CACHE_MAX_AGE_MS, VALID_CACHE_ENTRIES, INVALID_CACHE_ENTRIES)
const ims = new Ims('prod', cache)
const token = params.theToken // May be passed via header, parameter, or other input
const imsValidation = await ims.validateToken(token)
if (!imsValidation.valid) {
return new Error('Forbidden: This is not a valid IMS token!') // Next time validateToken() is called with this token, a call to IMS will not be made while the cache is still fresh
}
允许列表
您可以对照IMS客户端的许可列表验证一个令牌. 要使用允许列表, 请将您的令牌和一系列IMS客户端传递到 validateTokenAllowList()数字 :
const { Ims } = require('@adobe/aio-lib-ims')
const ims = new Ims()
const token = params.theToken // May be passed via header, parameter, or other input
const allowList = ['ironmaiden', 'metallica', 'gunsandroses']
const imsValidation = await ims.validateTokenAllowList(token, allowList)
if (!imsValidation.valid) {
return new Error('Forbidden: This client is not allowed!')
}
捐款
欢迎捐款! 读取 贡献指南 更多信息.
许可证发放
这个项目根据Apache V2许可证获得许可. 见 自由主义 更多信息.