我在UWP论坛上提出了这个问题,但是已经被指示在这里查看是否有人可以提供帮助。
我使用C ++ UWP应用程序中的OnlineIdAuthenticator来访问用户的OneDrive文件。这很好用。但是一小时后令牌到期,所以我需要刷新它。我尝试了两种方法:
1)我在这里看了一下OneNote示例:https://github.com/OneNoteDev/OneNoteAPISampleWinUniversal
在OneNoteServiceSamplesWinUniversal.Shared / OneNoteApi / LiveIdAuth.cs中查看AttemptAccessTokenRequest():
var createMessage = new HttpRequestMessage(HttpMethod.Post, MsaTokenRefreshUrl)
{
Content = new StringContent(
String.Format(CultureInfo.InvariantCulture, TokenRefreshRequestBody,
ClientId,
TokenRefreshRedirectUri,
_refreshToken),
Encoding.UTF8,
TokenRefreshContentType)
};
var httpClient = new HttpClient();
HttpResponseMessage response = await httpClient.SendAsync(createMessage);
await ParseRefreshTokenResponse(response);
}
但是我收到了400响应:error = invalid_request error_description =提供的请求必须包含'refresh_token'输入参数。
我看不到通过OnlineIdAuthenticator获取刷新令牌的任何方法。
2)我再次调用OnlineIdAuthenticator :: AuthenticateUserAsync(),但这次仅使用“wl.signin”范围,如LiveSDK的LiveAuthClient.cs所述:
https://github.com/liveservices/LiveSDK
这有效,我得到一个新令牌!不幸的是,当我尝试再次刷新它(在2小时标记处)时,它返回相同的令牌,然后当我尝试使用它时,我获得了401未授权。
那么有没有人通过OnlineIdAuthenticator成功刷新访问令牌?如果是这样,我会很高兴知道你是如何做到的。
非常感谢。
答案 0 :(得分:-1)
OnlineIdAuthenticator不支持刷新令牌。 您是否尝试向https://consent.live.com/AccessToken.aspx发出直接POST请求? 点击此处了解详情 - https://msdn.microsoft.com/en-us/library/ff750952.aspx