我有一个在WP8.1 RT上运行的小应用程序,它使用Live SDK与Onedrive连接。基本上,代码是这样的:

 string[] scopes = new string[] { "wl.signin", "wl.skydrive", "wl.offline_access" };
 authClientOnedrive = new LiveAuthClient();
 LiveLoginResult loginResult = await authClientOnedrive.InitializeAsync(scopes);
 if (loginResult.Status != LiveConnectSessionStatus.Connected)
     await authClientOnedrive.LoginAsync(scopes);
 clientOnedrive = new LiveConnectClient(authClientOnedrive.Session);


这工作得很好,因为wl.offline_access我得到了刷新令牌。由于我已阅读过令牌,其有效期应为一年。

但是,当我收到异常The access token that was provided has expired.时该怎么办?
我的一个用户现在遇到这种情况,我必须说,在使用Live SDK api时,我错过了在这种情况下该怎么办的信息-正如我尝试过的authClient.CanLogout始终为false,我无法通过Logout()进行签名再次。有人知道这种情况吗?我是否需要为此使用REST API?

最佳答案

public async Task<UserToken> RefreshAccessTokenAsync()
{
    var refreshAccessToken = RequestGenerator.RefreshAccessToken(_options.ClientId, _options.ClientSecret, _options.CallbackUrl, UserRefreshToken);
    var token = await ExecuteAuthorization<UserToken>(refreshAccessToken);

    _options.AccessToken = token.Access_Token;
    _options.RefreshToken = token.Refresh_Token;

    return token;
}

public IRequest RefreshAccessToken(string clientId, string clientSecret, string callbackUrl, string refreshToken)
{
    var nvc = new Dictionary<string, string>();
    nvc["client_id"] = clientId;
    nvc["redirect_uri"] = callbackUrl;
    nvc["client_secret"] = clientSecret;
    nvc["refresh_token"] = refreshToken;
    nvc["grant_type"] = "refresh_token";

    return new Request
    {
        BaseAddress = OAuthUrlBase,
        Resource = OAuthResource.Replace("{verb}", TokenVerb),
        Method = HttpMethod.Post,
        Content = new FormUrlEncodedContent(nvc)
    };
}

关于c# - token 已过期-下一步该怎么做?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28315286/

10-10 23:07