从前端向授权服务器请求Firebase令牌失败

时间:2018-10-26 03:20:50

标签: firebase express authentication vue.js auth0

我有一个VueJS应用程序,该应用程序允许用户使用Firebase实时数据库中的数据登录并查看特权页面。用户通过localhost:8080上的auth0登录前端后,我很难连接到localhost:8081上的Express服务器以获取自定义Firebase令牌。

登录由auth0处理。打电话后

auth.authorize({...})

执行回调函数:

handleCallback() {
    auth.parseHash({ hash: window.location.hash }, (err, authResult) => {
        if (authResult && authResult.accessToken) {
            localStorage.setItem(ACCESS_TOKEN_KEY, authResult.accessToken);
            localStorage.setItem(ID_TOKEN_KEY, authResult.idToken);
            window.location.href = '/';
            this.getFirebaseToken(authResult);
        } else if (err) {
            console.warn(err);
        }
    });
},

在jwt.io上检查令牌表明,访问令牌和id令牌几乎相同(标头,大多数有效负载字段),除了以下有效负载方面的差异:

  1. "aud"

    • 访问令牌具有一个数组(不确定第二个源于...)["https://myapp.au.auth0.com/api/v2/","https://myapp.au.auth0.com/userinfo"]
    • Id令牌的aud是一个奇怪的字符串"nqy5aw2McWTpK6PYZ8nKi6zzaSsMRAn7"
  2. 访问令牌具有一个"azp"字段,id具有"at_hash""nonce"

然后,我尝试将用户连接到我的快速服务器以获取自定义令牌。

xhr请求:

getFirebaseToken(resultObject) {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', 'http://localhost:8081/auth/firebase', true);
    xhr.setRequestHeader('Authorization', `Bearer ${resultObject.accessToken}`);
    xhr.onload = () => {
        console.log(JSON.parse(xhr.response));
    };
    xhr.send();
},

服务器代码:

app.get('/auth/firebase', jwtCheck, (req, res) => {
    const uid = req.user.sub;
    firebaseAdmin.auth().createCustomToken(uid)
    .then(customToken => {
        console.log(customToken);
        res.json({ firebaseToken: customToken });
    })
    .catch(err => {
        res.status(500).send({
            message: 'Something went wrong in acquiring a Firebase token',
            error: err,
        })
    })
});

这时,由于出现一系列错误,我无法继续进行Firebase自定义登录。

从前端的“网络”选项卡显示此xhr请求的状态为'canceled'。控制台中也存在未捕获的错误。

节点服务器说“ jwt听众无效,预期http://localhost:8081/”。

在auth0仪表板中,https://myapp.au.auth0.com, http://localhost:8080, http://localhost:8081设置为“允许的Web起源”,以及前端和后端的“允许的起源”(cors)。

对调试方法的建议表示赞赏。

编辑:在Firefox上,存在以下几种错误:

1。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://192.168.1.13:8080/sockjs-node/info?t=1540524441491. (Reason: CORS request did not succeed).[Learn More]

2。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://myapp.au.auth0.com/userinfo. (Reason: CORS request did not succeed).[Learn More]
[Show/hide message details.] Error: app.js line 3245 > eval:127:19

3。

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://localhost:8081/auth/firebase. (Reason: CORS request did not succeed).[Learn More]

0 个答案:

没有答案