在邮递员中获取Firebase访问令牌
在我的web应用程序中,我使用Firebase进行身份验证,要访问任何API,我必须从Firebase进行身份验证 问题: 如何在Postman中获取firebase的访问令牌? 对于这个问题,我有两种解决方案: 1) 在postman中从firebase获取访问令牌,并将该访问令牌存储在postman global env中。变量,然后我可以执行其他API请求。(这里我不知道如何在邮递员中获取访问令牌)在邮递员中获取Firebase访问令牌,firebase,firebase-authentication,postman,Firebase,Firebase Authentication,Postman,在我的web应用程序中,我使用Firebase进行身份验证,要访问任何API,我必须从Firebase进行身份验证 问题: 如何在Postman中获取firebase的访问令牌? 对于这个问题,我有两种解决方案: 1) 在postman中从firebase获取访问令牌,并将该访问令牌存储在postman global env中。变量,然后我可以执行其他API请求。(这里我不知道如何在邮递员中获取访问令牌) 2) 在浏览器中登录,从网络请求复制访问令牌,将其存储在bash_profile中,然后在
2) 在浏览器中登录,从网络请求复制访问令牌,将其存储在
bash_profile
中,然后在Postman中使用。(这里我不知道如何读取OS env.variable)从firebase检索访问令牌的简单方法是:
希望这有帮助 当您只想使用Postman而不想构建前端时,可以在Postman:
POST中使用此身份验证请求https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={API_KEY}
在正文中,应发送以下JSON字符串:
{"email":"{YOUR_EMAIL_ADDRESS}","password":"{PASSWORD}","returnSecureToken":true}
内容类型为application/json(将在Postman中自动设置)。
您可以在Firebase项目设置中找到Firebase API_密钥(它是Web API密钥)
作为响应,您将得到一个JSON对象,idToken
是所有API请求所需的令牌,作为承载令牌
要自动设置此令牌,您可以根据身份验证请求在“测试”选项卡中添加以下代码:
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
对于所有API请求,应将授权设置为承载令牌
,令牌的值为{{id\u Token}
现在,一旦您执行了auth请求并获得响应,就会自动使用令牌 此外:
这是“旧式”,也就是说。
“新风格”是:
转到预请求脚本并添加此代码(使用API密钥、用户电子邮件、用户密码)
此代码将添加环境变量
FIREBASE\u TOKEN
,但您可以使用idToken=)执行任何您想要的操作我遇到了这样一种需要,即暂存和生产环境需要不同的FIREBASEidToken
,但本地不使用。我扩展了naptoon和leo的答案,将identitytoolkit的verifyPassword端点用作预请求的一部分:
const-apiKey=pm.environment.get('api_-key');
如果(!apiKey){
返回
}
const tokenEnv=pm.environment.get('token\u env'))
if(tokenEnv&&tokenEnv==pm.environment.name){
const tokenTimestamp=Number.parseInt(pm.environment.get('token_timestamp'),10)
const appeased=Date.now()-tokenTimestamp
如果(经过时间<20*60000){
返回
}
}
发送请求({
网址:`https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=${apiKey}`,
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
},
正文:{
模式:“原始”,
raw:JSON.stringify({
电子邮件:pm.environment.get('auth_username'),
密码:pm.environment.get('auth_password'),
returnSecureToken:true,
}),
},
},函数(err,res){
让json
如果(!err){
json=res.json()
if(json.error){
err=json.error
}
}
如果(错误){
pm.environment.unset('auth_token')
pm.environment.unset('token_env'))
unset('token\u timestamp')
失误
}
expect(json.idToken).to.not.be.undefined
pm.environment.set('auth_token',json.idToken)
pm.environment.set('token_env',pm.environment.name)
set('token\u timestamp',Date.now())
})
访问令牌在给定环境中被缓存长达20分钟(我还没有实现刷新令牌)。如果环境与上次请求不同或出现错误,则会清除令牌。复制下面的代码块,并将其放置在邮递员请求的“请求前脚本”选项卡中。每次您发出请求时,它都会自动获取令牌并将其作为“授权”头。您不需要手动添加任何标题或授权。你甚至不需要担心代币到期 显然,替换应用程序api密钥、用户名和密码占位符
const postRequest={
网址:'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={APP_API_Key}',
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”
},
正文:{
模式:“原始”,
raw:JSON.stringify({
“电子邮件”:“{Your_email}”,
“密码”:“{Your_password}”,
“returnSecureToken”:true
})
}
};
pm.sendRequest(postRequest,(错误,响应)=>{
var jsonData=response.json();
pm.globals.set(“id_token”,jsonData.idToken)
});
add({key:'Authorization',value:{{{id_token}}})
我不明白这个问题。如果您的目标是
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
pm.environment.set("id_token", pm.response.json().idToken);
const reqObject = {
url: "https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={API_KEY}", // API_KEY -> your API key from firebase config
method: 'POST',
header: 'Content-Type:application/json',
body: {
mode: 'raw',
raw: JSON.stringify({ "email": {USER_EMAIL}, "password": {USER_PASSWORD}, "returnSecureToken": true })
}
};
pm.sendRequest(reqObject, (err, res) => {
const idToken = res.json().idToken; // your idToken
pm.environment.set("FIREBASE_TOKEN", idToken ); // set environment variable FIREBASE_TOKEN with value idToken
});