/// <summary> /// The PrepareVerifyFactors /// </summary> /// <param name="authenticationResponse">The authenticationResponse<see cref="IAuthenticationResponse"/></param> /// <returns>The <see cref="List{IVerifyFactor}"/></returns> private List <IVerifyFactor> PrepareVerifyFactors(IAuthenticationResponse authenticationResponse) { List <IVerifyFactor> verifyFactorsList = new List <IVerifyFactor>(); //this.logger.Debug("ProcessAuthnResponse stateToken: " + authenticationResponse.StateToken); if (authenticationResponse.Embedded.GetData().ContainsKey("factors")) { string stringResponse = JsonConvert.SerializeObject(authenticationResponse.Embedded.GetData()["factors"]); List <object> factorsList = JsonConvert.DeserializeObject <List <object> >(stringResponse); this.OktaFactorCount = factorsList.Count; foreach (var factor in factorsList) { string factorStringResponse = JsonConvert.SerializeObject(factor); FactorInfo factorObj = JsonConvert.DeserializeObject <FactorInfo>(factorStringResponse); string factorKey = GetFactorKey(factorObj); factorObj.FactorKey = factorKey; string[] supportedFactors = { "sms:OKTA", "email:OKTA" }; if (supportedFactors.Contains(factorKey)) { IVerifyFactor verifyFactor = this.CreateFactorObject(factorObj); verifyFactorsList.Add(verifyFactor); } else { this.OktaFactorCount -= 1; } } } return(verifyFactorsList); }
private List <IEnrollFactor> PrepareEnrollFactors(IAuthenticationResponse authenticationResponse) { List <IEnrollFactor> enrollFactorsList = new List <IEnrollFactor>(); if (authenticationResponse.Embedded.GetData().ContainsKey("factors")) { string stringResponse = JsonConvert.SerializeObject(authenticationResponse.Embedded.GetData()["factors"]); List <object> factorsList = JsonConvert.DeserializeObject <List <object> >(stringResponse); this.OktaFactorCount = factorsList.Count; foreach (var factor in factorsList) { string factorStringResponse = JsonConvert.SerializeObject(factor); FactorInfo factorObj = JsonConvert.DeserializeObject <FactorInfo>(factorStringResponse); string factorKey = GetFactorKey(factorObj); string isFactorRequired = IsFactorRequired(factorObj); string factorEnrollmentStatus = GetFactorEnrollStatus(factorObj); string factorId = GetEnrollFactorId(factorObj.FactorType); factorObj.FactorKey = factorKey; string[] supportedFactors = { "sms:OKTA" }; if (supportedFactors.Contains(factorKey) && isFactorRequired == "REQUIRED" && factorEnrollmentStatus == "NOT_SETUP") { IEnrollFactor enrollFactor = this.CreateEnrollFactorObject(factorObj); enrollFactorsList.Add(enrollFactor); } } } return(enrollFactorsList); }
/// <summary> /// The CreateFactorObject /// </summary> /// <param name="factorInfo">The factorInfo<see cref="FactorInfo"/></param> /// <returns>The <see cref="IVerifyFactor"/></returns> public IVerifyFactor CreateFactorObject(FactorInfo factorInfo) { IVerifyFactor verifyFactor = null; if (factorInfo.FactorKey == "sms:OKTA") { SmsFactor smsFactor = new SmsFactor(this.authnClient, this) { Id = factorInfo.Id, Profile = factorInfo.Profile, FactorType = factorInfo.FactorType, Provider = factorInfo.Provider, VendorName = factorInfo.VendorName, Links = factorInfo.Links, FactorDisplayName = "SMS Authentication", }; verifyFactor = smsFactor; } else if (factorInfo.FactorKey == "email:OKTA") { EmailFactor emailFactor = new EmailFactor(this.authnClient, this) { Id = factorInfo.Id, Profile = factorInfo.Profile, FactorType = factorInfo.FactorType, Provider = factorInfo.Provider, VendorName = factorInfo.VendorName, Links = factorInfo.Links, FactorDisplayName = "Email Authentication", }; verifyFactor = emailFactor; } return(verifyFactor); }
/// <summary> /// Adds a key value pair to the IDictionary<string, IVerifyFactor> VerifyFactors global object /// </summary> /// <param name="factorKey"></param> /// <param name="factorInfo"></param> private void AddVerifyFactor(string factorKey, FactorInfo factorInfo) { if (!this.VerifyFactors.ContainsKey(factorKey)) { this.VerifyFactors.Add(factorKey, this.CreateFactorObject(factorInfo)); } }
/// <summary> /// The CreateEnrollFactorObject /// </summary> /// <param name="factorInfo">The factorInfo<see cref="FactorInfo"/></param> /// <returns>The <see cref="IEnrollFactor"/></returns> public IEnrollFactor CreateEnrollFactorObject(FactorInfo factorInfo) { IEnrollFactor enrollFactor = null; if (factorInfo.FactorKey == "sms:OKTA") { SmsFactorEnroll smsFactorEnroll = new SmsFactorEnroll(this.authnClient, this) { Id = factorInfo.Id, Profile = factorInfo.Profile, FactorType = factorInfo.FactorType, Provider = factorInfo.Provider, VendorName = factorInfo.VendorName, Links = factorInfo.Links, FactorDisplayName = "SMS Authentication", Enrollment = factorInfo.Enrollment, Status = factorInfo.Status, }; enrollFactor = smsFactorEnroll; } return(enrollFactor); }
/// <summary> /// The ProcessAuthnResponse /// </summary> /// <param name="authenticationResponse">The authenticationResponse<see cref="IAuthenticationResponse"/></param> public void ProcessAuthnResponse(IAuthenticationResponse authenticationResponse) { // this.logger.Debug("ProcessAuthnResponse sessionToken: " + authenticationResponse.SessionToken); this.AuthenticationResponse = (AuthenticationResponse)authenticationResponse; this.Status = authenticationResponse.AuthenticationStatus; this.SessionToken = authenticationResponse.SessionToken; this.StateToken = authenticationResponse.StateToken; this.SaveAuthenticationStatus(this.Status); if (this.Status == "MFA_REQUIRED") { List <IVerifyFactor> verifyFactorsList = this.PrepareVerifyFactors(authenticationResponse); this.AssignVerifyFactors(verifyFactorsList); PolicyInfo policyInfo = this.PreparePolicyInfo(authenticationResponse); this.AssignPolicyInfo(policyInfo); } else if (this.Status == "MFA_CHALLENGE") { var factorResponse = JsonConvert.SerializeObject(authenticationResponse.Embedded["factor"]); FactorInfo factorObj = JsonConvert.DeserializeObject <FactorInfo>(factorResponse); string factorKey = GetFactorKey(factorObj); } else if (this.Status == "MFA_ENROLL") { List <IEnrollFactor> enrollFactorsList = this.PrepareEnrollFactors(authenticationResponse); this.AssignEnrollFactors(enrollFactorsList); } else if (this.Status == "PASSWORD_WARN") { if (!this.DonotChallengeCheckBoxState) { this.signOnPolicyRegistryHelper.AssignDeviceToken(this.username); } PolicyExpiration policyExpiration = this.PreparePolicyExpirationObject(authenticationResponse); this.AssignPolicyExpirationObj(policyExpiration); PolicyComplexity policyComplexity = this.PreparePolicyComplexityObject(authenticationResponse); this.AssignPolicyComplexityObj(policyComplexity); PolicyAge policyAge = this.PreparePolicyAgeObject(authenticationResponse); this.AssignPolicyAgeObj(policyAge); } else if (this.Status == "PASSWORD_EXPIRED") { if (!this.DonotChallengeCheckBoxState) { this.signOnPolicyRegistryHelper.AssignDeviceToken(this.username); } PolicyComplexity policyComplexity = this.PreparePolicyComplexityObject(authenticationResponse); this.AssignPolicyComplexityObj(policyComplexity); PolicyAge policyAge = this.PreparePolicyAgeObject(authenticationResponse); this.AssignPolicyAgeObj(policyAge); } else if (this.Status == "SUCCESS") { // } // State changed this.OnStateChange(this.Status); }
/// <summary> /// The GetFactorEnrollStatus /// </summary> /// <param name="factorObj">The factorObj<see cref="FactorInfo"/></param> /// <returns>The <see cref="string"/></returns> public static string GetFactorEnrollStatus(FactorInfo factorObj) { string factorEnrollStatus = factorObj.Status; return(factorEnrollStatus); }
/// <summary> /// The IsFactorRequired /// </summary> /// <param name="factorObj">The factorObj<see cref="FactorInfo"/></param> /// <returns>The <see cref="string"/></returns> public static string IsFactorRequired(FactorInfo factorObj) { string isFactorRequired = factorObj.Enrollment; return(isFactorRequired); }
/// <summary> /// The GetFactorKey /// </summary> /// <param name="factorObj">The factorObj<see cref="FactorInfo"/></param> /// <returns>The <see cref="string"/></returns> public static string GetFactorKey(FactorInfo factorObj) { string factorKey = factorObj.FactorType + ":" + factorObj.Provider; return(factorKey); }