/// <summary> /// Refreshes access token with the identity provider for the logged in user. /// </summary> /// <returns> /// Task that will complete when the user has finished refreshing access token /// </returns> public async Task <MobileServiceUser> RefreshUserAsync() { if (this.CurrentUser == null || string.IsNullOrEmpty(this.CurrentUser.MobileServiceAuthenticationToken)) { throw new InvalidOperationException("MobileServiceUser must be set before calling refresh"); } string response = null; MobileServiceHttpClient client = this.HttpClient; if (this.AlternateLoginHost != null) { client = this.AlternateAuthHttpClient; } try { response = await client.RequestWithoutHandlersAsync(HttpMethod.Get, RefreshUserAsyncUriFragment, this.CurrentUser, null, MobileServiceFeatures.RefreshToken); } catch (MobileServiceInvalidOperationException ex) { string message = string.Empty; if (ex.Response != null) { switch (ex.Response.StatusCode) { case HttpStatusCode.BadRequest: message = "Refresh failed with a 400 Bad Request error. The identity provider does not support refresh, or the user is not logged in with sufficient permission."; break; case HttpStatusCode.Unauthorized: message = "Refresh failed with a 401 Unauthorized error. Credentials are no longer valid."; break; case HttpStatusCode.Forbidden: message = "Refresh failed with a 403 Forbidden error. The refresh token was revoked or expired."; break; default: message = "Refresh failed due to an unexpected error."; break; } throw new MobileServiceInvalidOperationException(message, innerException: ex, request: ex.Request, response: ex.Response); } throw; } if (!string.IsNullOrEmpty(response)) { JToken authToken = JToken.Parse(response); this.CurrentUser.MobileServiceAuthenticationToken = (string)authToken["authenticationToken"]; } return(this.CurrentUser); }
public MobileServiceClient(IMobileServiceClientOptions options) : this(options.MobileAppUri, null) { AlternateLoginHost = options.AlternateLoginHost; LoginUriPrefix = options.LoginUriPrefix; var handlers = options.GetDefaultMessageHandlers(this) ?? EmptyHttpMessageHandlers; if (handlers.Any()) { HttpClient = new MobileServiceHttpClient(handlers, MobileAppUri, InstallationId, httpRequestTimeout); } }
/// <summary> /// Initializes a new instance of the MobileServiceClient class. /// </summary> /// <param name="applicationUri"> /// The URI for the Microsoft Azure Mobile Service. /// </param> /// <param name="applicationKey"> /// The application key for the Microsoft Azure Mobile Service. /// </param> /// <param name="handlers"> /// Chain of <see cref="HttpMessageHandler" /> instances. /// All but the last should be <see cref="DelegatingHandler"/>s. /// </param> public MobileServiceClient(Uri applicationUri, string applicationKey, params HttpMessageHandler[] handlers) { if (applicationUri == null) { throw new ArgumentNullException("applicationUri"); } this.ApplicationUri = applicationUri; this.ApplicationKey = applicationKey; this.applicationInstallationId = GetApplicationInstallationId(); handlers = handlers ?? EmptyHttpMessageHandlers; this.HttpClient = new MobileServiceHttpClient(handlers, this.ApplicationUri, this.applicationInstallationId, this.ApplicationKey); this.Serializer = new MobileServiceSerializer(); }
/// <summary> /// Initializes a new instance of the <see cref="RemoteTableStorage"/> class. /// </summary> /// <param name="httpClient"> /// The <see cref="MobileServiceHttpClient"/> instance to use for the storage context. /// </param> /// <param name="tableName"> /// The table name to use with the storage context. /// </param> public RemoteTableStorage(MobileServiceHttpClient httpClient) { Debug.Assert(httpClient != null); this.httpClient = httpClient; }