【问题标题】:Get AWS Cognito JWT token from Federated Identity credentials从联合身份凭证获取 AWS Cognito JWT 令牌
【发布时间】:2020-12-17 10:17:10
【问题描述】:

我有一个用 Objective-c 编写的旧大项目,目前无法迁移。

我们已经毫无问题地集成了 Cognito 注册和登录,检索发送到 Lambda 函数的会话 JWT 令牌,该函数对其进行解码并提取用户 ID(子)

现在,我们需要为 Google 和 Facebook 添加 Federated Identities 才能登录。第一步已经完成,我们使用 FB/AppleId 登录,在 Cognito 的身份池中注册用户并获取临时凭据。

但是,有没有办法让 Cognito JWT 令牌发送到 Lambda 函数,以便 Lambda 可以像 Cognito 登录一样提取用户 ID?

这是一个示例凭据响应。

    AccessKey: ASIAXQHR5J112WSRIYII
SecretKey: hBIpbSXvYu6Qs4GWd3arAS0JUNqYhIx8qKFB2osv
SessionKey: IQoJb3JpZ2luX2VjEB0aCWV1LXdlc3QtMSJIMEYCIQC0AJj8YcfM6CxXN0yY6VAsmqAIQIqd1s+TnIfOylvg0AIhALBOl334WewTS4chHJjUJozQpjUPkFHGmiuA24iv3FzvKpoECBYQABoMNTE1OTAzNDA5ODU5IgzTfJRwWTTgF/Vuyl8q9wNc+MEFNyXxEr39LmNmH9ftSno74u7deW2riAatFPAQUgeg5NVcV3AvsJtV7zhBHlI53W1DLdw0GlspLuaEyFbzEhoqYhB2lbeYFcf8ycieNtzyftPCv+ea1PMgDKzpTx+KhnYxpTULo5Pr+lII6CJuX88/BRdE+FEeJ8PJ9wZeXjqBO5egkEw9aWcHAe1rZK8yy6wwbIqo7j6V4sIWefivD1TDN0BsRU0lLQ3ZkRmdc5sptipecvQ5fTRaoIWzvtC0CdRacHoPTjMzCtfewMWQ1cCeq/LGsYzRtuFd0qDtNNX7FMSQdrwbt8pnFUxBKPJ9rDT+mOliqaWU7L73hlKLcY2HuBnycLCjnqYu1V0JDYtN2+Co9oHQIcfX5c5e8bPIp6jBQ5sVwizkp07LA0franRRrQzPQlZ2sJTKaNO1W85L6wJWd7DIaN72NL88WzSYzWbESxmjcvsfR3mQ0W8vKlsdxv0apHlJrcjAtAedbkSt3cR18eMgPyFXdudRmU0hWQBW4Oqe7fm9GCf+Ba1fTpjP1GMJw8FLIs798OTUUlCC3VF82iD5wTeU5uWTBAFLt3FE8fbxiCZ1Av0S7HPt+N8mS8d8U66/v/l/tkWVu22NMlXDjVyb87Ik0dzA9AovX/xvxMgPvTPWr9NvqM5kpQdOKxXEezC2hKT6BTqEApjGw3xilPSIdZyJ4KSTOKFzFGDjSOmZ69VOzf8XbjSENhhDFxEU3LaBGbblC9Hhjs+5dO21m2hPac2C85pTngkezckdgrh2ZTK6loGXnFvs5Uzbb4h3fPdHvw7cgU2HgMlyBTcd3k30hUULci+YJvSN6k1tA//VE8NykgGppWCd0OjQlXXi9/05PWSSAKL6lI9IGZfNuGvwO8K3GcNhP8IVRgbg9N7Nstd6+NParBNvhLayoeKo+j7AcfT6CEfUjO6iZMtK5vxHCC0mPclsmLpXu1MqEsSExIAX2R6vpniSVzzqLYDesZJFY/XKQKQKvUt7ryhStVwTfJHGGF1asB5ANF5t
Expiration: 2020-08-28 14:10:14 +0000

提前致谢!

【问题讨论】:

    标签: ios objective-c amazon-web-services aws-lambda amazon-cognito


    【解决方案1】:

    也许您根本不需要使用身份池,而可以自己坚持使用用户池。 You can in fact configure 3rd party sign-ins via the User Pool.

    如果您进入 AWS 控制台中的用户池并查看菜单底部,您将看到“Federation”。您可以在此处设置联合,无需身份池。

    1. 您可以单击“身份提供商”链接,在该链接中,您可以输入您希望用户能够登录的每个第 3 方身份提供商(例如 Facebook)的凭据和 OAuth 范围。
    2. 然后您可以点击“属性映射”链接,并配置将来自第 3 方的用户数据映射到您的用户池中的相同值,这样无论用户来自何处,都可以与用户池的用户目录中的相同属性。
    3. 在用户池中配置第 3 方身份提供者后,它将作为一个选项出现在用户池的“应用程序客户端设置”中显示的“启用的身份提供者”中。
    4. 当您在“应用程序客户端设置”中启用第 3 方身份提供商时,这些提供商的按钮将出现在您的托管 UI 视图中(如果您使用的是托管 UI)。例如。将出现一个 Facebook 或 Google+ 按钮,以便您的用户可以使用它们进行身份验证。
    5. 现在,无论您是通过 Facebook、Google 还是使用用户名和密码登录,您都将始终获得返回的 JWT,这些 JWT 将具有标准化的声明(属性)名称(由于属性映射)以及用户池 @987654323 @。

    【讨论】:

    • 我已经在用户池中完成了所有这些工作并按照本教程进行操作 (aws.amazon.com/es/blogs/security/…),但是我完全迷失在第 7 步和第 8 步中。我只是得到了临时的凭据,而不是 ID 令牌。有什么想法吗?
    • 嗯...我对几件事感到困惑。首先,该教程中有几个步骤 7 和 8,我不确定您指的是哪一个。其次,该教程中没有提到 Cognito 身份池,但从您的帖子和 cmets 看来,您正在使用身份池来获取临时 AWS 凭证。我的意思是您不需要身份池或临时凭证,因为您可以直接从用户池中获取 JWT。
    • 首先感谢您的宝贵时间。我想我还是有点困惑。我有一个用于 Facebook 和 Cognito 的具有联合身份的用户池,我需要一个 JWT 令牌发送到 Lambda 函数以提取用户 ID(子)。我可以使用 Cognito Pool 标准用户,但不能使用 Facebook 或 AppleId 用户。
    猜你喜欢
    • 2018-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-27
    • 2018-04-05
    • 2022-01-26
    • 2021-04-21
    相关资源
    最近更新 更多