amazon-web-services - 如何将令牌从 openID 连接提供程序传递到 AppSync api
问题描述
我已将 AppSync 设置为使用 OIDC / OpenID Connect 作为授权者,并已成功在客户端获取令牌。我没有使用认知。我现在想弄清楚以下几点:
我正在使用 apollo sdk 与我的 AppSync GraphQL api 进行交互,如何将这个打开的 id 令牌从客户端传递给它?我认为它必须是某种标题,但我无法找到任何关于 AppSync 期望它的文档。
传递令牌后,在验证并提取令牌数据后,如何在 AppSync / AppSync 解析器中访问其声明?
解决方案
- 创建客户端时传递 Firebase 令牌:
const client = new AWSAppSyncClient({
url: ...,
region: ...,
auth: {
type: 'OPENID_CONNECT',
jwtToken: async() => token // Token from Firebase
}
})
- 来自令牌的声明可在
$context.identity
. 其中一些声明是标准声明(由 OpenID Connect 指定),其他声明是自定义声明(您的项目独有)。如果您使用 AWS Cognito 而不是 Firebase,则的形状$context.identity
将类似于发出的形状:
{
"sub" : "...", // standard claim - straight from the token
"issuer" : "...", // standard claim - straight from the token
"username" : "...",
"claims" : { ... }, // custom claims from the token
"sourceIp" : ["x.x.x.x"],
"defaultAuthStrategy" : "..."
}
正如您在上面看到的,sub
是iss
直接从令牌映射的两个标准声明。来自令牌的所有其他声明都显示为自定义声明。它们可以通过以下方式检索$context.identity.claims.get()
然后,您可以在解析器中使用这些声明并以标准方式对它们进行操作。
推荐阅读
- scala - 如何在 Option Scala 中从 Map 中删除键
- pipeline - 运行管道按钮已禁用
- selenium - Selenium 代码打开 Chrome 浏览器并转到 URL 但不输入用户 ID 和密码等
- mysql - 我正在尝试在 MySQL 中选择两列作为一列,但输出未出现
- javascript - Aurelia:对象不支持 IE 11 中的属性或方法“绑定”
- gitlab-ci - gitlab CI 管道检查代码格式
- customization - WAZUH/OSSEC - 覆盖规则似乎不起作用
- c# - CefSharp WPF 和离屏性能
- html - 在 HTML 文档中包含可点击的 svg 文件
- json - SSL 消息编码