public override bool ShouldOverrideUrlLoading(WebView view, string url) { Uri uri = new Uri(url); if (url.StartsWith(BrokerConstants.BrowserExtPrefix, StringComparison.OrdinalIgnoreCase)) { CallState.Default.Logger.Verbose(null, "It is browser launch request"); OpenLinkInBrowser(url, ((Activity)view.Context)); view.StopLoading(); ((Activity)view.Context).Finish(); return(true); } if (url.StartsWith(BrokerConstants.BrowserExtInstallPrefix, StringComparison.OrdinalIgnoreCase)) { CallState.Default.Logger.Verbose(null, "It is an azure authenticator install request"); view.StopLoading(); this.Finish(view, url); return(true); } if (url.StartsWith(BrokerConstants.ClientTlsRedirect, StringComparison.OrdinalIgnoreCase)) { string query = uri.Query; if (query.StartsWith("?")) { query = query.Substring(1); } Dictionary <string, string> keyPair = EncodingHelper.ParseKeyValueList(query, '&', true, false, null); string responseHeader = DeviceAuthHelper.CreateDeviceAuthChallengeResponse(keyPair).Result; Dictionary <string, string> pkeyAuthEmptyResponse = new Dictionary <string, string>(); pkeyAuthEmptyResponse[BrokerConstants.ChallangeResponseHeader] = responseHeader; view.LoadUrl(keyPair["SubmitUrl"], pkeyAuthEmptyResponse); return(true); } if (url.StartsWith(callback, StringComparison.OrdinalIgnoreCase)) { this.Finish(view, url); return(true); } if (!url.Equals(AboutBlankUri, StringComparison.OrdinalIgnoreCase) && !uri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { UriBuilder errorUri = new UriBuilder(callback); errorUri.Query = string.Format(CultureInfo.InvariantCulture, "error={0}&error_description={1}", AdalError.NonHttpsRedirectNotSupported, AdalErrorMessage.NonHttpsRedirectNotSupported); this.Finish(view, errorUri.ToString()); return(true); } return(false); }
private async Task <T> HandleDeviceAuthChallenge <T>(IHttpWebResponse response) { IDictionary <string, string> responseDictionary = this.ParseChallengeData(response); if (!responseDictionary.ContainsKey("SubmitUrl")) { responseDictionary["SubmitUrl"] = RequestUri; } string responseHeader = await DeviceAuthHelper.CreateDeviceAuthChallengeResponse(responseDictionary) .ConfigureAwait(false); IRequestParameters rp = this.Client.BodyParameters; this.Client = new HttpClientWrapper(CheckForExtraQueryParameter(responseDictionary["SubmitUrl"]), this.CallState); this.Client.BodyParameters = rp; this.Client.Headers["Authorization"] = responseHeader; return(await this.GetResponseAsync <T>(false).ConfigureAwait(false)); }
public override void ViewDidLoad() { base.ViewDidLoad(); View.BackgroundColor = UIColor.White; webView = new UIWebView(View.Bounds); webView.ShouldStartLoad = (wView, request, navType) => { if (request == null) { return(true); } string requestUrlString = request.Url.ToString(); // If the URL has the browser:// scheme then this is a request to open an external browser if (requestUrlString.StartsWith(BrokerConstants.BrowserExtPrefix, StringComparison.OrdinalIgnoreCase)) { DispatchQueue.MainQueue.DispatchAsync(() => CancelAuthentication(null, null)); // Build the HTTPS URL for launching with an external browser var httpsUrlBuilder = new UriBuilder(requestUrlString) { Scheme = Uri.UriSchemeHttps }; requestUrlString = httpsUrlBuilder.Uri.AbsoluteUri; DispatchQueue.MainQueue.DispatchAsync( () => UIApplication.SharedApplication.OpenUrl(new NSUrl(requestUrlString))); this.DismissViewController(true, null); return(false); } if (requestUrlString.StartsWith(callback, StringComparison.OrdinalIgnoreCase) || requestUrlString.StartsWith(BrokerConstants.BrowserExtInstallPrefix, StringComparison.OrdinalIgnoreCase)) { callbackMethod(new AuthorizationResult(AuthorizationStatus.Success, request.Url.ToString())); this.DismissViewController(true, null); return(false); } if (requestUrlString.StartsWith(BrokerConstants.DeviceAuthChallengeRedirect, StringComparison.OrdinalIgnoreCase)) { Uri uri = new Uri(requestUrlString); string query = uri.Query; if (query.StartsWith("?", StringComparison.OrdinalIgnoreCase)) { query = query.Substring(1); } Dictionary <string, string> keyPair = EncodingHelper.ParseKeyValueList(query, '&', true, false, null); string responseHeader = DeviceAuthHelper.CreateDeviceAuthChallengeResponse(keyPair).Result; NSMutableUrlRequest newRequest = (NSMutableUrlRequest)request.MutableCopy(); newRequest.Url = new NSUrl(keyPair["SubmitUrl"]); newRequest[BrokerConstants.ChallengeResponseHeader] = responseHeader; wView.LoadRequest(newRequest); return(false); } if (!request.Url.AbsoluteString.Equals(AboutBlankUri, StringComparison.OrdinalIgnoreCase) && !request.Url.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { AuthorizationResult result = new AuthorizationResult(AuthorizationStatus.ErrorHttp); result.Error = AdalError.NonHttpsRedirectNotSupported; result.ErrorDescription = AdalErrorMessage.NonHttpsRedirectNotSupported; callbackMethod(result); this.DismissViewController(true, null); return(false); } return(true); }; webView.LoadFinished += delegate { // If the title is too long, iOS automatically truncates it and adds ... this.Title = webView.EvaluateJavascript(@"document.title") ?? "Sign in"; }; View.AddSubview(webView); this.NavigationItem.LeftBarButtonItem = new UIBarButtonItem(UIBarButtonSystemItem.Cancel, this.CancelAuthentication); webView.LoadRequest(new NSUrlRequest(new NSUrl(this.url))); // if this is false, page will be 'zoomed in' to normal size //webView.ScalesPageToFit = true; }