AWS Cognito 用户池 + 用于身份验证/登录的社交提供商
Posted
技术标签:
【中文标题】AWS Cognito 用户池 + 用于身份验证/登录的社交提供商【英文标题】:AWS Cognito User Pool + Social providers for auth/log in 【发布时间】:2021-11-24 23:07:45 【问题描述】:大家好,我遇到了用户身份验证/登录问题:
项目在 react-native 中 后端在 AWS 上,因此我们使用 Cognito 用户池 + 身份池。 我们的应用应仅通过 Google 或 Apple 对用户进行身份验证 -> 意味着没有本地/AWS 用户名/密码。 在用户身份验证后,我想获取他/她的令牌 ID,以便访问我们的网关 API,授权方需要此 ID 令牌。我做了什么:
-
创建并设置了苹果/谷歌开发控制台,并获得了谷歌应用 ID 和苹果团队 ID、密钥和标识符。
创建 Cognito 用户池 + 身份池并从第一步添加 id
现在,我想让它在 FE 上运行。我想要自定义按钮,这些按钮将具有调用登录过程的按下功能。此外,我想跳过生成的 Cognito 托管 UI 进行登录并直接转到给定的提供商(我认为是通过 Auth.federatedSignIn(customProvider: "provider"
)。这可以嵌入到应用程序中吗? GIT 上的某个地方是一个例子吗?有人可以详细说明一下吗?我认为需要具有 AWS 功能的 OAuth 流减去 AWS 生成的 UI...
我在任何地方都找不到确切的答案。如果有不清楚的部分,我会详细说明。提前致谢!
【问题讨论】:
【参考方案1】:导航到授权端点时,您可以在查询字符串identity_provider
中传递一个附加参数,如文档中的here 所述。
这会立即将用户重定向到 IDP 登录和同意页面,而不显示托管 UI。
【讨论】:
谢谢,但不知何故,我尝试了这个,但它对我不起作用。幸运的是,我找到了另一种方法…… 另外,我有一个问题要问你。我想通过 Apple SignIn (SignInWithApple) 对用户进行身份验证。我可以这样做,但我想要他/她的电子邮件,但这不起作用。我可以强制用户池范围强制使用电子邮件,然后身份验证不起作用或范围为无并且不会收到电子邮件(来自 JWT)。谷歌工作正常。有什么建议吗?【参考方案2】:我找到了绕过托管和生成的 Cognito UI 的方法。只需检查元素(登录按钮)并复制链接。像魅力一样工作!
【讨论】:
以上是关于AWS Cognito 用户池 + 用于身份验证/登录的社交提供商的主要内容,如果未能解决你的问题,请参考以下文章
在 React 应用程序中为基于 JavaScript AWS Amplify SDK / AWS Cognito 的身份验证分离用户池
在 Graphql 操场上使用 AWS Cognito 用户池对 AppSync 突变进行身份验证
使用 Cognito 用户池向 AWS AppSync 验证 Apollo 客户端