public async Task <bool> TryAuthenticateAsync(IAuthenticatedService service, CancellationToken cancellationToken) { if (service is null) { throw new ArgumentNullException(nameof(service)); } if (service.IsLoggedIn) { return(true); } IOAuthedService oauth = service as IOAuthedService; if (oauth == null) { throw new NotSupportedException(); } string serviceName = service.GetType().GetSimpleTypeName(); string refreshToken = await SecureStorage.GetAsync(serviceName); if (String.IsNullOrWhiteSpace(refreshToken)) { return(false); } try { var refreshResult = await oauth.RefreshTokenAsync(refreshToken, cancellationToken); if (refreshResult != null) { await SecureStorage.SetAsync(serviceName, refreshResult.RefreshToken); return(true); } } catch { } return(false); }
public async Task <bool> AuthenticateAsync(IAuthenticatedService service) { if (service is null) { throw new ArgumentNullException(nameof(service)); } IOAuthedService oauth = service as IOAuthedService; if (oauth == null) { throw new NotSupportedException(); } if (await TryAuthenticateAsync(service, CancellationToken.None)) { return(true); } string serviceName = service.GetType().GetSimpleTypeName(); try { var result = await WebAuthenticationBroker.AuthenticateAsync(WebAuthenticationOptions.None, oauth.AuthUri, oauth.CallbackUri); if (result.ResponseStatus == WebAuthenticationStatus.Success) { string code = oauth.GetCode(result.ResponseData); var authResult = await oauth.AuthenticateAsync(code, CancellationToken.None); if (authResult != null) { await SecureStorage.SetAsync(serviceName, authResult.RefreshToken); return(true); } } } catch { } return(false); }