【问题标题】:How to integrate AWS Cognito for only Developer authenticated developers?如何仅为经过开发人员身份验证的开发人员集成 AWS Cognito?
【发布时间】:2015-10-04 00:45:51
【问题描述】:

我们已经为未经身份验证的访问集成了 AWS,但是当我们尝试进行身份验证的访问时,我们收到 InvalidParameterException: Please provide a valid public provider.

错误

我们使用以下步骤将 AWS 集成到应用程序中:

DeveloperAuthenticationProvider developerProvider = new DeveloperAuthenticationProvider(
                    AppConstants.AWS_ACCOUNT_ID, AppConstants.IdentityPoolId, Regions.EU_WEST_1
            );
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
                    getActivity(),
                    developerProvider,
                    Regions.EU_WEST_1); 

//set Logings for Authenticated Access
HashMap<String, String> loginsMap = new HashMap<String, String>();
           loginsMap.put(developerProvider.getProviderName(), Token);
            credentialsProvider.setLogins(loginsMap);
            credentialsProvider.refresh();

我们已经完成了 DeveloperAuthenticationProvider 类,它扩展了 AWSAbstractCognitoDeveloperIdentityProvider;我们提供开发者提供者名称(developerProvider.getProviderName()) 和 Token 作为 OpenID 令牌。

但我遇到以下错误:

Caused by: com.amazonaws.services.cognitoidentity.model.InvalidParameterException: Please provide a valid public provider

有时我会收到以下错误: 身份 ID 被禁止。 我无法理解这些错误的原因。我参考了以下网址: https://docs.aws.amazon.com/cognito/devguide/identity/developer-authenticated-identities/, https://mobile.awsblog.com/post/Tx3E3NJURV1LNV1/Integrating-Amazon-Cognito-using-developer-authenticated-identities-An-end-to-en.

请建议我如何解决这些错误并提供一些更新的参考资料,以便我了解这些错误的原因。

【问题讨论】:

  • 您能否在您分配令牌的开发者提供商中分享代码?从您描述的错误来看,您似乎将其分配给登录映射,而不是令牌字段。

标签: android amazon-web-services amazon-s3 openid-connect amazon-cognito


【解决方案1】:

您似乎是在登录映射中设置令牌,而不是 developer guide 中所述的开发者提供者的令牌字段。您可能还想参考我们在 GitHub 上提供的 end-to-end example,其中包含适用于 iOS 和 Android 的示例代码。

【讨论】:

  • 我参考了那些文件。我将开发人员提供者名称和令牌作为 CognitoSyncClientManager 的登录参数传递。但它返回与我在上面的 cmets 中提到的相同的错误。
【解决方案2】:

Hurreyyy,我解决了 AWS Cognito 服务的开发人员身份验证问题。它很容易理解,但很难实现。

这里是解决方案:

CognitoSyncClientManager.init(this, cognitoParams); CognitoSyncClientManager.credentialsProvider.clearCredentials(); CognitoSyncClientManager.addLogins(AppConstants.DEVELOPER_PROVIDER, strToken);,您可以从CognitoSyncDemo 获取 CognitoSyncClientManager。 谢谢大家

【讨论】:

  • AppConstants 在哪里?这是什么?
  • 我猜 AppConstants 是他的自定义类,其中 DEVELOPER_PROVIDER 可能是 login.companyname.appname,即它是您在 cognito 设置中提供的开发者提供者名称。
【解决方案3】:

确保您从 developerProvider.getProviderName() 返回的值与您在 Amazon Cognito 控制台中注册的值相同,如Associate Developer Provider section of the Developer Authenticated Identities topic in the Amazon Cognito Developer Guide 下的步骤所述。

【讨论】:

  • Scott Willeke,感谢您的回复。是的 developer.getProviderName 是正确的。我还在 [jwt.io/] 上测试了令牌。它给了我正确的信息,但签名无效。
  • 返回错误:Caused by: com.amazonaws.services.cognitoidentity.model.InvalidParameterException: Please provide a valid public provider (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: InvalidParameterException; Request ID: daca4cc0-2ae0-11e5-889e-39d5cbca50d0)
猜你喜欢
  • 2014-12-05
  • 1970-01-01
  • 2016-06-29
  • 2015-05-10
  • 1970-01-01
  • 2015-04-15
  • 2018-05-17
  • 2015-01-05
  • 1970-01-01
相关资源
最近更新 更多