// Process the artifact resolve request received from the identity provider in response // to the artifact sent by the service provider. private void ProcessArtifactResolve() { Trace.Write("IdP", "Processing artifact resolve request"); // Receive the artifact resolve request. XmlElement artifactResolveXml = ArtifactResolver.ReceiveArtifactResolve(Request); ArtifactResolve artifactResolve = new ArtifactResolve(artifactResolveXml); // Get the artifact. HTTPArtifactType4 httpArtifact = new HTTPArtifactType4(artifactResolve.Artifact.ArtifactValue); // Remove the artifact state from the cache. HTTPArtifactState httpArtifactState = HTTPArtifactStateCache.Remove(httpArtifact); if (httpArtifactState == null) { throw new ArgumentException("Invalid artifact."); } // Create an artifact response containing the cached SAML message. ArtifactResponse artifactResponse = new ArtifactResponse(); artifactResponse.Issuer = new Issuer(CreateAbsoluteURL("~/")); artifactResponse.SAMLMessage = httpArtifactState.SAMLMessage; XmlElement artifactResponseXml = artifactResponse.ToXml(); // Send the artifact response. ArtifactResolver.SendArtifactResponse(Response, artifactResponseXml); Trace.Write("IdP", "Processed artifact resolve request"); }