/// <summary> /// Get a URL that redirects the user to the login-page for this IDPEndPoint /// </summary> /// <returns></returns> public string GetIDPLoginUrl(bool forceAuthn, bool isPassive, string desiredNsisLoa, string desiredProfile) { return(IDPSelectionUtil.GetIDPLoginUrl(Id, forceAuthn, isPassive, desiredNsisLoa, desiredProfile)); }
/// <summary> /// Get a URL that redirects the user to the login-page for this IDPEndPoint /// </summary> /// <returns></returns> public string GetIDPLoginUrl() { return(IDPSelectionUtil.GetIDPLoginUrl(Id)); }
/// <summary> /// Handles the selection of an IDP. If only one IDP is found, the user is automatically redirected to it. /// If several are found, and nothing indicates to which one the user should be sent, this method returns null. /// </summary> public IDPEndPoint RetrieveIDP(HttpContext context) { SAML20FederationConfig config = SAML20FederationConfig.GetConfig(); //If idpChoice is set, use it value if (!string.IsNullOrEmpty(context.Request.Params[IDPChoiceParameterName])) { AuditLogging.logEntry(Direction.IN, Operation.DISCOVER, "Using IDPChoiceParamater: " + context.Request.Params[IDPChoiceParameterName]); IDPEndPoint endPoint = config.FindEndPoint(context.Request.Params[IDPChoiceParameterName]); if (endPoint != null) { return(endPoint); } } //If we have a common domain cookie, use it's value //It must have been returned from the local common domain cookie reader endpoint. if (!string.IsNullOrEmpty(context.Request.QueryString["_saml_idp"])) { CommonDomainCookie cdc = new CommonDomainCookie(context.Request.QueryString["_saml_idp"]); if (cdc.IsSet) { IDPEndPoint endPoint = config.FindEndPoint(cdc.PreferredIDP); if (endPoint != null) { if (Trace.ShouldTrace(TraceEventType.Information)) { Trace.TraceData(TraceEventType.Information, "IDP read from Common Domain Cookie: " + cdc.PreferredIDP); } return(endPoint); } AuditLogging.logEntry(Direction.IN, Operation.DISCOVER, "Invalid IdP in Common Domain Cookie, IdP not found in list of IdPs: " + cdc.PreferredIDP); } } //If there is only one configured IDPEndPoint lets just use that if (config.IDPEndPoints.Count == 1 && config.IDPEndPoints[0].metadata != null) { AuditLogging.logEntry(Direction.IN, Operation.DISCOVER, "No IdP selected in Common Domain Cookie, using default IdP: " + config.IDPEndPoints[0].Name); return(config.IDPEndPoints[0]); } // If one of the endpoints are marked with default, use that one var defaultIdp = config.Endpoints.IDPEndPoints.Find(idp => idp.Default); if (defaultIdp != null) { if (Trace.ShouldTrace(TraceEventType.Information)) { Trace.TraceData(TraceEventType.Information, "Using IdP marked as default: " + defaultIdp.Id); } return(defaultIdp); } // In case an Idp selection url has been configured, redirect to that one. if (!string.IsNullOrEmpty(config.Endpoints.idpSelectionUrl)) { if (Trace.ShouldTrace(TraceEventType.Information)) { Trace.TraceData(TraceEventType.Information, "Redirecting to idpSelectionUrl for selection of IDP: " + config.Endpoints.idpSelectionUrl); } context.Response.Redirect(config.Endpoints.idpSelectionUrl); } // If an IDPSelectionEvent handler is present, request the handler for an IDP endpoint to use. var idpEndpoint = IDPSelectionUtil.InvokeIDPSelectionEventHandler(config.Endpoints); if (idpEndpoint != null) { return(idpEndpoint); } return(null); }
/// <summary> /// Get a URL that redirects the user to the login-page for this IDPEndPoint /// </summary> /// <returns></returns> public string GetIDPLoginUrl(bool forceAuthn, bool isPassive) { return(IDPSelectionUtil.GetIDPLoginUrl(Id, forceAuthn, isPassive)); }