You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS应用不使用Cognito能否接入AWS SNS实现推送通知?

AWS SNS credentialsProvider参数配置方案

针对你无Cognito、无登录流程、使用AppAuth授权的场景,可选择以下三种合法参数传入credentialsProvider满足AWS验证要求:

  • 方案1:临时身份凭证(生产环境推荐)

    你可以将现有AppAuth授权服务与AWS STS(安全令牌服务)对接,获取临时访问密钥、秘密密钥、会话令牌三个参数,用临时凭证构造提供者:
    // 替换为你通过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
    
    注意要给该临时凭证对应的IAM角色分配最小必要权限,仅开放SNS设备注册、推送相关的接口权限即可,避免权限溢出。
  • 方案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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:39:01