我可以使用来自 cognito 的 JWT(IdP 是带有 oidc 的 Salesforce)来查询 Salesforce API 吗?

Can I use a JWT from cognito (IdP is Salesforce with oidc) to query Salesforce API?

所以,在我这边进行了大量的谷歌搜索和测试之后,我无法弄清楚这是否可行(这里有点像 oidc + cognito + salesforce 的新手)。

我需要使用 Salesforce 作为身份提供者通过 SSO 对我的用户进行身份验证。然后,我需要通过 Salesforce API 查询该特定用户的信息。我想尽可能避免额外的 oauth 流程,因为理论上我已经让我的用户登录了。

场景是:

  1. 我已通过 Open ID Connect 将 Cognito 与 Salesforce 配置为我的身份提供商。
  2. 我设法正确执行了身份验证流程,并以一个代码结束,我可以用它从 cognito 的 /oauth2/token 中交换 id_tokenaccess_tokenrefresh_token端点。
  3. 现在的问题是,如果我可以使用从 Cognito 获得的 JWT 令牌来查询 Salesforce API。

如果需要,我可以详细说明并提供示例配置。非常感谢您对此提供的任何帮助:)

在 OAuth 中,数据所有者在其 API 旁边托管授权服务器/令牌颁发者:

  • 因此必须使用 Salesforce 访问令牌来获取 Salesforce 数据
  • 同样,客户端必须使用来自 Cognito 实例的访问令牌才能从您自己的 API 获取数据

嵌入式令牌模式

这就是你需要的设计模式,在this Curity article中有解释。当 Cognito 联合到 Salesforce 时,它​​将为用户完成代码流并获得 Salesforce 令牌。

然后应该可以将 Salesforce 访问令牌作为声明包含在 Cognito 访问令牌中。您的 API 可以稍后提取它,然后代表用户将其转发给 Salesforce。

认知能力?

不幸的是,并非所有授权服务器都具有这种级别的可扩展性,因此我怀疑 Cognito 是否支持这一点,但值得研究。但这并不是一个不常见的要求,Cognito 确实允许您获取 Identity Pool 令牌以类似的方式表示用户特定的 AWS 资源。

经过一些研究,我想我找到了方法(不确定它是否是最好的,但它有效)。

这是过程:

  1. 创建用户池时,确保声明 2 个自定义属性:access_tokenrefresh_token
  2. 完成设置过程。
  3. 在属性映射部分,将这些自定义属性映射到您要从 Idp 中提取的属性(在我的例子中,access_token 是我需要的)

所以,它看起来像这样:

将 Salesforce access_token 附加到我的 JWT id_token :)