【问题标题】:How to request for an extended scope refresh token in docusign while refreshing access token如何在刷新访问令牌时在文档中请求扩展范围刷新令牌
【发布时间】:2022-02-24 21:21:28
【问题描述】:

我在为 oauth 代码授予流生成授权 URI 时包含了“扩展”范围,但在刷新访问令牌时,在响应中我将范围作为“签名”。刷新访问令牌时如何获取具有扩展范围的刷新令牌。我已附加我的代码以从刷新令牌中获取访问令牌。

        auth_string = "{0}:{1}".format(
            DOCUSIGN_CLIENT_ID, DOCUSIGN_CLIENT_SECRET
        )
        auth_encoded_hash = b64encode(auth_string.encode("utf-8"))
        auth_header = auth_encoded_hash.decode("utf-8")

 
        url = "https://account-d.docusign.com/oauth/token"

        headers = {
            "Authorization": "Basic {0}".format(auth_header),
            "Content-Type": "application/x-www-form-urlencoded",
        }

        body = {"grant_type": "refresh_token", "refresh_token": refresh_token}
        _response = requests.post(url, data=body, headers=headers)
        response = _response.json() # here I am getting scope as 'signature'

我对此的第二个后续问题,如果刷新令牌本身在刷新访问令牌时过期,我将在上面的响应中收到什么错误消息?

【问题讨论】:

    标签: oauth-2.0 docusignapi


    【解决方案1】:

    刷新操作请求不包括范围。 刷新操作response可能包含之前请求的范围。

    这里是刷新操作:

    curl --location --request POST 'https://account-d.docusign.com/oauth/token' \
    --header 'Authorization: Basic 'NWYxZTg4…………...TJkOGI2Yg==' \
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'refresh_token=eyJ0eX…………...Dp_hA' \
    --data-urlencode 'grant_type=refresh_token'
    

    如果刷新操作成功,则响应包含一个新的访问令牌和一个新的刷新令牌。

    接下来,扔掉旧的刷新令牌,并使用新收到的刷新令牌,直到下一次。

    换句话说:

    • 第一次刷新 API 调用使用授权码授权流程返回的刷新令牌
    • 然后每个后续的刷新 API 调用都使用之前的刷新 API 调用返回的刷新令牌

    Blog post about using refresh tokens

    【讨论】:

    • 谢谢!是的,刷新操作不包括范围,但刷新操作响应包含范围='签名',所以我对此感到困惑。要了解具有签名范围的场景,我是否在刷新操作期间在此处获取新的刷新令牌,即使我们得到了,我是否需要使用较新的令牌或较旧的令牌,因为无论如何这里的生命周期都是相同的。
    • 对于每个刷新操作,使用之前刷新操作返回的刷新令牌。
    【解决方案2】:

    当您最初同意并从用户那里获取令牌时,需要“扩展”范围,以便刷新令牌在 30 天内不会过期。不需要每次使用所述刷新令牌来获取新的访问令牌。

    过期令牌的错误消息通常会得到 invalid grant 错误,但该错误可能会发生变化,您应该处理所有错误而不是查找特定的错误字符串。

    有关类似问题/答案,请参阅 Which is the error returned when a DocuSign refresh token is expired?。

    【讨论】:

    • 感谢您的回复!只是为了验证我的想法,刷新令牌后,我应该使用新生成的刷新令牌(我在上面的响应中得到的一个)来正确生成访问令牌下一次?我想那将是有效期延长到下一个 30 天的那个。
    • 您可以使用最初在“扩展”范围内生成的 refresh_token。如果您继续使用新的刷新令牌 - 您不需要扩展范围
    • @InbarGazit -- 您必须使用从刷新操作中新收到的刷新令牌。
    猜你喜欢
    • 2020-07-12
    • 2016-01-05
    • 2022-10-31
    • 2019-06-29
    • 1970-01-01
    • 2020-09-16
    • 1970-01-01
    • 2021-08-23
    • 1970-01-01
    相关资源
    最近更新 更多