在我的云函数中,我需要创建一个自定义令牌并插入一些自定义声明。我是这样的:
let additionalClaims = {
'https://hasura.io/jwt/claims': {
'x-hasura-default-role': 'admin',
'x-hasura-allowed-roles': ['user', 'admin'],
}
}
admin.auth().createCustomToken(userId,additionalClaims).then(function (customToken) {
console.log(customToken);
response.end(JSON.stringify({
token: customToken
}))
})
.catch(function (error) {
console.log('Error creating custom token:', error);
});
添加了Claims,但是将它们放置在“ claims”节点中,如下所示:
{
"aud":
"https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iat": 1573160781,
"exp": 1573164381,
"iss": "postgrest-b4c8c@appspot.gserviceaccount.com",
"sub": "postgrest-b4c8c@appspot.gserviceaccount.com",
"uid": "mikeuserid",
"claims": {
'https://hasura.io/jwt/claims': {
'x-hasura-default-role': 'admin',
'x-hasura-allowed-roles': ['user', 'admin'],
}
}
}
}
但是,我正在调用的API希望它们在根中,如下所示:
{
"aud":
"https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
"iat": 1573160781,
"exp": 1573164381,
"iss": "postgrest-b4c8c@appspot.gserviceaccount.com",
"sub": "postgrest-b4c8c@appspot.gserviceaccount.com",
"uid": "mikeuserid",
"https://hasura.io/jwt/claims": {
"x-hasura-default-role": "admin",
"x-hasura-allowed-roles": ["user", "admin"],
}
}
}
如何添加声明,以便将它们添加到根目录中,而不是添加到“声明”下?
仅供参考,如果我已有用户,请使用以下语法 admin.auth()。setCustomUserClaims(customToken,AdditionalClaims)
它正确地将它们添加为root。
答案 0 :(得分:1)
您不能将声明添加到Firebase自定义令牌的顶层(根)。您也不应将自定义令牌传递给其他API。它们仅应用于从客户端设备启动登录。登录操作将用JWT根上的自定义声明将自定义令牌交换为ID令牌。
使用setCustomUserClaims()
添加声明时,通常不会涉及自定义标记。用户从Firebase Auth接收到ID令牌,而自定义声明已在根节点设置。