我有一个用objective-c编写的大项目,目前还不能移植。
我们集成了Cognito注册和登录,没有任何问题,检索发送到Lambda函数的会话JWT令牌,Lambda函数对其进行解码并提取用户id(sub)
现在,我们需要为Google和Facebook添加联合身份才能登录。第一步已经完成,我们使用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
先谢了!
2条答案
按热度按时间aamkag611#
也许您根本不需要使用身份池,可以只使用用户池。You can in fact configure 3rd party sign-ins via the User Pool。
如果您进入AWS控制台中的用户池并查看菜单底部,您将看到“联合”。您可以在此处设置联合,而不需要身份池。
1.您可以单击“身份提供商”链接,在此链接中,您可以输入您希望用户能够登录的每个第三方身份提供商(例如Facebook)的凭据和OAuth范围。
1.然后,您可以单击“属性Map”链接,并配置来自每个第三方的用户数据与用户池中相同值的Map,以便无论用户来自何处,它都以相同的属性存储在用户池的用户目录中。
1.在用户池中配置第三方身份提供者后,它将作为选项显示在用户池的“应用程序客户端设置”中显示的“已启用的身份提供者”中。
1.当您在“应用程序客户端设置”中启用第三方身份提供程序时,这些提供程序的按钮将显示在您的托管UI视图中(如果您正在使用托管UI)。例如,将显示Facebook或Google+按钮,以便您的用户可以使用它们进行身份验证。
1.现在,无论您是通过Facebook、Google还是使用用户名和密码登录,您总是会得到返回的JWT,这些JWT将具有标准化的声明(属性)名称(因为属性Map),以及用户池
sub
。osh3o9ms2#
对于来到这里只是为了获得Cognito用户
sub
的每个人,如果它是代理,您可以在lambda内的event.requestContext.identity.cognitoAuthenticationProvider
中访问它,如果不是,则可以在请求模板中访问$.context.identity.cognitoIdentityId
。你会得到类似
其中
yyyyyy-yyyyy-yyyyy-yyyy
是认知子系统。参见https://sst.dev/chapters/mapping-cognito-identity-id-and-user-pool-id.html