You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OneDrive认证时报错KeyError: 'expires_in'问题如何解决?

报错原因

KeyError: 'expires_in'的核心原因是你使用的ms-graph-python-client库预期的授权响应字段,和微软Graph API实际返回的字段不匹配,微软没有在token返回结果中提供expires_in字段,常见触发场景有两个:

  • Azure AD注册应用时选择了错误的账户类型,仅选择个人微软账户或者仅组织账户,导致响应结构变化
  • 库的版本过老,没有适配微软后续对OAuth2响应的调整,部分场景下微软会用expires_on字段替代expires_in返回,旧版库没有做兼容逻辑
解决步骤
  • 第一步:核对Azure应用配置
    进入Azure AD应用注册后台,确认账户类型选择的是「任何组织目录中的帐户和个人Microsoft帐户」,同时确认回调地址和代码里配置的完全一致,包含前缀、端口、路径,没有拼写错误。另外检查权限配置,确保已经添加了Files.ReadWrite.All和offline_access两个必要权限,缺失offline_access也会导致token返回字段不全。
  • 第二步:不修改源码的补丁方案
    调用登录逻辑之前,先给库的对应方法打兼容补丁,代码如下:
    from ms_graph.client import Client
    
    # 覆写原有_state方法,添加字段兼容
    original_state_method = Client._state
    def patched_state(self, token_dict):
        if 'expires_in' not in token_dict:
            # 优先取expires_on,没有就默认1小时有效期
            token_dict['expires_in'] = token_dict.get('expires_on', 3600)
        return original_state_method(self, token_dict)
    Client._state = patched_state
    
    # 后面正常初始化客户端调用即可
    graph_client = Client(
        client_id="你的应用client_id",
        client_secret="你的应用client_secret",
        redirect_uri="你的回调地址"
    )
    graph_client.login()
    
  • 第三步:直接修改源码(补丁无效时用)
    找到库安装路径下的ms_graph/client.py文件,定位到第144行的报错位置,将原代码中的int(token_dict['expires_in'])修改为:
    int(token_dict.get('expires_in', token_dict.get('expires_on', 3600)))
    

内容的提问来源于stack exchange,提问作者imicron3

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 05:12:00