【问题标题】:OIDC Integration for CognitoCognito 的 OIDC 集成
【发布时间】:2021-12-29 03:25:45
【问题描述】:

我正在尝试使用 Cognito 用户池来处理用户身份验证。我已经开始集成 OIDC 提供程序以进行登录。多亏了一些 SO posts 和 this post 的帮助,它大部分都在工作。

我已经到了可以将外部用户链接到我的内部用户的地步,但是当我尝试登录时,我收到“无效的提供者名称用户名组合”错误。我注意到这是因为外部用户的用户 id 中有大写字母,但 Cognito 中链接的 user_id 只是小写。

示例:
外部用户的 Okta id:abc123DEF
内部用户 id:<uuid>(无所谓)
Cognito 外部用户 ID:okta_abc123def
内部用户身份列表:[{"userId":"abc123def","providerName":"Okta","providerType":"OIDC","issuer":null,"primary":false,"dateCreated":1640383493683}]

以前有没有人遇到过这个问题并想出了解决方案?如果我在用户注册之前知道用户的外部 ID,我可以解决这个问题,因为 Cognito 需要在添加外部用户之前调用链接命令,但这需要他们知道他们的内部 ID 并提供它,这是太多的开销。

编辑:

当使用区分大小写的用户 ID 手动调用链接用户命令,然后尝试使用外部提供程序登录时,我按预期返回了一个代码,但在 Cognito 中没有创建外部用户(应该有)和该代码无法取回令牌。

更新:

问题是我没有调用 cognito 域的 LOGOUT 端点,因此它使用了错误链接的身份验证用户,而不是尝试通过 Cognito 重新身份验证。使用自定义属性(维护大小写)的建议,我能够使用预注册 lambda 来链接用户,它现在对我有用。仍然存在用户已经存在错误的问题,但我可以像this post 建议的那样在我的客户端中处理它。

【问题讨论】:

    标签: amazon-web-services amazon-cognito openid-connect


    【解决方案1】:

    我们遇到了同样的问题,我们通过添加存储原始值的自定义字段来解决它,当我们链接用户时,我们使用的是自定义字段中的值。

    自定义字段应映射到外部用户的 Okta id。

    【讨论】:

    • 哦,明白了,以后可以访问它是有意义的。但是,即使使用正确的 ProviderAttributeValue 手动调用链接命令,我似乎也遇到了问题(请参阅帖子上的编辑)。有什么对你来说很突出的原因是什么?
    • 不确定如果我理解您的问题,但如果您在用户注册 oidc 后手动链接用户,那么您必须让两个用户都已经在 cognito 中,来自注册表单的标准 cognito 用户和来自 OIDC 的外部 cognito 用户.如果没有这两个用户,就不可能调用链接函数。所以首先你需要拥有两个用户,然后调用链接函数
    猜你喜欢
    • 2021-07-29
    • 1970-01-01
    • 2021-03-21
    • 1970-01-01
    • 2021-09-23
    • 1970-01-01
    • 2019-07-21
    • 2022-08-03
    • 2020-08-16
    相关资源
    最近更新 更多