requests-oauthlib 自动刷新客户端凭证流中的承载令牌?

Mar*_*ino 6 python-3.x microsoft-graph-api

我正在使用 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")
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但在这种情况下,承载访问令牌的有效期仅为 1 小时。requests-oauthlib 包支持刷新令牌,但它似乎仅限于带有单独刷新令牌的令牌类型。与 Microsoft Graph 一起使用的客户端凭据流仅发出 access_token。

所以我的问题是:

  1. 有没有办法让 requests-oauthlib 在这个用例中自动刷新令牌,或者我是否需要手动跟踪令牌的寿命并根据需要显式刷新它?
  2. 我不喜欢 requests-oauthlib 所以如果有一个更好的库可以完成自动刷新我有兴趣使用它。

Mar*_*eur 3

此行为是设计使然(并且符合 OAuth 规范)。支持刷新令牌的唯一 OAuth 授权是授权代码和资源所有者密码凭据。隐式和客户端凭证授予仅返回访问令牌。

更重要的是,由于客户端凭据流程不是交互式的,因此不需要刷新令牌。当旧令牌过期时,您只需请求一个新令牌即可。

  • 完全理解...很好奇是否有库支持来处理跟踪令牌过期和请求新令牌的详细信息...或者我是否必须自己处理。 (2认同)