写点什么

AWS Cognito User Pool 实现 Alexa 账户关联

  • 2019-10-12
  • 本文字数:3857 字

    阅读完需:约 13 分钟

AWS Cognito User Pool 实现 Alexa 账户关联

完成本实验预计使用 1 小时 完成该实验需要可以一个已经注册好的 Alexa Skill, 并且能够在 Alexa App 或者 Alex Web Portal 中显示该 Alexa Skill。


本文将介绍如何利用 AWS Cognito User Pool 实现 Alexa 的账户关联。这里将不涉及到 Cognito 或者 Alexa 相关的开发。有关 Cognito User Pool 的更多资料请参考 官方文档。 有关 Alexa 的开发资料请参考 Alexa Developer Portal。

什么是账户关联

账户关联(Account Linking)允许将用户在 Alexa 账号系统中的身份与另外一个账号系统中的身份关联起来。 假设这样的一个问题,系统 X 中存在用户 a 和用户 b, Alexa 账户体系中存在用户 A 和用户 B, 那么系统 X 收到来自 Alexa 的指令后,如何区分这是来自用户 a 的请求还是用户 b 的呢?账户关联就是为了解决这个问题,将 Alexa 的账户 系统与另一个账号系统中的身份关联起来。


Alexa 账户关联是标准的 OAuth2.0 授权, 本文不深入探讨 OAuth2.0, 有关 OAuth2.0 的理解可以参考 理解 OAuth 2.0。


AWS 的 Cognito User Pool 提 供了标准的 OAuth 2.0 的认证和授权,因此借助 Cognito User Pool 可以快速实现和 Alexa 的账户关联。


下面这张流程图展示了一个用户在 Alexa APP 中进行账户关联,Alexa 是如何从授权服务器获得 AccessToken 的整个过程。



在完成 Alexa 的账户关联之后,用户与 Skill 交互产生的指令会被发送到 Resource Server, 该指令中包含用户的 AccessToken。 这里的 Resource Server 就是 Alexa Kill 控制中配置的 Endpoint。


在 Resource Server 上,通过 Decode AccessToken, 能够获得用户名。


配置 Cognito User Pool

AWS Cognito User Pool 提供了基于 OAuth 2.0 的实现,这里提供详细的 Cognito User Pool 的配置流程。


创建 Cognito User Pool


  1. 打开 Amazon Cognito Console。

  2. 选择管理用户池。

  3. 在页面右上角,选择创建用户池。

  4. 为您的用户池指定一个名称,然后选择查看默认值以保存该名称。

  5. 在属性页面上,选择电子邮件地址或电话号码,然后选择允许使用电子邮件地址。

  6. 在页面底部,选择下一步以保存属性。

  7. 在页面左侧的导航栏上,选择审核。

  8. 在审核页面底部,选择创建池。

  9. 创建应用程序客户端

  10. 您可以为用户池创建多个应用程序,通常一个应用程序对应于该应用程序的平台。在和 Alexa 的结合的 场景中,Alexa 是用户池的一个应用程序客户端。


1.在页面左侧的导航栏上,选择应用程序客户端。


2.在应用程序客户端选项卡中,选择添加应用程序客户端


3.指定应用程序客户端名称


4.指定应用程序的刷新令牌的到期时间 (天)。默认值是 30。 您可以将其更改为 1 到 3650 之间的任何值。


5.在页面底部,选择创建应用程序客户端。


配置应用程序客户端 OAuth 2.0 设置


默认情况下应用程序客户端的 OAuth 2.0 是不开放的,按照以下步骤,打开客户端的 OAuth 2.0 认证与授权。


1.在页面左侧的导航栏上,选择应用程序客户端设置。


2.找到刚才创建的应用程序客户端。


3.在启用身份提供商中,选择 Cognito User Pool 。


4.在回调 URL 中,指定 Alexa Kill 的 Redirect URLs。


在 Alexa Console 中选择需要配置的 Alexa Skill, 在左侧页面导航栏选择 Account Linking, 网页底部找到的 Redirect URLs。


Alexa 根据用户在哪里注册的设备,跳转到不同的 URL, 为了服务所有 Alexa 用户,建议将三个 Redirect URL 都填入 Cognito,点击查看更多信息



