zoukankan      html  css  js  c++  java
  • 解析SAML文件

            string msg = "<SOAP-ENV:Envelope xmlns:SOAP-ENV=\"http://schemas.xmlsoap.org/soap/envelope//">";
            msg += "<SOAP-ENV:Body>";
            msg += "  <samlp:ArtifactResponse xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"";
            msg += "   xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"8292855779514728a303b68636649b90\"";
            msg += "   IssueInstant=\"2010-07-13 02:42:58\" InResponseTo=\"faa4fee5be6b4726ad559c450171fdca\"";
            msg += "   Version=\"2.0\">";
            msg += "   <samlp:Status>";
            msg += "    <samlp:StatusCode Value=\"urn:oasis:names:tc:SAML:2.0:status:Success\" />";
            msg += "   </samlp:Status>";
            msg += "   <samlp:Response xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"";
            msg += "     xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance/" ID=\"fc8ef5d6487149c4a9195f6a55628dba\"";
            msg += "     IssueInstant=\"2010-07-13 02:44:34\" InResponseTo=\"0f37aa7a104a41ab8804f69f414bd06a\"";
            msg += "     Version=\"2.0\">";
            msg += "     <saml:Issuer>https://ac.chinamobile.com/</saml:Issuer>";
            msg += "     <samlp:Status>";
            msg += "      <samlp:StatusCode Value=\"urn:oasis:names:tc:SAML:2.0:status:Success\" />";
            msg += "     </samlp:Status>";
            msg += "     <saml:Assertion ID=\"8b208dd8ee8b4570b44ae201e0f1a75f\"";
            msg += "      Version=\"2.0\" IssueInstant=\"2010-07-13 02:44:34\">";
            msg += "      <saml:Issuer>https://ac.chinamobile.com/</saml:Issuer>";
            msg += "      <saml:Subject>";
            msg += "       <saml:NameID Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\">13612345678</saml:NameID>";
            msg += "      </saml:Subject>";
            msg += "      <saml:Conditions NotBefore=\"2010-07-13 02:44:34\"";
            msg += "       NotOnOrAfter=\"2010-07-13 04:14:34\" />";
            msg += "       <saml:AttributeStatement>";
            msg += "        <saml:Attribute";
            msg += "        NameFormat=\"urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified\"";
            msg += "        Name=\"userinfo\">";
            msg += "           <saml:AttributeValue xsi:type=\"xs:string\">MSISDN</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">Province</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">name</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">brand</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">status</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\"> Date </saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">NickName</saml:AttributeValue>";
            msg += "             <saml:AttributeValue xsi:type=\"xs:string\">139MailStatus</saml:AttributeValue>";
            msg += "           <saml:AttributeValue xsi:type=\"xs:string\">FetionStatus</saml:AttributeValue>";
            msg += "        </saml:Attribute>";
            msg += "        </saml:AttributeStatement>";
            msg += "       </saml:Assertion>";
            msg += "      </samlp:Response>";
            msg += "  </samlp:ArtifactResponse>";
            msg += " </SOAP-ENV:Body>";
            msg += "</SOAP-ENV:Envelope>";

    ************************

    public void ParseSAML(string strSAML)
        {
            XmlDocument xDoc = new XmlDocument();
            xDoc.LoadXml(strSAML);

            XmlNamespaceManager xMan = new XmlNamespaceManager(xDoc.NameTable);
            xMan.AddNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");
            xMan.AddNamespace("samlp", "urn:oasis:names:tc:SAML:2.0:protocol");
            xMan.AddNamespace("saml", "urn:oasis:names:tc:SAML:2.0:assertion");

            XmlNode xNode = null;

            xNode = xDoc.SelectSingleNode("SOAP-ENV:Envelope/SOAP-ENV:Body/samlp:ArtifactResponse/samlp:Response/samlp:Status/samlp:StatusCode/@Value", xMan);
            if (xNode != null)
            {
                string statusCode = xNode.Value;
                Response.Write("statusCode=" + statusCode + "<br />");
                Regex reg = new Regex(@"urn:oasis:names:tc:SAML:2.0:status:\w+");
                statusCode = reg.Match(statusCode).Value.Replace("urn:oasis:names:tc:SAML:2.0:status:", "");
                Response.Write("statusCode=" + statusCode + "<br />");
            }

            xNode = xDoc.SelectSingleNode("SOAP-ENV:Envelope/SOAP-ENV:Body/samlp:ArtifactResponse/samlp:Response/saml:Assertion/saml:Subject/saml:NameID", xMan);
            if (xNode != null)
            {
                string NameID = xNode.InnerText;
                Response.Write("NameID=" + NameID + "<br />");
            }

            XmlNodeList nl = xDoc.SelectSingleNode("SOAP-ENV:Envelope/SOAP-ENV:Body/samlp:ArtifactResponse/samlp:Response/saml:Assertion/saml:AttributeStatement/saml:Attribute[@Name = 'userinfo']", xMan).ChildNodes;
            foreach (XmlNode xn in nl)
            {
                if (xn != null)
                {
                    string firstName = xn.InnerText;
                    Response.Write("firstName=" + firstName + "<br />");
                }
            }
        }

    ********************************
  • 相关阅读:
    Redis学习笔记
    Springboot + Tomcat跑项目出现端口被占用的问题
    按层打印二叉树
    打印二叉树的镜像——剑指offer
    判断树的子结构——剑指offer
    实习半个月的感想
    使用KMP算法判断是否为旋转词
    微信双开
    win10 右键添加cmd当前目录打开
    勒索邮件
  • 原文地址:https://www.cnblogs.com/94cool/p/1830746.html
Copyright © 2011-2022 走看看