获取无效的_令牌&尝试吊销OAuth2访问令牌(Google登录)时令牌已过期或吊销

2024-09-29 21:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Flask&Oauth 2对系统中的用户进行身份验证。用Google登录很好,但是如果我让用户长时间登录,logout就会出现这个错误。在

{
  "error": "invalid_token",
  "error_description": "Token expired or revoked"
}

我不熟悉烧瓶和web开发,不明白为什么会发生这种情况。如果我再次尝试登录,它会显示用户已连接。在

我的登录按钮HTML

^{pr2}$

我的断开连接方法:代码跳转到400错误

# Google Sign out method
@app.route('/gdisconnect')
def gdisconnect():
    access_token = login_session.get('access_token')
    if access_token is None:
        print 'Access Token is None'
        response = make_response(
            json.dumps('Current user not connected.'), 401
        )
        response.headers['Content-Type'] = 'application/json'
        return response
    print 'In gdisconnect access token is %s' % access_token
    print 'User name is: '
    print login_session['username']
    url = 'https://accounts.google.com/o/oauth2/revoke?token=%s' % login_session['access_token']
    print url
    h = httplib2.Http()
    result = h.request(url, 'GET')[0]
    print 'result is '
    print result
    if result['status'] == '200':
        del login_session['access_token']
        del login_session['gplus_id']
        del login_session['username']
        del login_session['email']
        del login_session['picture']
        response = make_response(json.dumps('Successfully disconnected.'), 200)
        response.headers['Content-Type'] = 'application/json'
        return response
    else:
        response = make_response(
            json.dumps('Failed to revoke token for given user.',
                       400)
        )
        response.headers['Content-Type'] = 'application/json'
        return response

Tags: 用户tokenjsonmakeaccessisresponsesession
1条回答
网友
1楼 · 发布于 2024-09-29 21:37:09

您的OAuth访问令牌已过期。您不需要撤消过期的访问令牌。在

解决方案是处理访问令牌的exp(expires at)值。如果令牌已过期,请将其从用户会话中删除。您的代码可以在创建或刷新令牌时保存此值,也可以调用Google端点:https://www.googleapis.com/oauth2/v3/tokeninfo以获取有关令牌的信息,其中包括exp和{}值。注意:此端点还将返回过期令牌的错误,因此在创建或刷新时调用它。在

另一个选择是继续调用revoke,但是如果发生错误,请检查令牌是否已过期。如果为true,则忽略错误,从会话中删除令牌并继续,而不报告问题。在

如果确实要终止客户机的OAuth会话,可以撤消刷新令牌(通常不会过期)。这将吊销所有访问令牌。在

相关问题 更多 >

    热门问题