我试图遵循本指南authenticating_from_a_service_account(本指南没有Node.js示例,并且与Firebase函数无关)和其他指南,以便允许Firebase函数访问以下站点上的另一个应用程序/ API: IaP背后的GCE,需要授权的JWT。 我尝试了几种方法和方法,这些方法和方法都失败了并且不起作用。
方法1 -使用googleapis auth lib和'auth.getClient()'-我在提供该功能时设法在本地工作,此方法在本地返回我可以提供“ additionalClaims”(具有“ target_audience”属性)的JWT对象,然后使用提供JWT的“ auth.authorize()”(在本地工作)。但是当我将其部署到Firebase时,该函数将获得一个Compute对象而不是JWT,该对象没有默认的凭据和'authorize()'方法。
方法2 -使用来自身份验证库的firebase admin SDK和JWT -因此,我尝试直接使用JWT库(来自“ google-auth-library”)需要电子邮件和密钥。同样,在本地工作,我使用admin.credential.applicationDefault()来获取clientEmail和privateKey并创建“新JWT”,然后使用“ authorize()”方法来获取JWT。部署功能时,“ admin.credential.applicationDefault()”不提供凭据,因此不起作用。
方法3 -使用管理SDK自定义令牌-我还尝试使用Firebase管理SDK创建自定义令牌('admin.auth()。createCustomToken')并同时提供“ additionalClaims”,但使用此JWT时,我无法访问IaP,这可能是因为admin SDK的const作用域为“ google.identity.identitytoolkit.v1.IdentityToolkit”,并且我需要使用“ target_audience”创建令牌。
我猜想,如果我将使用该功能部署我的凭据.json文件,它将起作用,但是似乎不是最佳实践,而且我不知道它是否安全。显然,该功能可以访问这些凭据,但我找不到方法。
任何人都可以为上述问题提供解决方案,或者提出其他可行的方法吗?
谢谢。