在邮递员中获取Firebase访问令牌

在邮递员中获取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中,然后在

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

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

对于这个问题,我有两种解决方案:

1) 在postman中从firebase获取访问令牌,并将该访问令牌存储在postman global env中。变量,然后我可以执行其他API请求。(这里我不知道如何在邮递员中获取访问令牌)


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

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

  • 在目录中创建html文件
  • 在html文件中复制
  • 替换firebase-app.js和firebase-auth.js,如中所述,将它们指向web上正确的cdn位置
  • 将firebase.init脚本替换为控制台上应用程序的初始化代码,如下所示:
  • 在浏览器中打开html文件,然后登录或注册。应显示Firebase auth currentUser对象值

  • 检查html并展开quickstart account details元素。这将显示json对象

  • 复制accessToken的内容

  • 在“邮递员转到授权”中,选择承载令牌并将复制的令牌粘贴到令牌值字段中

  • 您现在应该能够调用由firebase auth保护的API。请记住,这只获取并传递访问令牌,因此一旦令牌过期,您可能需要请求一个新的令牌(步骤5到8)

    您还可以查看

    希望这有帮助

    当您只想使用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=)执行任何您想要的操作我遇到了这样一种需要,即暂存和生产环境需要不同的FIREBASE
    idToken
    ,但本地不使用。我扩展了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 
    });