我正在尝试用amazon kendra测试我的搜索应用程序。我使用了文档中提供的代码->https://docs.aws.amazon.com/kendra/latest/dg/deploying.html.我使用saml2aws从我的机器登录到aws,它生成以下密钥
aws_access_key_id = ***
aws_secret_access_key = ****
aws_session_token = ***
aws_security_token= ***
x_principal_arn=**
x_security_token_expires= **
region= ***
其中,与aws提供的搜索应用程序代码一样,它使用aws-sdk进行身份验证,并使用以下代码,该代码仅使用三个值。当我在配置文件中插入从saml2aws生成的值时,它会抱怨";包括在请求中的安全令牌是无效的";。当我尝试添加上面生成的会话令牌时,它不起作用。在这种情况下,如何传递通过saml2aws登录生成的凭据。
export const Kendra = !hasErrors
? new Kendra({
accessKeyId: config.accessKeyId,
secretAccessKey : ...
region : ..
})
: undefined
初始化Kendra客户端时也请包含会话令牌。您所引用的代码示例仅演示了初始化Kendra客户端的不同方法之一。AWS JS SDK允许您在初始化Kendra客户端时,将更多参数作为选项(sessionToken就是其中之一(传递(请阅读(。如果您的凭据即使在通过sessionToken后也不起作用,那么您很可能遇到了使用过期会话令牌的情况(会话令牌的有效期最长为12小时(。我可以推荐三种可能的方法来解决这个问题:
- 使用长期凭据初始化Kendra客户端
- 你把自己的网络服务器放在用户体验和Kendra之间。后端的这个web服务器可以使用长期有效的凭据来调用Kendra API。这将允许您在用户体验代码中不泄露凭据
- 使用Cognito拨打Kendra服务电话。请参阅Amplify如何帮助您
上述三个选项都应该能够摆脱sessionToken过期限制。