python-3.x requests-oauthlib自动刷新客户端凭据流中的承载令牌?

yebdmbv4  于 2023-01-22  发布在  Python
关注(0)|答案(3)|浏览(139)

我正在使用python requests-oauthlib包来连接Microsoft Graph。我正在使用OAuth 2.0客户端凭据流。
下面的简化代码可以很好地工作:

from oauthlib.oauth2 import BackendApplicationClient
from requests_oauthlib import OAuth2Session
client = BackendApplicationClient(client_id='myclientid')

token_url = "https://login.microsoftonline.com/mydomain.onmicrosoft.com/oauth2/v2.0/token"
msgraph = OAuth2Session(client=client)

msgraph.fetch_token(
    token_url = token_url,
    client_secret = 'myclientsecret',
    scope='https://graph.microsoft.com/.default')

response = msgraph.get(
    url="https://graph.microsoft.com/v1.0/users/user@mydomain.com/messages")

虽然这样做有效,但这种情况下的Bearer访问令牌仅在1小时内有效。requests-oauthlib包支持刷新令牌,但似乎仅限于带有单独刷新令牌的令牌类型。与Microsoft Graph一起使用的客户端凭据流仅发出access_token。
所以我的问题是:
1.在这个用例中,是否有办法让requests-oauthlib自动刷新令牌,或者我是否需要手动跟踪令牌的年龄,并根据需要显式刷新它?
1.我并不拘泥于requests-oauthlib,所以如果有更好的库可以完成自动刷新,我会很有兴趣使用它。

wbrvyc0a

wbrvyc0a1#

此行为是经过设计的(并且符合OAuth规范)。支持刷新令牌的OAuth赠款只有授权码和资源所有者口令身份证明。隐式授权和客户机身份证明授权仅返回访问令牌。
更重要的是,由于客户端凭据流不是交互式的,因此不需要刷新令牌,您只需在旧令牌过期时请求新令牌即可。

bmp9r5qi

bmp9r5qi2#

据我所知,目前还没有内置的方法可以使用requests-oauthlib自动完成这项工作,他们的GitHub上有一张票,上面有几个不同的想法,但都不是现成的:https://github.com/requests/requests-oauthlib/issues/260

zpjtge22

zpjtge223#

我知道这是一个老问题,但似乎没有答案,所以请允许我给予一试。
阅读您提到的缺乏刷新令牌,我敢做一个假设,您没有在请求的scope中添加offline_access-如果您希望它成为Microsoft身份验证服务的答案的一部分,您必须这样做(请参阅https://learn.microsoft.com/en-us/graph/auth-v2-user#token-response和周围的各个页面了解更多细节)。
希望这对我有帮助-对我来说很有效。

相关问题