我有一个AWS AppSync API,它使用IAM角色进行身份验证。我正在使用Amplify GraphQL客户端连接到AppSync服务器。下图描述了获取IAM凭据所需的步骤,我假设Amplify能够执行这些步骤。但是,我找不到任何关于如何建立工作示例的文档。
请注意,我直接使用Cognito用户池进行身份验证,而不是像Google或Facebook这样的外部提供商。
到目前为止,我能够对用户进行身份验证并获得JWT令牌(步骤1):
const Amplify = require('aws-amplify').default
const { Auth } = require('aws-amplify')
Amplify.configure({
Auth: {
region: process.env.AWS_REGION,
userPoolId: process.env.COGNITO_USERPOOL_ID,
userPoolWebClientId: process.env.COGNITO_WEBCLIENT_ID,
},
})
Auth.signin(username, password)
.then((user) => {
const token = user.idToken.jwtToken
// I've got the token - what next?
})
如何从标识池请求IAM凭据(步骤2),并使用它们使用Amplify访问AppSync API(步骤3)?
如果Amplify本身无法获取凭据,我可以使用AWS。CognitoIdentityCredentials使用AWS SDK请求它们,但是,我看不到传递它们以放大API请求身份验证的方法(有关更多详细信息,请参阅我创建的本期)。
如果您的放大器配置具有AWS_IAM身份验证的AppSync API和认知用户池,放大器将使用id令牌自动获取AWS凭据。
要实际调用AppSync API,只需执行以下操作:
API.graphql({query})
我能够使用认知来验证我的客户端,然后将jwtToken传递给AWS-APPSYNC客户端,以便能够将APPSYNC与AMAZON_COGINITO_USER_POOLS一起使用。在代码中,您还将看到我使用API_KEY作为替代。我离开了API_KEY评论了。我分享这一点,作为那些也想尝试与阿波罗客户端和AWS-APPESNC访问的替代方案。
if (!process.browser) {
global.fetch = require('node-fetch')
}
const appSyncClientOptions = {
url: awsConfig.aws_appsync_graphqlEndpoint,
region: awsConfig.aws_appsync_region,
auth: {
// type: 'API_KEY',
// apiKey: awsConfig.aws_appsync_apiKey,
type: awsConfig.aws_appsync_authenticationType, // 'AMAZON_COGNITO_USER_POOLS'
jwtToken: async () => (await Auth.currentSession()).getAccessToken().getJwtToken()
},
disableOffline: true,
};
const apolloClientOptions = {
link: createAppSyncLink({
...appSyncClientOptions,
resultsFetcherLink: createHttpLink({ uri: appSyncClientOptions.url, fetch })
})
};
const client = new Client(appSyncClientOptions, apolloClientOptions);
const WithProvider = () => (
<ApolloProvider client={client}>
<Rehydrated>
<GqlList />
</Rehydrated>
</ApolloProvider>
)
export default WithProvider;
我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好。 在Lambda中,我从中的获得名称: 在Cognito标识符的字符串名称中返回的是什么。像这样的东西: us-east-1:xxxxe650-5
应用程序是由angular开发的。 首先,用户应该使用Cognito登录。因此,在用户登录后,应用程序将获得CognitoUser数据,如其id令牌、访问密钥和会话令牌。 然后应用程序将开始连接到Iot Core,并尝试订阅或发布数据到我想要的主题。但我总是遇到Mqtt立即断开连接的情况。 以下是我的连接代码: 在运行代码之前,我还运行以下命令:
当我使用带有固定连接提供者的TCP客户端时,我不能重用连接。 他们使连接超过maxConnection变量。 这是我写的。 即使我使用10个maxConnection,比如“ConnectionProvider”。固定(“测试”,10)”,有22个空闲连接。天啊 //NettyClient.java //NettyClientTest。Java语言 14:55:27.397[reactor-tcp
Tomcat在使用后不释放连接的原因可能是什么? 这是我的配置
我使用的是spring-webflux-5.2.8。释放,此操作“正常”: 返回错误时,不会出现任何问题,因为连接已被破坏,并且不会放回连接池: 调试r.n.resources。PooledConnectionProvider-[id:0xa23f78ad,L:/127.0.0.1:7524!R:localhost/127.0.0.1:8443]通道已关闭,现在有0个活动连接和0个非活动连接 但当
我有一个Lambda函数来处理由API网关触发的POST请求。后者设置为通过Cognito用户池授权器进行授权。授权有效-如果我传递了一个用户的ID令牌,请求就会被处理,如果我不传递,我就会得到一个401。 但是,我无法在Lambda函数中获取授权用户的身份。所有的文档都让我相信它应该在上下文中,但它不是。我也无法将它映射到上下文中。此外,似乎也没有一种方法可以查询给定ID令牌的用户的用户池。 我