写点什么

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:20919
用户头像

发布了 1845 篇内容, 共 111.4 次阅读, 收获喜欢 77 次。

关注

评论

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

鸿蒙保障应用开发安全的技术措施

芯盾时代

鸿蒙 嵌入式

828上云有妙招!华为云Flexus云服务器X实例帮助上云“破题”

轶天下事

AI Native平台,跨越AI应用从创新到生产的鸿沟

阿里云大数据AI技术

人工智能 阿里云 云栖大会

adobe AU2024系统要求 附Audition 2024中文破解版安装包 Mac/win

Rose

828首选“小快轻准”云服务!华为云Flexus X实例助力扫清上云阻碍

轶天下事

建筑行业必备:8大工程项目管理软件解析

爱吃小舅的鱼

工程项目管理

邮储银行,奔跑在智能化软件开发的春天里

脑极体

AI

JetBrains pycharm pro 2024最新永久激活码 pycharm2024下载安装

Rose

828上云正当时!华为云Flexus X实例革新云服务体验

轶天下事

在爬取京东商品详情信息时,如何处理验证码问题?

tbapi

京东商品详情数据接口 京东API

828轻量级云服务器超值!华为云Flexus X实例助力业务高速增长

轶天下事

腾讯秋招面试,人麻了。。。

王中阳Go

腾讯 面试 面经 大厂面试 秋招

主流房地产工程管理软件详细解析

爱吃小舅的鱼

工程管理 工程项目管理

AIGC云平台解决方案如何重塑电商设计流程

3DCAT实时渲染

AIGC云平台 AIGC解决方案 AIGC创作云平台

9款高效生产需求变更管理工具详细评测

爱吃小舅的鱼

生产需求变更管理工具

云起无垠荣获第九届“创客中国”网络安全专题赛二等奖

云起无垠

828开启上云第一步!华为云Flexus云服务器X实例“柔性算力”领先体验

轶天下事

提示词并非魔法,而是可以被解析的”咒语“

InfoQ_cc89bbb4b601

人工智能 AI LLM 提示词 提示词工程

扬帆云栖,英特尔携手阿里云共缔数智精彩

E科讯

懒人一键安装:pd虚拟机专用windows系统镜像(m1/intel)

你的猪会飞吗

Mac软件下载站 mac破解软件下载

828数字化转型正当时,华为云Flexus云服务器X实例让上云更简单

轶天下事

淘宝商品详情API接口:电商营销的坚实基石

代码忍者

API 测试 pinduoduo API

2024开放原子开源生态大会将启,深开鸿与您一起共促生态繁荣

科技热闻

828云服务触手可及!华为云Flexus X实例再掀上云浪潮

轶天下事

如何挑选适合的工程项目资料管理工具

爱吃小舅的鱼

工程项目管理软件

装修设计管理软件推荐与评测

爱吃小舅的鱼

装修设计项目管理软件

苹果电脑几款好用的效率翻倍工具,轻松管理剪贴板!

Rose

抖音商品sku数据接口(Dy.item_sku)丨抖音平台API数据接口指南

tbapi

抖音商品详情数据接口 抖音API接口 抖音商品sku接口

互动LED地砖屏的独特性

Dylan

科技 LED display LED显示屏 led显示屏厂家

【第4期】搜索客 Meetup | INFINI Pizza 网站 SVG 动画这么炫,我教你啊!

极限实验室

SVG ChatGPT 极限科技 Pizza 搜索客社区

使用 Higress AI 插件对接通义千问大语言模型

Se7en

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