当前位置: 首页 > 知识库问答 >
问题:

express js:Google-auth-library id-token验证“令牌使用过晚number > number ...”

东方谦
2023-03-14

我尝试为我的reactjs/Expresjs Web应用程序添加google auth login。在前端,我使用react-google-login包:

import React from "react"
import { GoogleLogin } from "react-google-login"
import { useHistory } from "react-router-dom"

const axios = require('axios')

export default function LoginButton() {
    let history = useHistory()
    const { REACT_APP_GOOGLE_CLIENT_ID, REACT_APP_API_URL } = process.env

    const onSuccess = async (response) => {
        console.log(response)
        const data = { token: response.tokenId }
        const res = await axios.post(REACT_APP_API_URL + "/auth/google", data, {
            'Content-Type' : 'text/json'
        })
            .then((res) => {
                history.push('/home')
            })
            .catch((err) => {
                console.log("[LOGIN FAILED]")
            })
    }

    const onFailure = (response) => {
        console.log(response)
    }
    return(
        <GoogleLogin 
            clientId={REACT_APP_GOOGLE_CLIENT_ID}
            buttonText="Log in with Google"
            onSuccess={onSuccess}
            onFailure={onFailure}
            cookiePolicy={'single_host_origin'}
        />
    )
}

从看起来,我从这个按钮上获得了正确的数据。我正在将令牌发送到快递应用程序接口。这是我遇到问题的地方。当使用谷歌身份验证库验证令牌时,我收到错误:“错误:令牌使用得太晚,number_1

const { OAuth2Client } = require('google-auth-library')
require('dotenv').config()
const client = new OAuth2Client(process.env.CLIENT_ID)


const postGoogleLogin = async (req, res) => {
    const { token } = req.body
    try{
        const ticket = await client.verifyIdToken({
            idToken: token,
            audience: process.env.CLIENT_ID
        })
        
        const { name, email, picture } = ticket.getPayload()

        res.status(201).json({
            name: name,
            email: email,
            picture: picture
        })
    }
    catch(e){
        console.log(e)
    }   
}

我已经尝试使用endpointhttps://oauth2.googleapis.com/tokeninfo?id_token=XYZ123来验证该令牌,它表明该令牌是有效的,但据我所知,该endpoint不应用于生产中

共有1个答案

邹铭
2023-03-14

问题似乎出在图书馆本身。只要您在React和ExpressJs上使用相同的客户端id,只要令牌仍然有效,verifyIdToken就应该返回成功响应。

此外,您可以利用https://oauth2.googleapis.com/tokeninfo?id_token=XYZ123在生产代码中。

在内部,库调用相同的endpoint来验证您的令牌。

 类似资料:
  • 如果用户服务器启用了或,我可以请求该用户帐户(

  • 我有点困了,还没有找到解决办法。我有一个rails站点,它的前端使用designe,api使用designe\u token\u auth。前端使用服务器端呈现页面和api调用的组合向用户显示数据。如果我使用纯角度登录,登录表单最终会起作用(ushally 2-3提交): 如果我使用标准的post方法,服务器会呈现正确的信息,但没有为ng token auth设置令牌。我可以使用以下方法在会话#创

  • 是否可以使用Firestore安全规则中的Firebase安装令牌? 如何验证FIS auth令牌?它们应该如何使用?

  • 通过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者 可以全局设置开启令牌验证: <!--随机token令牌,使用UUID生成--> <dubbo:provider interface="com.foo.BarService" token="true" /> 或 <!--固定token令牌,

  • 请帮助使用firebase身份验证在云运行中进行最终用户身份验证。 更多详情: 我有一个简单的firebase应用程序与电子邮件/密码firebase认证。当user1(比如test@test.com)使用电子邮件/密码进行身份验证时,我使用firebase.user.getidtoken()为该用户获取Id令牌,并将其提交给firebase函数。 在firebase函数端,我提取用户令牌并将其作

  • 问题内容: 我在CSRF令牌方面遇到问题。当我提交表单时,正在生成一个新的表单,但是我想我正在生成两个不同的令牌,这有点困惑。还有一个名为的令牌,因此我在开发人员工具中看到了两个不同的cookie(XSRF- TOKEN和_csrf),发布后它们没有变化。 我想要做的是为每个帖子请求生成一个新令牌,并检查它是否有效。我知道为了安全起见应该这样做,但是我坚持了下来。 漫长的一天,我是Express和