public async Task <LoginResponse> LoginAsync(string authority, string resource, string clientId, string returnUri, bool isRefresh = false) { var authContext = new AuthenticationContext(authority); if (authContext.TokenCache.ReadItems().Any()) { authContext = new AuthenticationContext(authContext.TokenCache.ReadItems().First().Authority); } try { AuthenticationResult authResult; if (isRefresh) { authResult = await authContext.AcquireTokenSilentAsync(resource, clientId); } else { var controller = ViewControllerHelpers.GetVisibleViewController(); var uri = new Uri(returnUri); var platformParams = new PlatformParameters(controller); authResult = await authContext.AcquireTokenAsync(resource, clientId, uri, platformParams); } var result = new LoginResponse { AuthHeader = authResult.CreateAuthorizationHeader(), AccessToken = authResult.AccessToken, AccessTokenType = authResult.AccessTokenType, ExpiresOn = authResult.ExpiresOn, ExtendedLifetimeToken = authResult.ExtendedLifeTimeToken, IdToken = authResult.IdToken, TenantId = authResult.TenantId }; result.Profile.DisplayableId = authResult.UserInfo.DisplayableId; result.Profile.FamilyName = authResult.UserInfo.FamilyName; result.Profile.GivenName = authResult.UserInfo.GivenName; result.Profile.UniqueId = authResult.UserInfo.UniqueId; return(result); } catch (Exception e) { var _controller = ViewControllerHelpers.GetVisibleViewController(); var alert = UIAlertController.Create("Error", e.Message, UIAlertControllerStyle.Alert); alert.AddAction(UIAlertAction.Create("Cancel", UIAlertActionStyle.Cancel, null)); _controller.BeginInvokeOnMainThread(() => { _controller.PresentViewController(alert, true, null); }); AppCenterHelper.Report(e); clearTokenFromCache(authority); return(null); } }
void DisplayAlert(string title, string message, Action completionHandler = null) { var alert = UIAlertController.Create(title, message, UIAlertControllerStyle.Alert); alert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Cancel, null)); ViewControllerHelpers.GetVisibleViewController().PresentViewController(alert, true, completionHandler); }