5.在允许的 OAuth 流程中,选择 Authorization code grant。


6.在许的 OAuth 范围中,至少选择 openid。


7.选择保存修改。



配置 Cognito User Pool 认证域名


Cognito 域名是 Alexa 进行 OAuth2.0 认证时的跳转域名。默认的域名为 https://.auth..amazoncognito.com。 您可以配置自己的域名,关于如何配置自己的域名,请参考将自定义域添加到用户池。 本文将使用 AWS 提供的默认域名。


1.在页面左侧的导航栏上,选择域名。


2.指定您的域名,选择检查可用性。


3.当提示为此域可用后,选择保存更改。



请记录 Cognito User Pool 的认证域名,可以使用默认域名或者自己的域名,在后续的 Alexa 配置中需要使用。


配置 Amazon Cognito 认证 UI(可选)


Amazon Cognito 提供默认的 UI, 如下图:



可以根据自定义内置登录网页和注册网页 修改登录的页面。如果不希望使用 Cognito 提供的登录和注册页面,也可以根据 API 自己实现。

配置 Alexa Account Linking

此章节将配置 Alex Account Linking, 这里假设已经创建了一个 Alexa SkillSet 或者 Alexa SmartHome Skill。


  1. 登录 Alexa 控制台。

  2. 在 Skills 列表页中,选择需要做账户关联的技能。

  3. 在左侧页面导航栏中,选择 Account Linking。

  4. 打开”是否允许账号”的开关。

  5. 在 Security Provider Information 中,选择 Auth Code Grant。

  6. 在 Authorization URI 中,指定 https:///oauth2/authorize。

  7. 在 Access Token URI 中,指定 https:///oauth2/token。

  8. 在 Client ID 中,指定 Cognito 应用程序客户端的应用程序客户端 ID。

  9. 在 Cognito 控制台左侧选择应用程序客户端, 点击显示详细信息,可以查看应用程序客户端 ID 和应用程序客户端密钥。



在 Client Secret,指定 Cognito 应用程序客户端的应用程序客户端密钥。


在页面左上角,选择 Save。


(可选)如果是 Custom Skill, 需要重新 Build Skill。选择左侧页面导航栏中的 CUSTOM, 选择 Invocation, 点击 Build Model 按钮,等待 Build Success 的提示。


关于更多 Cognito OAuth2.0 的 URI, 请参考 Amazon Cognito 用户池 Auth API 参考

在 Alexa App 中绑定用户身份

创建测试用户


1.打开 Amazon Cognito Console。


2.选择刚才创建的用户池。


3.在页面左侧导航栏中,选择用户和组。


4.选择创建用户,并指定用户名, 临时密码, 电话号码及电子邮件,并选择创建用户。



账户关联


Alexa APP 的登录账号,必须和登录 Alexa Developer 控制台的账号相同,才能看见开发中的 Alexa 技能。


1.在手机上打开 Alexa APP, 或者使用 Alexa Web Portal。


2.在 APP 左上角,选择”汉堡”按钮。


3.在左侧导航栏页面中,选择 Skills。


4.在 All Skills 页面右上角,选择 Your Skills。


5.在 Your Skills 页面,选择 DEV SKILLS, 此处将列出所有开发中的技能。


6.选择创建的 Alexa 技能,在详情页,选择 Enable。如果已经显示为 Enable,可以先选择 Disable 之后,再次 Enable。


7.在弹出的登录页面中,输入 Cognito User Pool 中用户账号和密码。


8.(可选) Cognito User Pool 在第一次登录之后,需要修改初始密码。


9.账户关联成功。



此时,账号已经关联成功,Alexa 在后续发送给 HTTP Endpoint 或者 AWS Lambda 的消息体中均会包含用户的 accessToken, 该 accessToken 为 JWT 格式。Alexa 发送的 JWT token 中的 sub 字段就是 Cognito User Pool 中的用户名。


作者介绍:


施乔


AWS 解决方案架构师,毕业于 RMIT University。现负责 AWS 架构咨询及设计优化,同时致力于 AWS IoT 在国内和全球企业客户的应用和推广。加入 AWS 之前,有过一段创业经历,对制造业,物联网,Saas 领域的技术方案有深入研究。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/aws-cognito-user-pool-alexa-linking/


