我需要设置 Firebase Auth + Amplify GraphQL 方面的帮助。我正在尝试使用以
securetoken.google.com/PROJECT-ID
作为提供者的联合签名进行登录,并且似乎可以正常登录,因为当我调用 Auth.currentAuthenticatedUser()
时,我获得了令牌,并且在监听 Hub "signIn"
事件时,我获得了令牌。我的问题是向我的 GraphQL API 发出经过身份验证的请求。
const signIn = async () => {
try {
// already logged in using firebase so I just need to get the token from the current user
const tokenResult = await currentUser?.getIdTokenResult()
await Auth.federatedSignIn('securetoken.google.com/PROJECT-ID', {
token: tokenResult?.token,
})
const res = await Auth.currentAuthenticatedUser()
console.log('token', res.token) // eyjhxxxxxxxxxx...
} catch (error) {
// ...
}
}
const client = new AWSAppSyncClient({
url: AppSyncConfig.aws_appsync_graphqlEndpoint,
region: AppSyncConfig.aws_appsync_region,
auth: {
type: AppSyncConfig.aws_appsync_authenticationType,
jwtToken: () => getToken(),
},
})
const getToken = async () => {
const token = await Cache.getItem('@accessToken')
return token
}
打电话时
Auth.currentSession()
我得到"No current user"
。此外,当我尝试获取数据时,我确实在授权标头中看到了令牌。
我也遇到过类似的问题,所以这里有一些你可以看一下。
在 AWS 控制台的 Appsync 中
https://eu-west-1.console.aws.amazon.com/appsync/home
确保您的主要授权模式设置为 Open Id Connect,或者如果您对主要授权模式感到满意,请添加另一个指定“OpenId Connect”的授权提供商。
@aws_oidc
AppSync 指令添加到您的 GraphQL 架构中。
type Query {
getPosts:[Post!]! @aws_oidc
}
或
type Post
@model
@auth(
rules: [
{ allow: owner, provider: oidc }
...
更多信息:https://aws.amazon.com/blogs/mobile/graphql-security-appsync-amplify/
最后,如果您有多个授权提供程序,您可能必须将主要授权提供程序切换为“OpenId Connect” - 我遇到的问题是 Cognito(主要)阻止了我的辅助 API 密钥授权提供程序。
更新
AWS 使用 IAM 角色来处理与安全相关的所有事务。因此,当您使用任何身份验证提供商进行身份验证时,IAM 角色将分配给该请求,并且该 IAM 角色需要相关资源的权限,例如 GraphQL 查询的执行权限、扫描 DynamoDB 表等,如下图所示:
因此,您可能需要在 IAM 控制台中为相关 IAM 角色设置特定规则 - 或者至少检查它是否具有权限 - 如果没有,您还会在 Appsync GraphQL 查询控制台中收到未经授权的错误消息。
更多信息:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WIF.html?icmpid=docs_ddb_console