我正在使用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,所以如果有更好的库可以完成自动刷新,我会很有兴趣使用它。
3条答案
按热度按时间wbrvyc0a1#
此行为是经过设计的(并且符合OAuth规范)。支持刷新令牌的OAuth赠款只有授权码和资源所有者口令身份证明。隐式授权和客户机身份证明授权仅返回访问令牌。
更重要的是,由于客户端凭据流不是交互式的,因此不需要刷新令牌,您只需在旧令牌过期时请求新令牌即可。
bmp9r5qi2#
据我所知,目前还没有内置的方法可以使用requests-oauthlib自动完成这项工作,他们的GitHub上有一张票,上面有几个不同的想法,但都不是现成的:https://github.com/requests/requests-oauthlib/issues/260
zpjtge223#
我知道这是一个老问题,但似乎没有答案,所以请允许我给予一试。
阅读您提到的缺乏刷新令牌,我敢做一个假设,您没有在请求的
scope
中添加offline_access
-如果您希望它成为Microsoft身份验证服务的答案的一部分,您必须这样做(请参阅https://learn.microsoft.com/en-us/graph/auth-v2-user#token-response和周围的各个页面了解更多细节)。希望这对我有帮助-对我来说很有效。