AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”

Posted

技术标签:

【中文标题】AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”【英文标题】:AWS Cognito Swift credentials provider "logins is deprecated: Use AWSIdentityProviderManager" 【发布时间】:2016-10-02 12:24:47 【问题描述】:

我试图允许用户使用 facebook 和 Amazon Cognito 注册我的应用程序。我发现以前的文档说要使用:

    let token = FBSDKAccessToken.currentAccessToken().tokenString
    var logins: NSDictionary = NSDictionary(dictionary: ["graph.facebook.com" : token])
    credentialsProvider.logins = [AWSIdentityProviderFacebook: token]

但我收到不推荐使用登录的消息,并使用协议 AWSIdentityProviderManager 向凭据提供程序提供登录,我不知道该怎么做。 我试图让我的班级实现 AWSIdentityProviderManager 并创建了一个登录方法,因为我注意到 credentialsProvider 有一个方法“setIdentiyProviderManagerOnce(self)”,但我不知道在实现的 logins() 方法中要做什么来将 facebook 令牌连接到凭证经理。

我查看了亚马逊的 github 示例,但它们似乎没有多大帮助

【问题讨论】:

现在是 11 月,亚马逊官方文档没有更新。自不推荐使用登录方法以来已经有大约 6 个月的时间了,没有人会费心更新文档。我可以理解,因为亚马逊只是一家小型初创公司……哦,等等。 【参考方案1】:

环顾四周后,我终于发现我不是唯一一个遇到这个问题的人。 AWS 在不更改主要文档的情况下更新了他们的 sdk。 解决方案是在自定义类中实现 AWSCognitoIdentityProviderManager 并将其提供给凭证提供者。 下面是 simaomi 在下面的 github 讨论中提供的代码(更多的是快速修复):

import Foundation
import AWSCore
import AWSCognito
import AWSCognitoIdentityProvider
class CustomIdentityProvider: NSObject, AWSCognitoIdentityProviderManager
    var tokens : [NSString : NSString]?
    init(tokens: [NSString : NSString]) 
        self.tokens = tokens
    
    @objc func logins() -> AWSTask 
        return AWSTask(result: tokens)
    



let customProviderManager = CustomIdentityProvider(tokens: logins!)

self.credentialsProvider = AWSCognitoCredentialsProvider(
   regionType: Constants.COGNITO_REGIONTYPE,
   identityPoolId: Constants.COGNITO_IDENTITY_POOL_ID,
   identityProviderManager: customProviderManager)

sdk 示例展示了您应该如何真正实施解决方案

看这里的讨论: https://github.com/aws/aws-sdk-ios/issues/357

这里是更新的 sdk 示例: https://github.com/awslabs/aws-sdk-ios-samples/tree/developer-authenticated-identities-2-4/CognitoSync-Sample

【讨论】:

您是对的,您提供的示例/链接描述了在新版本的 SDK 中使用 setLogins 的替代方法。我们目前正在努力更新我们的文档。 @MarkMercurio - 您是否还计划更新博客以获取新流程?因为当我尝试创建新的用户池 Twitter 选项被禁用。还是我必须创建联合身份。 @MarkMercurio - 如果您也可以更新此页面,那就太好了:docs.aws.amazon.com/cognito/latest/developerguide/facebook.html。它最后一次更新是 2016 年 4 月 17 日,所以它不是很旧,但似乎已经过时了,因为使用 Swift 代码示例也给了我不推荐使用的错误。 @MarkMercurio - 任何在 Swift 中连接用户池和身份池的完整代码示例? 我们还需要这个解决方法吗?或者文档和 sdk 是否已完全更新以涵盖此问题?

以上是关于AWS Cognito Swift 凭证提供商“不推荐使用登录:使用 AWSIdentityProviderManager”的主要内容,如果未能解决你的问题,请参考以下文章

AWS iOS SDK Cognito 开发人员身份验证 (Swift)

在 Android 上获取 Cognito 凭证

Python - 导出 AWS Cognito 用户池 - NoCredentialsError:无法找到凭证

我无法获取用户的 AWS Cognito 凭证 (swiftUI)

AWS Cognito 登录 iOS (swift)

如何从 Cognito 身份池提供的身份凭证访问用户数据?