我有一个在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/