AuthBridge.Protocols.Saml.AuthRequest.GetRequest C# (CSharp) Метод

GetRequest() публичный Метод

public GetRequest ( AuthRequestFormat format ) : string
format AuthRequestFormat
Результат string
        public string GetRequest(AuthRequestFormat format)
        {
            const string protocol = "urn:oasis:names:tc:SAML:2.0:protocol";
            const string assertion = "urn:oasis:names:tc:SAML:2.0:assertion";
            using (var sw = new StringWriter())
            {
                var xws = new XmlWriterSettings {OmitXmlDeclaration = true};
                using (var xw = XmlWriter.Create(sw, xws))
                {
                    xw.WriteStartElement("samlp", "AuthnRequest", protocol);
                    xw.WriteAttributeString("ID", Id);
                    xw.WriteAttributeString("Version", "2.0");
                    xw.WriteAttributeString("IssueInstant", _issueInstant);
                    xw.WriteAttributeString("ProtocolBinding", "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST");
                    xw.WriteAttributeString("AssertionConsumerServiceURL", _assertionConsumerServiceUrl);

                    xw.WriteStartElement("saml", "Issuer", assertion);
                    xw.WriteString(_issuer);
                    xw.WriteEndElement();

                    xw.WriteStartElement("samlp", "NameIDPolicy", protocol);
                    xw.WriteAttributeString("Format", "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified");
                    xw.WriteAttributeString("AllowCreate", "true");
                    xw.WriteEndElement();

                    if (!string.IsNullOrEmpty(_audienceRestriction))
                    {
                        xw.WriteStartElement("saml", "Conditions", assertion);
                        xw.WriteStartElement("saml", "AudienceRestriction", assertion);
                        xw.WriteStartElement("saml", "Audience", assertion);
                        xw.WriteString(_audienceRestriction);
                        xw.WriteEndElement();
                        xw.WriteEndElement();
                        xw.WriteEndElement();
                    }

                    xw.WriteStartElement("samlp", "RequestedAuthnContext", protocol);
                    xw.WriteAttributeString("Comparison", _requestedAuthnContextComparisonMethod);

                    foreach (var authnContextClassRef in _authnContextClassRefs)
                    {
                        xw.WriteStartElement("saml", "AuthnContextClassRef", assertion);
                        xw.WriteString(authnContextClassRef);
                        xw.WriteEndElement();
                    }

                    xw.WriteEndElement();

                    xw.WriteEndElement();
                }
                var result = sw.ToString();
                byte[] compressedBytes = null;
                if (format.HasFlag(AuthRequestFormat.Compressed))
                {
                    compressedBytes = Compress(result);
                }
                if (format.HasFlag(AuthRequestFormat.Base64))
                {
                    result = Convert.ToBase64String(compressedBytes ?? Encoding.ASCII.GetBytes(result));
                }
                if (format.HasFlag(AuthRequestFormat.UrlEncode))
                {
                    result = HttpUtility.UrlEncode(result);
                }

                return result;
            }
        }

Usage Example

Пример #1
0
        public override void ProcessSignInRequest(Scope scope, HttpContextBase httpContext)
        {
            var samlRequest = new AuthRequest(MultiProtocolIssuer.ReplyUrl.ToString(), _issuer, _audienceRestriction, _requestedAuthnContextComparisonMethod, _authnContextClassRefs);
            var preparedRequest = samlRequest.GetRequest(AuthRequest.AuthRequestFormat.Base64 | AuthRequest.AuthRequestFormat.Compressed | AuthRequest.AuthRequestFormat.UrlEncode);
            var returnUrl = GetReturnUrlQueryParameterFromUrl(httpContext.Request.Url.AbsoluteUri);
            httpContext.Response.Redirect(string.Format("{0}?SAMLRequest={1}&RelayState={2}", _identityProviderSSOURL, preparedRequest, returnUrl));

            httpContext.Response.End();
        }
All Usage Examples Of AuthBridge.Protocols.Saml.AuthRequest::GetRequest