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

Android 此标识池不支持未经身份验证的访问,android,amazon,Android,Amazon,错误是: com.amazonaws.services.cognitoidentity.model.NotAuthorizedException:此标识池不支持未经身份验证的访问。(服务:Amazon认知身份;状态代码:400;错误代码:NotAuthorizedException; 请帮帮我。 登录过程成功,当我进入Amazon lex聊天机器人窗口时,出现上述错误此身份池不支持未经身份验证的访问。这实际上是有意义的,因为我已取消对我的机器人的未经身份验证的访问,因此我知道,没有身份验证,任何

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

请帮帮我。 登录过程成功,当我进入Amazon lex聊天机器人窗口时,出现上述错误此身份池不支持未经身份验证的访问。这实际上是有意义的,因为我已取消对我的机器人的未经身份验证的访问,因此我知道,没有身份验证,任何用户都不允许与之交互莱克斯聊天机器人。但是现在我的登录成功了,我仍然有这个错误

我的问题是,我们是否需要维护已登录的用户会话?如果需要,我如何维护


如何将登录链接到Cognito身份验证。当身份池禁用了未经身份验证的访问,并且在应用程序的登录映射中找不到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
//相关导入

导入com.amazonaws.auth.CognitoCachingCredentialsProvider; 导入com.amazonaws.regions.regions; //初始化凭据提供程序
CognitoCachingCredentialsProvider credentialsProvider=新CognitoCachingCredentialsProvider( getApplicationContext(), “身份\u池\u ID”, 美国东部地区1 ); //创建登录映射 Map logins=new HashMap(); logins.put(“www.amazon.com”,“使用亚马逊代币登录”); //设置登录映射 credentialsProvider.setLogins(登录名); credentialsProvider.getCredentials(); //使用credentialsProvider作为构造函数中的参数为AWS服务创建客户端
在上面的示例中,我假设使用了“使用亚马逊登录”。对于不同的提供商,请使用适当的令牌更改密钥“www.Amazon.com”。要知道密钥,只需在处解码id令牌并查找iss声明。不带https://的值将是登录映射的密钥

//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

至于将此代码放在何处,请检查它是否在任何位置使用
CognitoCachingCredentialsProvider
对象,然后向其添加登录映射。要方便地刷新凭据,请调用
refresh()
method

当身份池禁用了未经身份验证的访问,并且在应用程序的登录映射中找不到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
//相关导入

导入com.amazonaws.auth.CognitoCachingCredentialsProvider; 导入com.amazonaws.regions.regions; //初始化凭据提供程序
CognitoCachingCredentialsProvider credentialsProvider=新CognitoCachingCredentialsProvider( getApplicationContext(), “身份\u池\u ID”, 美国东部地区1 ); //创建登录映射 Map logins=new HashMap(); logins.put(“www.amazon.com”,“使用亚马逊代币登录”); //设置登录映射 credentialsProvider.setLogins(登录名); credentialsProvider.getCredentials(); //使用credentialsProvider作为构造函数中的参数为AWS服务创建客户端
在上面的示例中,我假设使用了“使用亚马逊登录”。对于不同的提供商,请使用适当的令牌更改密钥“www.Amazon.com”。要知道密钥,只需在处解码id令牌并查找iss声明。不带https://的值将是登录映射的密钥

//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

至于将此代码放在何处,请检查它是否在任何位置使用
CognitoCachingCredentialsProvider
对象,然后向其添加登录映射。要方便地刷新凭据,请调用
refresh()
method

是的,您不需要维护会话。这可以通过在标识池的登录名中设置有效的id令牌来完成map@agent420你可以发布一些代码来告诉我如何设置id和位置。我对这个概念不熟悉。请帮助我。是的,你不需要维护会话。这可以通过在身份po中设置有效的id令牌来完成ol登录map@agent420你能发布一些代码告诉我如何设置id和位置吗?我对这个概念不熟悉。请帮助我。非常感谢。你为我节省了很多时间。你能不能再告诉我一件事?为什么你使用CognitocChingCredentialsProvider而不仅仅是CognitorCredentialsProviderCognitocChingCredentialsProvider是一个子类CognitoCredentialsProvider的ss,它添加了一些功能,比如在共享引用中持久化Cognito id,缓存会话凭据以减少网络请求等等。非常感谢。你为我节省了很多时间。你能不能再告诉我一件事?你为什么使用CognitoCachingCredentialsProvider而不仅仅是CognitoCredentialsProviderCognitoCachingCredentialsProvider是CognitoCredentialsProvider的一个子类,它添加了一些特性,如在共享引用中持久化Cognito id、缓存会话凭据以减少网络请求等。