/// <summary> /// Enters credentials on the device control panel and initiates the authentication process. /// Applies the specified parameters before submitting the authentication request. /// </summary> public void Authenticate(Dictionary <string, object> parameters) { AuthenticationInitMethod authMode = GetAuthenticationInitMethod(); RecordEvent(DeviceWorkflowMarker.AuthenticationBegin); AuthenticationProvider deviceDefaultProvider = GetDefaultProvider(ControlPanel.GetScreenInfo()); // Eager Auth allows for the setting of a provider. Lazy Auth just prompts for credentials, // so we only want to allow the provider to be set if auth mode is Eager. if (authMode == AuthenticationInitMethod.SignInButton) { if (Provider == AuthenticationProvider.Auto) { // Use the device default Provider = deviceDefaultProvider; } if (Provider != deviceDefaultProvider) { // Set the device provider to the requested provider SetDeviceProvider(Provider); } ControlPanel.PressByValue("Continue"); } //At this point this.Provider should be correctly set, so we should use it from now on. IAppAuthenticator appAuthenticator = GetAppAuthenticator(Provider); if (Provider != AuthenticationProvider.Card && parameters?.Count > 0) { appAuthenticator.ApplyParameters(parameters); } RecordInfo(DeviceWorkflowMarker.AuthType, Provider.GetDescription()); RecordEvent(DeviceWorkflowMarker.EnterCredentialsBegin); appAuthenticator.EnterCredentials(); RecordEvent(DeviceWorkflowMarker.EnterCredentialsEnd); if (Provider != AuthenticationProvider.Card) { appAuthenticator.SubmitAuthentication(); } RecordEvent(DeviceWorkflowMarker.AuthenticationEnd); }
/// <summary> /// Enters credentials on the device control panel and initiates the authentication process. /// Applies the specified parameters before submitting the authentication request. /// </summary> /// <param name="parameters">Additional configuration parameters presented on the Auth screen.</param> public void Authenticate(Dictionary <string, object> parameters) { StringBuilder providerDescription = new StringBuilder(Provider.GetDescription()); IAppAuthenticator appAuthenticator = null; RecordEvent(DeviceWorkflowMarker.AuthenticationBegin); if (InitializationMethod != AuthenticationInitMethod.Badge) { AuthenticationProvider deviceDefaultProvider = GetDefaultProvider(); if (Provider == AuthenticationProvider.Auto) { // Use the device default Provider = deviceDefaultProvider; providerDescription.Append(" - "); providerDescription.Append(Provider.GetDescription()); } RecordInfo(DeviceWorkflowMarker.AuthType, providerDescription.ToString()); if (Provider != deviceDefaultProvider) { // Set the device provider to the requested provider SetDeviceProvider(Provider); } //At this point this.Provider should be correctly set, so we should use it from now on. appAuthenticator = GetAppAuthenticator(Provider); } else { providerDescription.Insert(0, " - "); providerDescription.Insert(0, InitializationMethod.GetDescription()); RecordInfo(DeviceWorkflowMarker.AuthType, providerDescription.ToString()); appAuthenticator = GetAppAuthenticator(AuthenticationProvider.Card); } if (Provider == AuthenticationProvider.Card || InitializationMethod.Equals(AuthenticationInitMethod.Badge)) { RecordEvent(DeviceWorkflowMarker.DeviceButtonPress, InitializationMethod.GetDescription()); appAuthenticator.ApplyParameters(null); } else if (parameters?.Count > 0) { appAuthenticator.ApplyParameters(parameters); } RecordEvent(DeviceWorkflowMarker.EnterCredentialsBegin); appAuthenticator.EnterCredentials(); RecordEvent(DeviceWorkflowMarker.EnterCredentialsEnd); if (Provider != AuthenticationProvider.Card) { appAuthenticator.SubmitAuthentication(); if (!appAuthenticator.ValidateAuthentication()) { throw new DeviceWorkflowException($"{Credential.UserName} login failed. {appAuthenticator.ErrorMessage}"); } } RecordEvent(DeviceWorkflowMarker.AuthenticationEnd); }