【问题标题】:force google to refresh token via python social auth强制谷歌通过 python social auth 刷新令牌
【发布时间】:2015-01-03 03:47:06
【问题描述】:

我们正在开发一个项目,该项目依赖 PSA (0.2.1) 通过 google oauth2(离线)进行身份验证。不知何故,我们丢失了一些用户的刷新令牌,我们想强制这些用户重新验证,以便我们可以从谷歌获取新的刷新令牌

我们都试过了:

  1. 使用/diconnect/google-oauth2断开这些用户,我们得到了一个N​​otAllowedToDisconnect异常,即使从SOCIAL_AUTH_DISCONNECT_PIPELINE中删除social.pipeline.disconnect.allowed_to_disconnect,我们也没有异常,但是当用户重新认证时,google中没有refreh_token回应
  2. 将approval_prompt=force 添加到'account:social:begin' url,但它不返回refresh_token

任何想法都将受到高度赞赏。

更新:我们尝试使用{% url 'account:social:begin' 'google-oauth2' %}?approval_prompt=force&next=/ 来强制某些用户(缺少令牌)使用approval_prompt,但它似乎对google oauth 没有影响。

谢谢

【问题讨论】:

    标签: django oauth-2.0 google-oauth python-social-auth


    【解决方案1】:

    使用此设置可以解决问题:

    SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS = {
        'access_type': 'offline',
        'approval_prompt': 'force'
    }
    

    http://psa.matiasaguirre.net/docs/use_cases.html#re-prompt-google-oauth2-users-to-refresh-the-refresh-token 的用例示例

    【讨论】:

    • 实际上将 {'approval_prompt': 'force'} 添加到SOCIAL_AUTH_GOOGLE_OAUTH2_AUTH_EXTRA_ARGUMENTS,导致每次现有用户想要登录时,谷歌都会要求他离线访问,我们只想要丢失的用户要求刷新令牌
    • 但是在您确定当前用户及其在数据库中的关联之前,您将无法知道它。
    • 你是对的,那么有没有一个技巧可以将一个额外的参数传递给 PSA,而 PSA 又将这个参数传递给提供者一个运行时?那太好了
    • 如果您能够识别需要该参数的用户,那么您可以设置{'approval_prompt': 'auto'},然后调用/login/google-oauth2?approval_prompt=force 来覆盖该值。另一种选择是使用自定义管道来检查refresh_token 的缺失并将用户重定向到backend.auth_url() + "&approval_prompt=force"
    • 1.您的意思是通过在答案中定义设置但使用'auto' 而不是'force' 然后将用户发送到/login/google-oauth2/?approval_prompt=force 您会得到“OAuth2 参数只能有单个值”?刚刚测试过,可以,可能你在做backend.auth_url() + "&approval_prompt=force"的时候收到了这个信息
    猜你喜欢
    • 2018-07-18
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2021-09-30
    • 2019-01-11
    • 2015-05-17
    相关资源
    最近更新 更多