我可以使用来自 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 流程,因为理论上我已经让我的用户登录了。
场景是:
- 我已通过 Open ID Connect 将 Cognito 与 Salesforce 配置为我的身份提供商。
- 我设法正确执行了身份验证流程,并以一个代码结束,我可以用它从 cognito 的
/oauth2/token
中交换 id_token
、access_token
和 refresh_token
端点。
- 现在的问题是,如果我可以使用从 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 资源。
经过一些研究,我想我找到了方法(不确定它是否是最好的,但它有效)。
这是过程:
- 创建用户池时,确保声明 2 个自定义属性:
access_token
和 refresh_token
。
- 完成设置过程。
- 在属性映射部分,将这些自定义属性映射到您要从 Idp 中提取的属性(在我的例子中,
access_token
是我需要的)
所以,它看起来像这样:
将 Salesforce access_token
附加到我的 JWT id_token
:)
所以,在我这边进行了大量的谷歌搜索和测试之后,我无法弄清楚这是否可行(这里有点像 oidc + cognito + salesforce 的新手)。
我需要使用 Salesforce 作为身份提供者通过 SSO 对我的用户进行身份验证。然后,我需要通过 Salesforce API 查询该特定用户的信息。我想尽可能避免额外的 oauth 流程,因为理论上我已经让我的用户登录了。
场景是:
- 我已通过 Open ID Connect 将 Cognito 与 Salesforce 配置为我的身份提供商。
- 我设法正确执行了身份验证流程,并以一个代码结束,我可以用它从 cognito 的
/oauth2/token
中交换id_token
、access_token
和refresh_token
端点。 - 现在的问题是,如果我可以使用从 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 资源。
经过一些研究,我想我找到了方法(不确定它是否是最好的,但它有效)。
这是过程:
- 创建用户池时,确保声明 2 个自定义属性:
access_token
和refresh_token
。 - 完成设置过程。
- 在属性映射部分,将这些自定义属性映射到您要从 Idp 中提取的属性(在我的例子中,
access_token
是我需要的)
所以,它看起来像这样:
将 Salesforce access_token
附加到我的 JWT id_token
:)