iOS应用不使用Cognito能否接入AWS SNS实现推送通知?
AWS SNS credentialsProvider参数配置方案
针对你无Cognito、无登录流程、使用AppAuth授权的场景,可选择以下三种合法参数传入credentialsProvider满足AWS验证要求:
方案1:临时身份凭证(生产环境推荐)
你可以将现有AppAuth授权服务与AWS STS(安全令牌服务)对接,获取临时访问密钥、秘密密钥、会话令牌三个参数,用临时凭证构造提供者:
注意要给该临时凭证对应的IAM角色分配最小必要权限,仅开放SNS设备注册、推送相关的接口权限即可,避免权限溢出。// 替换为你通过AppAuth + STS流程拿到的凭证参数 let tempCredentials = AWSTemporaryCredentials( accessKey: "STS返回的临时AccessKey ID", secretKey: "STS返回的临时SecretAccess Key", sessionToken: "STS返回的会话令牌", expiration: 临时凭证过期时间的Date实例 ) let credentialsProvider = AWSStaticCredentialsProvider(credentials: tempCredentials) // 构造服务配置 let defaultServiceConfiguration = AWSServiceConfiguration( region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider ) AWSServiceManager.default().defaultServiceConfiguration = defaultServiceConfiguration方案2:静态IAM凭证(仅开发测试使用)
本地调试阶段可以直接用拥有SNS权限的IAM用户的静态密钥构造凭证提供者,绝对不要将硬编码的静态密钥提交到代码仓库或者打包到线上应用:let credentialsProvider = AWSStaticCredentialsProvider( accessKey: "你的IAM用户AccessKey ID", secretKey: "你的IAM用户SecretAccess Key" )方案3:匿名凭证(极不推荐)
如果你给SNS平台应用配置了公开访问权限,也可以传入匿名凭证提供者,该配置会导致所有人都能调用你的SNS资源,安全风险极高,禁止在线上使用:let credentialsProvider = AWSAnonymousCredentialsProvider()
额外注意事项
- 拿到Apple deviceToken后,调用SNS的
createPlatformEndpoint接口注册设备时,只需保证凭证包含该接口的调用权限即可正常执行,不需要额外接入Cognito。 - AppAuth授权流程只需保证在调用SNS接口前完成凭证获取即可,无需和AWS身份体系深度绑定。
内容的提问来源于stack exchange,提问作者Jorgen
相关产品推荐
相关产品推荐

