HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

Cognito 身份池、Dynamodb 表和创建 Lambda 函数

  • 2019-10-09
  • 本文字数:2699 字

    阅读完需:约 9 分钟

Cognito 身份池、Dynamodb 表和创建 Lambda 函数

背景介绍

Amazon Cognito 为我们的 Web 和移动应用程序提供身份验证、授权和用户管理。它通过身份池可以把令牌转换成 AWS 的临时凭证,可用于访问其他 AWS 服务 (如 Amazon S3 或 Amazon DynamoDB)。因此为我们提供了一套灵活管理客户端访问 AWS 资源的验证授权机制。


除了可使用用户名和密码直接登录,Amazon Cognito 还可以通过第三方 (如 Facebook、Amazon 或 Google) 登录,从而便利了开发者使用主流社交网站的登录体系实现用户登录。Amazon Cognito 已经于 2017 年 11 月在由光环新网运营的 AWS 中国(北京)区域发布,AWS 官方尚未支持使用的微信登录,我们通过以下系列文章为大家介绍通过 Amazon Cognito 的开发人员验证的身份来变通实现微信登录。


要实现微信登录,需要先把微信开放平台注册并创建项目,具体请参考《移动应用微信登录开发指南》。


整体架构

App 客户端呼起微信进行验证,后端 API 与微信开放平台对接验证用户有效性,验证为有效的用户再从服务端调用 Amazon Cognito 服务获取 OpenIdToken,并通过后端 API 返回给 App 客户端。App 客户端再访问其它 AWS 服务时通过 AWS STS 用 OpenIdToken 换取临时凭证。在 Amazon Cognito 中配置的 IAM 角色来控制这个客户端可以访问哪些 AWS 服务。


这里的后端 API 使用现在流行的无服务器架构,以 AWS Lambda 实现简明的业务逻辑,以 API Gateway 实现对外的 API 接口,用 DynamoDB 表存储用户表,只不过这里的用户表中不是直接存储用户名和密码,而是改为存储用户的微信 openID 和自己网站的用户 userID 的对应关系。整个后端 API 架构简单明了,安全可靠,自动伸缩。

移动端 App 获取微信登录数据

根据整个业务逻辑的数据流,我们先来做移动端 App 开发,这里以安卓客户端为例。获得到微信登录验证用的 code 参数后,我们再去做后端验证的 API。最后再回到移动 App,集成 Amazon Cognito 授权来访问 AWS 资源。


创建 Android Studio 开发项目


Application Name 填写 CognitoWechat。


Company domain 填写aws.com


这样凑出的 Package name 是 com.aws.cognitowechat。


下一页选择 SDK 时选 API 21:Android 5.0 (Lollipop)。下一页添加 Activity 选择 Empty Activity。最后一页保持默认参数值创建一个空 Activity,点击 Finish。


项目创建成功后,我们打开 AndroidManifest.xml 文件,可以确认包名 package=”com.aws.cognitowechat”。这个值后续我们配置微信开放平台应用时需要用到。


以 keystore 签名构建安卓 App 后,再使用微信开放平台的签名生成工具生成签名,以这两个值去创建微信开放平台的应用。


获取微信登录第一步 code 值


创建微信平台应用以及安卓 App 接入微信登录的方法这里不再赘述。我们以一个简单的按钮呼起微信登录,验证通过后返回 App,在 onResume()方法里截获微信平台返回的 code 值。详细代码请见分享的源码。


https://github.com/xfsnow/android/blob/master/CognitoWechat/app/src/main/java/com/aws/cognitowechat/MainActivity.java


我们看一下主流程的截图。



点击按钮调用微信登录。



首次请求微信登录时会弹出用户授权页,以后再呼起微信就不会重复弹出了。



微信登录成功后,返回 code 值为我们自己的 App 截获。这里只是用 Toast.makeText()显示出来方便展示。我们也要 App 内记了日志,可以把这个 code 值保存下来,用于下面我们要开发的后端验证接口。

创建 AWS 资源

我们把实现这个范例相关的 AWS 资源逐步创建出来。


申请 API Gateway 的 API 通过互联网可访问


首次使用由西云数据运营的 AWS 中国(宁夏)区域和由光环新网运营的 AWS 中国(北京)区域的 API Gateway 时,需要申请开通互联网可以访问。否则仅在控制台测试 API 的方法时可以成功,但使用 HTTP 请求 API 时不能正常返回结果,只会返回{“Message”:null}这样的结果。申请方法是使用支持控制面板


https://console.amazonaws.cn/support/home?region=cn-north-1#/


点击创建案例按钮。


关于项保持默认的“账户和账单支持”。


服务选择“账户”。


类别选择“合规性和认证(ICP 备案)”。


主题输入“请开放 API Gateway 公网可访问”。


描述输入“我需要创建 API Gateway,请开放 API Gateway 公网可访问”。


案例需要支持服务人工处理,请耐心等待处理结果。等待期间我们可以继续下面的讲解和练习。


创建 Amazon Cognito 身份池


我们访问 https://console.amazonaws.cn/cognito/home?region=cn-north-1 打开 Amazon Cognito 控制台。点击页面正中的“管理身份池”按钮,然后点击“创建新的身份池”按钮。身份池名称栏输入 CognitoWechat。


点击“身份验证提供商”展开,选择“自定义”选项卡,开发人员提供商名称输入 cn.aws.cognitowechat。这个包名将用于我们后续开发的客户端程序和后端 API 程序,用以标记使用的是同一个身份池。


