如何通过OnlineIdAuthenticator [UWP app]刷新MSA令牌

时间:2016-01-11 10:45:29

标签: rest authentication uwp onedrive

我在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成功刷新访问令牌?如果是这样,我会很高兴知道你是如何做到的。

非常感谢。

1 个答案:

答案 0 :(得分:-1)

据我所知,

OnlineIdAuthenticator不支持刷新令牌。 您是否尝试向https://consent.live.com/AccessToken.aspx发出直接POST请求? 点击此处了解详情 - https://msdn.microsoft.com/en-us/library/ff750952.aspx