在我的网络应用程序中,我使用Firebase进行身份验证,访问任何API,我必须从firebase进行身份验证。
问题: 如何在Postman中获取firebase的访问令牌?
我有2个解决此问题的方法:
1)从邮递员的firebase获取访问令牌,在邮递员全局环境中存储访问令牌。变量然后我可以做其他API请求。 (这里我不知道如何在邮递员中获得访问令牌)
2)在浏览器中登录,从网络请求中复制访问令牌,将其存储在bash_profile
中,然后在Postman中使用它。 (这里我不知道如何阅读OS env.variable)
答案 0 :(得分:4)
从firebase检索访问令牌的简单方法是:
var config = { apiKey:“我的秘密api密钥”, authDomain:“ myapp.firebaseapp.com”, databaseURL:“ https://myapp.firebaseio.com”, projectId:“ myapp-bookworm”, storageBucket:“ myapp.appspot.com”, messagesSenderId:“ xxxxxxxxxxxxx” }; firebase.initializeApp(config);
在浏览器中打开html文件,然后登录或注册。应该显示Firebase auth currentUser对象值。
检查html并展开quickstart-account-details元素。这应该显示json对象。
复制accessToken的内容
在邮递员中进行授权,选择不记名令牌,然后将复制的令牌粘贴到令牌值字段中。
您现在应该可以调用受Firebase身份验证保护的api。请记住,这只会获取和传递访问令牌,因此一旦令牌过期,您可能需要请求一个新的令牌(步骤5至8)
您还可以查看this
希望这会有所帮助!
答案 1 :(得分:3)
当您只想使用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_KEY(它是Web-API密钥)。
作为响应,您将获得一个JSON对象,idToken
是所有API请求所需的令牌,作为Bearer令牌。
要对此令牌进行自动设置,可以在身份验证请求的“测试”标签中添加以下代码:
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
对于所有API请求,您都应将“授权”设置为Bearer Token
,令牌的值为{{id_token}}
。
现在,一旦您执行auth请求并获得响应,令牌将被自动使用。
答案 2 :(得分:2)
let jsonEncoder = JSONEncoder()
let file: Data
do {
file = try jsonEncoder.encode(pets)
} catch {
return
}
// Do whatever you need with file
print(file)
这是“旧样式”,即deprecated by Postman。 “新样式”是:
var jsonData = JSON.parse(responseBody);
postman.setGlobalVariable("id_token", jsonData.idToken);
答案 3 :(得分:1)
转到请求前脚本并添加此代码(使用您的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
});
此代码将添加环境变量FIREBASE_TOKEN
,但您可以使用idToken =)做任何您想做的事情
答案 4 :(得分:1)
我遇到了需要这样做的情况,其中登台和生产环境需要不同的Firebase dependencies {
implementation project(':ProjectB')
}
,但是本地不使用Firebase idToken
。我扩展了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())
})
访问令牌在给定的环境中最多缓存20分钟(我尚未实现刷新令牌)。如果环境与上一个请求不同或发生错误,则清除令牌。
答案 5 :(得分:0)
复制以下代码块并将其放在 Postman 上请求的“预请求脚本”选项卡中。每次发出请求时,它都会自动获取令牌并将其作为“授权”标头。您无需手动添加任何标头或授权。您甚至无需担心令牌过期。
显然,替换应用 api 密钥、用户名和密码占位符。
const postRequest = {
url: 'https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyPassword?key={APP_API_Key}',
method: 'POST',
header: {
'Content-Type': 'application/json'
},
body: {
mode: 'raw',
raw: JSON.stringify({
"email": "{Your_Email}",
"password": "{Your_Password}",
"returnSecureToken": true
})
}
};
pm.sendRequest(postRequest, (error, response) => {
var jsonData = response.json();
pm.globals.set("id_token", jsonData.idToken)
});
pm.request.headers.add({key: 'Authorization', value: '{{id_token}}'})