0

我正在尝试向 M365 的(“me/todo/lists”)端点发出 GET 请求。它最初在新的身份验证和获取访问令牌后工作。

它甚至可以在保存访问令牌并在几分钟后发出请求时工作,这意味着使用保存的访问令牌的代码有效。

但是,当我尝试通过存储访问令牌来调用 API 时,出现错误:“错误:访问令牌已过期或尚未生效”

这是使用保存的访问令牌发出请求的代码

public async getTaskLists(accessToken: string) {
        class MyAuthenticationProvider implements AuthenticationProvider {
            /**
             * This method will get called before every request to the msgraph server
             * This should return a Promise that resolves to an accessToken (in case of success) or rejects with error (in case of failure)
             * Basically this method will contain the implementation for getting and refreshing accessTokens
             */
            public async getAccessToken(): Promise<string> {
                return accessToken;
            }
        }
        const options = {
            authProvider: new MyAuthenticationProvider(), // An instance created from previous step
        };
        const client = Client.initWithMiddleware(options);
    
        //this part fetches task-lists from M365 and populates them into placed in a tree-view using registerTreeDataProvider
    
        let dataObject = [];
        let children: string[] = [];
        try {
            let taskList = await client.api("/me/todo/lists").get();
            console.log(taskList);
            } catch (error) {
            console.log(error);
            }
    }
}

4

1 回答 1

0

这是一个短暂的访问令牌,我认为它仅在一个小时内有效。您需要在令牌过期之前刷新令牌才能成功进行 API 调用。这意味着您必须保存refresh_token才能这样做。refresh_token根据我的经验,可以多次使用,这很好,因为如果refresh_token只能使用一次并且刷新令牌响应由于网络问题而丢失,它可能会中断连接。但是,最好保存refresh_token从 MS 返回的最后一个。

于 2022-02-08T20:46:15.673 回答