2019-10-12 10:261269
用户头像

发布了 1953 篇内容, 共 165.5 次阅读, 收获喜欢 82 次。

关注

评论

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

城市健康云,打造大健康服务生态

华为云开发者联盟

云计算 后端 华为云 企业号 2 月 PK 榜 华为云开发者联盟

过年回去,终于给老人讲清楚两台电脑是如何通信的

华为云开发者联盟

后端 开发 华为云 企业号 2 月 PK 榜 华为云开发者联盟

打造合规数据闭环,加速自动驾驶技术研发

Baidu AICLOUD

自动驾驶 数据闭环

软件测试/测试开发 | app自动化测试(Android)--显式等待机制

测试人

软件测试 自动化测试 测试开发 appium app自动化测试

一看就懂!任务提交的资源判断在Taier中的实践

袋鼠云数栈

2024最新easyrecovery数据恢复软件免费版

茶色酒

EasyRecovery15

如何解决Mac电脑突然变得又卡又慢的处理方法

茶色酒

重塑设备维护管理的主要趋势

PreMaint

设备健康管理 设备管理

百度智能云助力自动驾驶全链路研发

Baidu AICLOUD

自动驾驶 全链路

StarRocks荣获开源中国“2022 年度优秀开源技术团队”

StarRocks

数据库

国资委79号文解读:国央企OA办公系统信创替代落地实践与标杆案例

数字科技时讯

信创 电子合同 电子签名 企业国产化 OA

软件测试/测试开发 | app自动化测试(Android)--App 控件交互

测试人

软件测试 自动化测试 测试开发 appium app自动化测试

详解 k8s 中的 RBAC

HummerCloud

云原生 k8s

采购LED显示屏时必须了解哪些技术参数?

Dylan

LED显示屏 全彩LED显示屏 led显示屏厂家

手把手教您在PyCharm中连接云端资源进行代码调试

华为云开发者联盟

人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

顶会论文 | 虚拟网络探测技术的探索与实践

阿里技术

网络运维 虚拟网络探测

如何将使用中的域名平滑迁移到京东云?(以原域名注册、域名解析都在万网为例)

京东科技开发者

域名解析 注册 京东云 京东商城 企业号 2 月 PK 榜

特定领域知识图谱融合方案:文本匹配算法(Simnet、Simcse、Diffcse)

汀丶人工智能

自然语言处理 知识图谱 2月日更

软件测试/测试开发 | app自动化测试(Android)--触屏操作自动化

测试人

软件测试 自动化测试 测试开发 appium

一文走进多核架构下的内存模

KaiwuDB

多模数据库 多核编程 内存模

TiDB 6.5 新特性解析丨过去一年,我们是如何让 TiFlash 高效又稳定地榨干 CPU?

PingCAP

TiDB

为什么我在公司里访问不了家里的电脑?

Java 计算机网络 网络协议

随机高并发查询结果一致性设计实践

京东科技开发者

架构设计 并发 业务场景 企业号 2 月 PK 榜 京东物流

分享一个 HIVE SQL 性能优化点-使用公共表表达式 CTE 替换临时表

明哥的IT随笔

hadoop hive

StarRocks市场渗透率跻身Top10!

StarRocks

数据库

PingCAP 黄东旭万字长文剖析数据库发展新趋势:脱离应用开发者的数据库,不会成功

PingCAP

数据库 TiDB

自动驾驶工具链及仿真平台的应用

Baidu AICLOUD

自动驾驶 工具链

OpenMLDB 社区月报 | 2023 年 1 月

第四范式开发者社区

人工智能 机器学习 数据库 开源 特征

会声会影2023中文版操视频剪辑软件下载

茶色酒

会声会影2023

奇安信首次盈利,网络安全国家队将迎来收获期?

ToB行业头条

网络安全

开发小白的高光逆袭:竟然能一眼断定生产环境接口响应时间慢是磁盘性能问题引起的

KINDLING

Java 故障定位 ebpf 生产环境 排障

AWS Cognito User Pool 实现 Alexa 账户关联_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章