So, all this adal is a huge pain to work fine ... Whenever I try to login using one of the identity providers (installed and provided by the Azure AD backend via ADAL), the Windows phone throws an authentication_ui_failed exception.
I’ve been looking around and googling for a couple of days, but I haven’t found anything useful. It probably doesn't help that I'm using a preview version of ADAL ...
In any case, this is what happens:
- click login (to start the process)
- A Windows phone stops the current application that appears (the screen turns black and loads for a while).
- a new screen appears with the identity providers that were installed on the backend (facebook, google +, ...)
- click on facebook or google or something else and you will be redirected to the corresponding login page.
- enter credentials and click login
- the screen turns black again when the device tries to return to the application
- "resume" is displayed on the screen for a second second
- exception thrown
The exception is:
authentication_ui_failed: Failed to complete browser-based authentication dialog.
internal exception:
System.IO.FileNotFoundException: The specified protocol is unknown. (Exception from HRESULT: 0x800C000D) at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.WebUI.<AcquireAuthorizationAsync>d__0.MoveNext()
and stacktrace:
at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.WebUI.<AcquireAuthorizationAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.AcquireTokenInteractiveHandler.<AcquireAuthorizationAsync>d__4.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.AcquireTokenInteractiveHandler.<PreTokenRequest>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.AcquireTokenHandlerBase.<RunAsync>d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.<AcquireTokenCommonAsync>d__4e.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.Experimental.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.<AcquireTokenAsync>d__47.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at ThreeAndMore.Mobile.Services.NetworkManager.<Login>d__15.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() at ThreeAndMore.Mobile.Windows.MainPage.<Login>d__1.MoveNext()
And the code that I use
public async Task<AuthenticationResult> Login(IPlatformParameters parameters, bool isSignIn) { var authContext = new AuthenticationContext(AUTHORITY_URL, new TokenCache()); if (CORRELATION_ID != null && CORRELATION_ID.Trim().Length != 0) { authContext.CorrelationId = Guid.Parse(CORRELATION_ID); } String policy = ""; if (isSignIn) policy = EMAIL_SIGNIN_POLICY; else policy = EMAIL_SIGNUP_POLICY; return await authContext.AcquireTokenAsync(SCOPES, ADDITIONAL_SCOPES, CLIENT_ID, new Uri(REDIRECT_URL), parameters, UserIdentifier.AnyUser, EXTRA_QP, policy); } }
which is called as follows:
private async void Login() { try { NetworkManager mngr = NetworkManager.GetInstance(); AuthenticationResult result = await mngr.Login(new PlatformParameters(PromptBehavior.Auto, false), true); MessageDialog msgbox = new MessageDialog("welcome " + result.UserInfo.Name + "User:" + result.UserInfo.DisplayableId); await msgbox.ShowAsync(); } catch (Exception e) { MessageDialog msgbox = new MessageDialog(String.Format("LOGIN EXCEPTION: {0} with hresult: {1} and inner exception {2} and stacktrace: {3}", e.Message, e.HResult, e.InnerException, e.StackTrace)); await msgbox.ShowAsync(); System.Diagnostics.Debug.WriteLine(String.Format("LOGIN EXCEPTION: {0} with hresult: {1} and inner exception {2} and stacktrace: {3}", e.Message, e.HResult, e.InnerException, e.StackTrace)); } }
One of the things that seems strange to me is that it is a “FileNotFoundException”, which file can it find? Is this a web request not to read files?
Even after searching for 2 days, I did not find a single promising solution. I do not know what else to do / try.