1

У меня есть небольшое приложение, работающее на 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 API SDK - как я попытался authClient.CanLogout всегда ложные и я не может Выход() для входа снова. Кто-нибудь знает что-то об этой ситуации? Нужно ли использовать REST api для этого?

+0

LiveConnectSession, что можно найти либо в LiveLoginResult или LoginCompletedEventArgs заседании содержит RefreshToken. Но как его использовать Я не знаю, поскольку LiveAuthClient больше не принимает токен обновления. – Barnstokkr

+0

@Barnstokkr * LiveConnctSession * в 'Microsoft.Live.dll, v5.6.0.0' для WP8.1 RT содержит только два свойства: * AccessToken * и * AuthenticationToken *. – Romasz

ответ

0

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) 
    }; 
} 
+0

Но для этого требуется использовать REST api. Интересно, что делать в случае с Live SDK API. AFAIK он должен автоматически получить ручку, освежающую, и в большинстве случаев это делает, но оказалось, что в редких случаях это закончилось ситуацией, о которой идет речь. – Romasz

+0

Просто создайте код, как если бы Token Expired Exception произошел, а затем перезвоните, чтобы обновить токен, который является кодом, который я предоставил ранее. –

+0

Итак, вопрос в том, откуда я должен получить * UserRefreshToken * - Live SDK API предоставляет только токены аутентификации и доступа. – Romasz

Смежные вопросы