此标识池不支持未经身份验证的访问

时间:2017-11-07 09:49:23

标签: android amazon

错误是: com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:此标识池不支持未经身份验证的访问。 (服务:AmazonCognitoIdentity;状态代码:400;错误代码:NotAuthorizedException;

请帮帮我。 登录过程成功,当我进入亚马逊lex聊天机器人窗口时,我收到上述错误此身份池不支持未经身份验证的访问。这实际上是有道理的,因为我取消选中未经身份验证的访问权限僵尸,所以我知道没有身份验证,不允许用户与Lex ChatBot进行交互。但是现在我的登录成功了,但我仍然有这个错误。

我的问题是我们是否需要维护已登录的用户会话?如果是,我该怎么做。

或者

如何将登录链接到Cognito身份验证身份。

1 个答案:

答案 0 :(得分:3)

当身份池禁用了未经身份验证的访问且在应用程序的登录映射中未找到任何ID令牌时,我们会收到此错误。例如,在Android应用程序中,在初始化CognitoCachingCredentialsProvider之后,您还需要调用setLogins()方法并提供登录映射。

//Relevant imports
import com.amazonaws.auth.CognitoCachingCredentialsProvider;
import com.amazonaws.regions.Regions;

//Initialize credentials provider
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider(
  getApplicationContext(),
  "IDENTITY_POOL_ID", 
  Regions.US_EAST_1 
);

//Create a login map
Map<String, String> logins = new HashMap<String, String>();
logins.put("www.amazon.com", "login with Amazon token");

//Set login map
credentialsProvider.setLogins(logins);
credentialsProvider.getCredentials();

//Create clients for AWS services with credentialsProvider as a parameter in the constructor

在上面的例子中,我假设&#39;使用亚马逊登录&#39;被使用了。对于不同的提供商,请更改密钥&#34; www.amazon.com&#34;用适当的令牌。要知道密钥,只需在https://jwt.io解码id令牌并查找iss声明。没有https://的值将是登录地图的关键字。

关于放置此代码的位置,请检查它是否在任何位置使用CognitoCachingCredentialsProvider对象,然后向其添加登录映射。要免费刷新凭据,请调用refresh()方法