如何在Android应用中实现AWS Cognito与API Gateway的登录登出功能?
简易Android应用:AWS Cognito认证+受保护API调用实现
最近我搞定了一款简易Android应用的核心功能开发,在这里和大家梳理下实现细节和验证逻辑:
已实现的核心功能
- 自定义认证UI+Cognito集成:没有用AWS Cognito官方UI库,完全自己搭了登录/登出界面(左侧是未登录时的登录页,右侧是登录后的状态页),实现了:
- 通过邮箱+密码在AWS Cognito后端完成用户注册与登录
- 调用Cognito后端接口完成用户登出操作
- 受保护API调用:对接AWS API Gateway上的受保护Web API,满足预期逻辑:
- 用户登录状态下,调用API返回
200 OK及对应响应体 - 用户登出后,调用API返回
403 Forbidden错误
- 用户登录状态下,调用API返回
实现过程中的关键注意事项
Cognito认证流程手动处理
- 要是开启了Cognito的邮箱验证,得额外处理验证邮件发送和用户验证状态校验,确保只有验证通过的用户才能登录
- 登录成功后,Cognito返回的
Id Token、Access Token和Refresh Token要安全存储,推荐用Android的EncryptedSharedPreferences,别明文存敏感信息 - 登出时,除了清本地令牌,一定要调用Cognito的登出接口让服务器端失效当前会话,防止令牌被盗用
API Gateway请求的令牌携带
- 调用受保护API时,必须在请求头加
Authorization字段,格式是Bearer {Access Token},这样API Gateway才能验证用户身份 - 要处理令牌过期的情况:当
Access Token过期时,用Refresh Token向Cognito请求新令牌,提升用户体验,避免频繁让用户重新登录
- 调用受保护API时,必须在请求头加
UI状态实时切换
- 通过监听本地令牌的存在状态或者Cognito的会话有效性,实时切换左右侧UI界面,保证用户看到的界面和当前认证状态一致
内容的提问来源于stack exchange,提问作者Mark Whitaker
相关产品推荐
相关产品推荐

