了解iOS应用程序中AWS Cognito的使用

了解iOS应用程序中AWS Cognito的使用,ios,amazon-web-services,amazon-s3,ejabberd,amazon-cognito,Ios,Amazon Web Services,Amazon S3,Ejabberd,Amazon Cognito,我的后端应用服务器(ejabberd,托管在AWS EC2上)有自己的用户身份验证过程。我的iOS客户端直接与之连接以供用户登录,但客户端还需要单独访问S3存储桶——为此,我正试图利用AWS Cognito 如果我在我的应用程序中加入以下推荐的iOS SDK代码,我可以让应用程序上传/下载数据到S3存储桶或从S3存储桶下载数据。文档 但是,我的问题是-在哪里/如何每一小时刷新一次凭据?上面的代码对我来说似乎不够-身份池实际上是应用程序中的硬编码,可以由反编译的人检索。我可能错过了一些基本的东西

我的后端应用服务器(ejabberd,托管在AWS EC2上)有自己的用户身份验证过程。我的iOS客户端直接与之连接以供用户登录,但客户端还需要单独访问S3存储桶——为此,我正试图利用AWS Cognito

如果我在我的应用程序中加入以下推荐的iOS SDK代码,我可以让应用程序上传/下载数据到S3存储桶或从S3存储桶下载数据。文档

但是,我的问题是-在哪里/如何每一小时刷新一次凭据?上面的代码对我来说似乎不够-身份池实际上是应用程序中的硬编码,可以由反编译的人检索。我可能错过了一些基本的东西


感谢您的帮助……

身份池id通常嵌入在应用程序中,您不会错过这方面的一步。通过使用auth和unauth角色来严格定义允许每个用户和用户类型执行的操作,可以降低风险


凭据提供程序会自动为您管理凭据。当它们过期时,它将获得新的并使用它们。你所要做的就是将它传递给你的应用程序当时需要的任何AWS客户端。

身份池id通常嵌入到应用程序中,你不会错过这一步。通过使用auth和unauth角色来严格定义允许每个用户和用户类型执行的操作,可以降低风险


凭据提供程序会自动为您管理凭据。当它们过期时,它将获得新的并使用它们。您所要做的就是将其传递给您的应用程序当时需要的任何AWS客户端。

谢谢@Jeff Bailey。那么,这是否意味着我需要在我的应用服务器中实现从AWS获取身份ID,然后将其传递回我的移动客户端,该客户端使用该ID连接到S3?在这里,我的理解可能又错了——我之前假设我的服务器将不起作用,只有iOS客户端需要包含凭据……如果您使用的是经过开发人员验证的身份,这只是流程的一部分。如果不是的话,SDK也会帮你。啊,是的,我是。。。正如我提到的,我的应用服务器负责用户身份验证,所以我有自己的应用特定用户名等。对不起,还有一个问题-这是我遵循/实现我提到的流程的正确博客吗。我问这个问题是因为我找不到BFTask,也看不到它被弃用的消息。。。?再次感谢!使用dev auth,客户端仍应处理获取ID的95%。对服务器的登录调用将返回该ID,此时它将继续正常运行。再次感谢@Jeff Bailey。。。非常感谢你的帮助!我会试试看,万一有什么东西不顺手。。再次感谢!谢谢杰夫·贝利。那么,这是否意味着我需要在我的应用服务器中实现从AWS获取身份ID,然后将其传递回我的移动客户端,该客户端使用该ID连接到S3?在这里,我的理解可能又错了——我之前假设我的服务器将不起作用,只有iOS客户端需要包含凭据……如果您使用的是经过开发人员验证的身份,这只是流程的一部分。如果不是的话,SDK也会帮你。啊,是的,我是。。。正如我提到的,我的应用服务器负责用户身份验证,所以我有自己的应用特定用户名等。对不起,还有一个问题-这是我遵循/实现我提到的流程的正确博客吗。我问这个问题是因为我找不到BFTask,也看不到它被弃用的消息。。。?再次感谢!使用dev auth,客户端仍应处理获取ID的95%。对服务器的登录调用将返回该ID,此时它将继续正常运行。再次感谢@Jeff Bailey。。。非常感谢你的帮助!我会试试看,万一有什么东西不顺手。。再次感谢!
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1 identityPoolId:@"IDENTITY_POOL_ID"];

AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc]
initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];

AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;