如何使用 Firebase Auth 作为 OIDC 向 Amplify GraphQL 发出经过身份验证的请求?

问题描述 投票:0回答:2

我需要设置 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"
。此外,当我尝试获取数据时,我确实在授权标头中看到了令牌。

javascript react-native firebase-authentication amazon-cognito aws-amplify
2个回答
2
投票

我也遇到过类似的问题,所以这里有一些你可以看一下。

在 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

这里:https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html?icmpid=docs_ddb_console


0
投票

尝试删除 aws-exports.js 中的 cookie 存储配置可能会解决。

更多讨论请参见此处 Link-1Link-2

© www.soinside.com 2019 - 2024. All rights reserved.