gpt4 book ai didi

android - token 不是来自此身份池的受支持提供商 Amazon Mobile Hub Android

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:51:41 24 4
gpt4 key购买 nike

当我点击 Google 登录时,我使用以下代码在 onActivityResult 方法中获取 token :

 GoogleSignInAccount account = result.getSignInAccount();
String token = account.getIdToken();

credentialsProvider = new CognitoCachingCredentialsProvider(
Login.this, // Context
"My Pool ID", // Identity Pool ID
Regions.US_EAST_1 // Region
);

我已使用管理联合身份在 Cognito 中添加了 Google 客户端 ID。我已经交叉检查了 IAM accounts.google.com 中的所有 key ,一切似乎都很完美。

 final Map<String, String> logins = new HashMap<String, String>();
logins.put("accounts.google.com", account.getIdToken());

credentialsProvider.setLogins(logins);
credentialsProvider.refresh();

当我尝试使用以下代码获取身份 ID 时出现错误 - token 不是来自此身份池的受支持提供者。可能是什么错误?

 credentialsProvider.getIdentityId();

最佳答案

在我的例子中,我在 accounts.google.com 的 IAM 身份提供商中有一个尾部斜杠,如下所示:

IAM provider list

尾部斜杠的是错误的;没有尾部斜线的那个可以正常工作。有趣的是,AWS 将为这两者获取相同的指纹。

在 AWS IAM 控制台的账户 > 提供商 > accounts.google.com 下,添加“com.example.yourstuff 的 Android 客户端(由 Google 服务自动创建)”的 key 作为受众。它看起来像“222222222222-x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8x8.apps.googleusercontent.com”(然后,当您调试时,继续并将所有其余键作为受众条目;您可以稍后返回并确定可以删除哪些键.)

在调用 GoogleSignInOptions.Builder 时,您需要在 Goole API > API 管理器 > 凭据页面上的 OAuath 2.0 客户端 ID 下使用 Web 应用程序 key 调用#requestIdToken:

GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken("999999whateverxxxx.apps.googleusercontent.com")
.build()

( token 可以缓存;如果您使用 requestIdToken 调用运行您的应用程序,然后删除 requestIdToken 调用并再次运行,您仍然可以通过对 GoogleSignInAccount 对象调用 getIdToken() 获得结果。)

google 登录代码最终会给你一个 GoogleSignInAccount 对象。在该对象上调用#getIdToken 以获取要放入登录哈希的字符串(在我的例子中,它是 83 个字符):

  // pseudocode...
private fun fn(x: GoogleSignInAccount) {
val token = x.idToken // getIdToken if you're still using Java
val logins = HashMap<String, String>()
logins.put("accounts.google.com", token);
credentialsProvider.logins = logins
...

如果您没有在 IAM > Providers > accounts.google.com 中列出正确的 key ,您将得到一个 NotAuthorizedException(Invalid login token. Incorrect token audience.) 异常。

如果您将额外的斜杠添加到 accounts.google.com/,您将收到 NotAuthorizedException( token 不是来自此身份池的受支持提供商。)

如果您尝试像这样将 accounts.google.com/添加到登录哈希(不要这样做,而是修复 IAM 身份提供商名称):

logins.put("accounts.google.com/", token);

您将得到一个 NotAuthorizedException(无效的登录 token 。颁发者与提供者名称不匹配) 异常。

如果您使用了错误的 token ,您将得到一个 NotAuthorizedException(无效的登录 token 。 token 签名无效。) 异常。

(我怀疑还有很多其他失败的方法;这些只是我发现的一种。)

关于android - token 不是来自此身份池的受支持提供商 Amazon Mobile Hub Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44451605/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com