在POSTMAN中获取Firebase访问令牌

时间:2018-04-20 05:37:17

标签: firebase firebase-authentication postman

在我的网络应用程序中,我使用Firebase进行身份验证,访问任何API,我必须从firebase进行身份验证。

问题: 如何在Postman中获取firebase的访问令牌?

我有2个解决此问题的方法:

1)从邮递员的firebase获取访问令牌,在邮递员全局环境中存储访问令牌。变量然后我可以做其他API请求。 (这里我不知道如何在邮递员中获得访问令牌)

2)在浏览器中登录,从网络请求中复制访问令牌,将其存储在bash_profile中,然后在Postman中使用它。 (这里我不知道如何阅读OS env.variable)

6 个答案:

答案 0 :(得分:4)

从firebase检索访问令牌的简单方法是:

  1. 在目录中创建html文件
  2. 在html文件中复制firebase auth quickstart的内容
  3. 按照firebase web setup中的说明替换firebase-app.js和firebase-auth.js,以将其指向网络上正确的CDN位置
  4. 使用控制台上应用程序的初始化代码替换firebase.init脚本,如下所示:

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);

  1. 在浏览器中打开html文件,然后登录或注册。应该显示Firebase auth currentUser对象值。

    1. 检查html并展开quickstart-account-details元素。这应该显示json对象。

    2. 复制accessToken的内容

    3. 在邮递员中进行授权,选择不记名令牌,然后将复制的令牌粘贴到令牌值字段中。

您现在应该可以调用受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)

除了naptoon's post

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}}'})