点击右下角“创建池”按钮。前进到 IAM 创建角色页,直接点击右下角“允许”按钮即可。


身份池创建成功后,会同时创建出 2 个 IAM 角色——Cognito_CognitoWechatAuth_Role 和 Cognito_CognitoWechatUnauth_Role。这个范例中我们模拟的场景是登录后的用户可以访问 Amazon S3,所以我们再给 Cognito_CognitoWechatAuth_Role 角色附加一个策略“AmazonS3ReadOnlyAccess”,最后在 Android 客户端允许通过 Cognito 授权的用户可以列出现有 Amazon S3 的桶名称。


创建 DynamoDb 表


我们使用一个 DynamoDb 表记录微信用户 UnionId 与我们自己用户体系中用户的对应关系。


具体创建和使用 DynamoDb 表,请参考相关文档。


http://docs.aws.amazon.com/amazondynamodb/latest/gettingstartedguide/GettingStarted.JsShell.01.html


在这个范例中我们全部使用由光环新网运营的 AWS 中国(北京)区域,所以在由光环新网运营的 AWS 中国(北京)区域创建一个表,表名叫 WechatUser。主分区键名称为 unionid ,使用字符串类型。

小结

这一篇中我们介绍了 Amazon Cognito 集成微信登录的整体架构,开始部署 Cognito 身份池和 DynamoDb 表。使用 Android Studio 创建了客户端 App,并且添加了微信登录的基本流程。在下一篇中,我们将继续为大家用 Eclipse 进行 Lambda 函数开发的相关内容。


作者介绍:


薛峰


亚马逊 AWS 解决方案架构师,AWS 的云计算方案架构的咨询和设计,同时致力于 AWS 云服务在国内和全球的应用和推广,在大规模并发应用架构、移动应用以及无服务器架构等方面有丰富的实践经验。在加入 AWS 之前曾长期从事互联网应用开发,先后在新浪、唯品会等公司担任架构师、技术总监等职位。对跨平台多终端的互联网应用架构和方案有深入的研究。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/amazon-cognito-wechat-deployment-1/


2019-10-09 18:20924
用户头像

发布了 1848 篇内容, 共 114.2 次阅读, 收获喜欢 78 次。

关注

评论

发布
暂无评论
发现更多内容

【华为云828企业节上福利】软件开发工具升级版免费套餐重磅上线

华为云PaaS服务小智

软件开发 华为云 CodeArts

业务需要咨询?开发遇到bug想反馈?开发者在线提单功能上线!

荣耀开发者服务平台

开发者 在线客服 工单 技术支持

Presto 设计与实现(十二):SQL 逻辑计划

冰心的小屋

数据湖 presto 设计与实现 SQL Plan

生成式AI:重新定义生产力与创造力

百度开发者中心

人工智能 ChatGPT 生成式AI 文心一言

众智引领未来:2023中国高校计算机大赛——大数据挑战赛冠军揭晓

云智慧AIOps社区

人工智能 算法 日志分析 计算机 模型

软硬件双向驱动 英特尔加速AI on PC落地

E科讯

打造千亿文件量级的大规模分布式文件系统

Baidu AICLOUD

文件系统 分布式文件存储 元数据

校源行丨开放原子开源基金会赴哈尔滨工程大学走访交流

开放原子开源基金会

GaussDB技术解读:应用无损透明(ALT)

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

Graph + LLM|图数据库技术如何助力行业大语言模型应用落地

悦数图数据库

数据库 图数据库

生成式AI:业务流程的变革与机遇

百度开发者中心

人工智能 生成式AI 文心一言

2023年广州国际大健康产品及健康食品展会

秋硕展览

2023健博会 保健用品展 护理用品

探索MySQL到SelectDB的实时数据同步技术

NineData

数据同步 SelectDB NineData 同步工具 数据延迟

用友Fast by BIP领先实践全景图公布!

用友BIP

Fast by BIP 2023全球商业创新大会

生成式AI助力文学艺术创作

百度开发者中心

人工智能 艺术 文心一言

大数据平台与数据仓库的五大区别

行云管家

大数据 数据仓库 数据安全 大数据平台

校源行丨开放原子开源基金会赴吉林大学走访交流

开放原子开源基金会

C和C ++ IDE代码编辑器CLion 2023 激活码最新v2023.2

mac大玩家j

代码编辑器 Mac软件 代码编辑 编辑代码

宁高宁:数智企业,一流企业

用友BIP

2023全球商业创新大会

何积丰:数智经济拥抱AI大模型

用友BIP

2023全球商业创新大会

程序员常逛的17 个杀手级网站

专注前端开发

前端 大前端 网站

生成式AI领先,实现客服机器人真智能

百度开发者中心

人工智能 机器人 生成式AI 文心一言

生成式AI:助力网络安全,挑战与机遇并存

百度开发者中心

人工智能 网络安全、 生成式AI 文心一言

2023开源和信息消费大赛新闻发布会在京召开

开放原子开源基金会

Microsoft Outlook 2021 for mac v16.76.2中文版

mac

苹果mac Windows软件 Outlook2021

​iOS上架审核宝典:如何避免被拒一次提交成功

ios

iOS上架审核宝典:注意事项与实用工具分享

雪奈椰子

ios打包 IPA上传

Clang编译数据库信息扩展

maijun

Clang 编译数据库

Cognito 身份池、Dynamodb 表和创建 Lambda 函数_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章