我正在使用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小时内有效。 request-oauthlib程序包具有support for refreshing tokens,但似乎仅限于带有单独的刷新令牌的令牌类型。与Microsoft Graph一起使用的客户端凭据流仅发出access_token。
所以我的问题是:
答案 0 :(得分:0)
此行为是设计使然(符合OAuth规范)。支持刷新令牌的唯一OAuth授予是Authorization Code和Resource Owner Password Credentials。 Implicit和Client Credentials授予仅返回访问令牌。
更重要的是,由于客户端凭据流不是交互式的,因此不需要刷新令牌。您只需要在旧令牌过期时请求一个新令牌即可。
答案 1 :(得分:0)
据我所知,仍然没有内置的方法可以使用requests-oauthlib自动执行此操作。他们的GitHub上有一张票,上面有一些关于如何执行的不同想法,但是没有现成的东西:https://github.com/requests/requests-oauthlib/issues/260