我想使用firebase auth来保护我的AWS AppSync graphql api,而不是像Cognito之类的东西。诸如价格之类的价格背后有多个原因,而我们已经在使用其他Firebase服务。
我能看到的atm唯一可行的解决方案是以某种方式将firebase用户令牌传递给我的AppSync graphql api,并通过OpenID Conneect / OIDC对其进行验证。
我无法弄清楚这一点,也找不到关于该主题的任何指南,因此想在这里问是否有可能,如果可以,是否可以提供任何示例,或者可以使用完整的参考文献?
这是需要根据OpenID连接数据向AppSync提供的相关字段https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-appsync.OpenIdConnectConfig.html
这些是否存在用于Firebase身份验证?
更新:我能够找到一些有关Firebase令牌验证的文档 https://firebase.google.com/docs/auth/admin/verify-id-tokens#verify_id_tokens_using_a_third-party_jwt_library
我相信以下URL是需要在AppSync https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com中用作OpenID url设置的内容
但是AppSync文档指出,它们会附加/.well-known/openid-configuration
到此类网址,而当我将其附加到上述googleapis网址时,它会抛出404。
AppSync需要一个OpenID Connect Provider(OP)。更具体地说,它希望OP的发行人;其余的元数据将基于此进行检索。从AppSync文档中:
OPENID_CONNECT授权
此授权类型将强制执行由OIDC兼容服务提供的OpenID Connect(OIDC)令牌。你的应用程序可以利用OIDC提供程序定义的用户和特权来控制访问。
一个
Issuer
URL是唯一需要的配置值,你提供给AWS的AppSync(例如https://auth.example.com
)。此URL必须可通过HTTPS寻址。AWS AppSync会附加/.well-known/openid-configuration
到颁发者URL并https://auth.example.com/.well-known/openid-configuration
根据OpenID Connect Discovery规范找到OpenID配置
Firebase(主要是)中间件。即使你可以将用户帐户驻留在Firebase中,但更典型的用例是将某些提供程序(例如Google或Microsoft)插入Firebase。然后,你可以使用Firebase API执行各种操作,而不必了解基础提供程序的详细信息。
无论是充当中间件还是与Firebase中的用户一起使用身份存储,都不清楚Firebase是否是符合OIDC的提供商。OpenID发布OIDC一致性测试以及已通过认证的实体。后一个列表中唯一的Google实体是“ Google联合身份”。除了认证,Firebase确实签发了一个签名的JWT,根据其道德上等同id_token
于OIDC:
ID令牌验证
如果你的Firebase客户端应用程序与后端服务器通信,则可能需要在服务器上标识当前登录的用户,以便你可以代表他们执行服务器端逻辑。你可以使用ID令牌安全地执行此操作,ID令牌是在用户登录Firebase应用程序时由Firebase创建的。
ID令牌符合OpenID Connect规范,并包含用于标识用户的数据以及一些其他与配置文件和身份验证有关的信息。你可以从自己的后端发送,验证和检查这些令牌。这使你可以安全地标识当前登录的用户,并将其授权到你自己的后端资源中。
如果你创建Firebase项目,然后通过该项目进行身份验证并检查已颁发的令牌,则会iss
在令牌有效负载中看到(Issuer)密钥。它的值为,https://securetoken.google.com/<Firebase projectId>
这是AppSync所需的URL。
你可以通过/.well-known/openid-configuration
与https://securetoken.google.com/<Firebase projectId>
结果URL串联并执行GET来确认OIDC元数据可用。预期的响应应如下所示:
{
"issuer": "https://securetoken.google.com/<Firebase project id>",
"jwks_uri": "https://www.googleapis.com/service_accounts/v1/jwk/securetoken@system.gserviceaccount.com",
"response_types_supported": [
"id_token"
],
"subject_types_supported": [
"public"
],
"id_token_signing_alg_values_supported": [
"RS256"
]
}