“additionalUserInfo.profile”中的自定义提供程序声明无法通过firebase admin获得?
我正在跟踪一个SAML身份提供者。成功登录后,重定向结果包含从提供程序派生的属性:“additionalUserInfo.profile”中的自定义提供程序声明无法通过firebase admin获得?,firebase,firebase-authentication,firebase-admin,Firebase,Firebase Authentication,Firebase Admin,我正在跟踪一个SAML身份提供者。成功登录后,重定向结果包含从提供程序派生的属性: provider=newfirebase.auth.SAMLAuthProvider('saml.testprovider'); firebase.auth().signInWithRedirect(提供程序); ... firebase.auth().getRedirectResult().then(函数(结果){ if(结果凭证){ console.log(result.additionalUserInfo.
provider=newfirebase.auth.SAMLAuthProvider('saml.testprovider');
firebase.auth().signInWithRedirect(提供程序);
...
firebase.auth().getRedirectResult().then(函数(结果){
if(结果凭证){
console.log(result.additionalUserInfo.profile)//自定义提供程序声明,例如,{“provider foo”:“bar”}
}
}
从文档中,同样的值也可以通过
result.user.getIdTokenResult().idTokenResult.claims.firebase.sign\u in\u属性
firebase.登录属性
来自firebase\u管理导入验证
user=auth.get\u用户(uid)
打印(user.custom_声明)#=>无…*提供程序*声明不在此处
print(user.provider_data[0])#=>有'federatedId'和其他一些,但仍然没有自定义提供程序声明
有没有办法在admin SDK中获取此信息?有没有办法知道它是否由Firebase保存?我是否需要在firestore中捕获它(这不是很危险,因为用户可能会伪造来自提供商的声明?)
谢谢!附加SAML属性仅保留在令牌声明中,可通过以下方式访问:
result.user.getIdTokenResult().idTokenResult.claims.firebase.sign\u in\u属性
它们未存储在用户记录中。出于隐私原因,Identity Platform/Firebase Auth不会在存储中保留其他用户信息
但是,您始终可以通过AdminSDK将所需的声明存储在记录中。
您将向服务器发送ID令牌,验证它,解析您需要的声明,并在用户记录上设置它们
下面是通过Node.js Admin SDK获得的示例
app.post('/saveUserClaims', (req, res) => {
// Get the ID token passed.
const idToken = req.body.idToken;
admin.auth().verifyIdToken(idToken)
.then(function(decodedToken) {
const uid = decodedToken.uid;
// ...
const samlClaims = decodedToken.firebase.sign_in_attributes;
// You would filter the claims as there could be too many.
// You can also save these claims in your database, etc.
return admin.auth().setCustomUserClaims(uid, samlClaims)
.then(() => {
res.status(200).end();
});
}).catch(function(error) {
// Handle error
});
});
也就是说,通常不需要保存这些声明,因为它们在ID令牌中始终可用,您可以从安全规则中访问它们,或者在您将ID令牌传递给服务器进行验证时访问它们。这是一种更好的方法,因为您不会遇到数据库与用户属性不同步的同步问题utes。谢谢!在我的特殊情况下,管理员端点与一个完全不使用firebase的不同系统接口,我需要将这些声明提供给该系统。我将给您的令牌持久性示例一个旋转。