Far*_*han 4 firebase postman firebase-authentication
在我的Web应用程序中,我使用Firebase进行身份验证,要访问任何API,都必须从firebase进行身份验证。
问题: 如何在Postman中获取firebase的访问令牌?
我有2个解决此问题的方法:
1)从邮递员的firebase中获取访问令牌,并将该访问令牌存储在邮递员全局环境中。变量,然后我可以执行其他API请求。(这里我不知道如何在邮递员中获取访问令牌)
2)在浏览器中进行登录,从网络请求中复制访问令牌,将其存储bash_profile在邮递员中,然后使用它。(这里我不知道如何读取操作系统环境变量)
小智 62
当您只想使用 Postman 而不想构建前端时,您可以在 Postman 中使用此身份验证请求: POST https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={API_KEY}
在正文中,您应该发送以下 JSON 字符串:
{"email":"{YOUR_EMAIL_ADDRESS}","password":"{PASSWORD}","returnSecureToken":true}
Run Code Online (Sandbox Code Playgroud)
内容类型是 application/json(将在 Postman 中自动设置)。您可以在 Firebase 项目设置中找到 Firebase API_KEY(它是 Web-API 密钥)。
作为响应,您将获得一个 JSON 对象,这idToken是您的所有 API 请求所需的令牌作为不记名令牌。
要对此令牌进行自动设置,您可以在身份验证请求的“测试”选项卡中添加以下代码:
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
Run Code Online (Sandbox Code Playgroud)
对于您的所有 API 请求,您应该将授权设置Bearer Token为 并且令牌的值为{{id_token}}。
现在,一旦您执行身份验证请求并获得响应,将自动使用令牌。
转到预请求脚本并添加此代码(使用您的API_KEY, USER_EMAIL, USER_PASSWORD)
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
});
Run Code Online (Sandbox Code Playgroud)
这段代码将添加环境变量FIREBASE_TOKEN,但你可以用 idToken 做任何你想做的事=)
从Firebase检索访问令牌的简单方法是:
var config = {apiKey:“我的秘密api密钥”,authDomain:“ myapp.firebaseapp.com”,databaseURL:“ https://myapp.firebaseio.com ”,projectId:“ myapp-bookworm”,storageBucket:“ myapp。 appspot.com”,messagementSenderId:“ xxxxxxxxxxxxx”};firebase.initializeApp(config);
在浏览器中打开html文件,然后登录或注册。应该显示Firebase auth currentUser对象值。
检查html并展开quickstart-account-details元素。这应该显示json对象。
复制accessToken的内容
在邮递员去授权中,选择承载令牌并将复制的令牌粘贴到令牌值字段中。
您现在应该可以调用受Firebase身份验证保护的api。请记住,这只会获取和传递访问令牌,因此一旦令牌过期,您可能需要请求一个新的令牌(步骤5至8)
您也可以看看这个
希望对您有所帮助!
另外naptoon的帖子:
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
Run Code Online (Sandbox Code Playgroud)
这是“旧风格”,已被 Postman 弃用。“新风格”是:
pm.environment.set("id_token", pm.response.json().idToken);
Run Code Online (Sandbox Code Playgroud)
我遇到了需要执行此操作的情况,其中登台和生产环境需要不同的 Firebase idToken,但本地不使用 Firebase。我扩展了naptoon和leo的答案,以使用identitytoolkit的verifyPassword端点作为预请求的一部分:
const apiKey = pm.environment.get('api_key');
if ( ! apiKey) {
return
}
const tokenEnv = pm.environment.get('token_env')
if (tokenEnv && tokenEnv === pm.environment.name) {
const tokenTimestamp = Number.parseInt(pm.environment.get('token_timestamp'), 10)
const elapsed = Date.now() - tokenTimestamp
if (elapsed < 20 * 60000) {
return
}
}
pm.sendRequest({
url: `https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key=${apiKey}`,
method: 'POST',
header: {
'Content-Type': 'application/json',
},
body: {
mode: 'raw',
raw: JSON.stringify({
email: pm.environment.get('auth_username'),
password: pm.environment.get('auth_password'),
returnSecureToken: true,
}),
},
}, function (err, res) {
let json
if ( ! err) {
json = res.json()
if (json.error) {
err = json.error
}
}
if (err) {
pm.environment.unset('auth_token')
pm.environment.unset('token_env')
pm.environment.unset('token_timestamp')
throw err
}
pm.expect(json.idToken).to.not.be.undefined
pm.environment.set('auth_token', json.idToken)
pm.environment.set('token_env', pm.environment.name)
pm.environment.set('token_timestamp', Date.now())
})
Run Code Online (Sandbox Code Playgroud)
给定环境的访问令牌最多可缓存 20 分钟(我尚未实现刷新令牌)。如果环境与上次请求不同或发生错误,则清除令牌。
| 归档时间: |
|
| 查看次数: |
2003 次 |
| 最近记录: |