栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用C#的XML中的SAML断言

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用C#的XML中的SAML断言

尝试以下:

using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.Net;using System.Security.Cryptography.X509Certificates;using System.Security.Cryptography.Xml;using System.Text;using System.Threading.Tasks;using System.Xml;namespace Certificate{    class Program    {        const string FILENAME = @"c:temptest.xml";        static void Main(string[] args)        { Xmldocument doc = new Xmldocument(); CreateSoap(doc); XmlElement assertion = (XmlElement)(doc.GetElementsByTagName("saml2:Assertion")[0]); XmlElement security = (XmlElement)(doc.GetElementsByTagName("wsse:Security")[0]);  //added 10-20-17 XmlElement body = (XmlElement)(doc.GetElementsByTagName("soap:Body")[0]); using (WebClient client = new WebClient()) {     byte[] xmlBytes = client.DownloadData(FILENAME);     body.InnerXml = Encoding.UTF8.GetString(xmlBytes); } string pfxpath = @"D:CertificatePrivate-cert.pfx"; X509Certificate2 cert = new X509Certificate2(File.ReadAllBytes(pfxpath), "123456789"); SignXmlWithCertificate(assertion, cert); SignXmlWithCertificate(security, cert);   //added 10-20-17 XmlElement subject = doc.CreateElement("Subject", "saml2"); assertion.AppendChild(subject); CreateSubject(subject); File.WriteAllText(@"D:Certificatedigitallysigned.xml", doc.OuterXml);        }        public static void CreateSoap(Xmldocument doc)        { DateTime date = DateTime.Now; string soap = string.Format(     "<?xml version="1.0"?>" +     "<soap:Envelope" +     " xmlns:soap="http://www.w3.org/2003/05/soap-envelope"" +     " xmlns:wsse11="http://docs.oasisopen.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"" +     " xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"" +     " xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wsswssecurity-utility-1.0.xsd"" +     " xmlns:xs="http://www.w3.org/2001/XMLSchema"" +     " xmlns:ds="http://www.w3.org/2000/09/xmldsig#"" +     " xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"" +     " xmlns:exc14n="http://www.w3.org/2001/10/xml-exc-c14n#">" +     "<soap:Header>" + "<To mustUnderstand="true"" +    " xmlns="http://www.w3.org/2005/08/addressing">https://localhost:443/Gateway/PatientDiscovery/1_0/NwHINService/NwHINPatientDiscovery" + "</To>" + "<Action mustUnderstand="true"" +    " xmlns="http://www.w3.org/2005/08/addressing">urn:hl7-org:v3:PRPA_IN201305UV02:CrossGatewayPatientDiscovery" + "</Action>" + "<ReplyTo mustUnderstand="true"" +    " xmlns="http://www.w3.org/2005/08/addressing">" +    "<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>" + "</ReplyTo>" + "<MessageID mustUnderstand="true"" +    " xmlns="http://www.w3.org/2005/08/addressing">461433e3-4591-453b-9eb6-791c7f5ff882" + "</MessageID>" + "<wsse:Security soap:mustUnderstand="true">" +    "<wsu:Timestamp wsu:Id="_1"" +       " xmlns:ns17="http://docs.oasis-open.org/ws-sx/wssecureconversation/200512"" +       " xmlns:ns16="http://schemas.xmlsoap.org/soap/envelope/">" +       "<wsu:Created>2012-06-08T18:31:44Z</wsu:Created>" +       "<wsu:Expires>2012-06-08T18:36:44Z</wsu:Expires>" +    "</wsu:Timestamp>" +    "<saml2:Assertion ID="_883e64a747a5449b83821913a2b189e6" IssueInstant="{0}" Version="2.0"" +       " xmlns:ds="http://www.w3.org/2000/09/xmldsig#"" +       " xmlns:exc14n="http://www.w3.org/2001/10/xml-excc14n#"" +       " xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"" +       " xmlns:xenc="http://www.w3.org/2001/04/xmlenc#"" +       " xmlns:xs="http://www.w3.org/2001/XMLSchema">" +       "<saml2:Issuer Format="urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName">CN=SAML User,OU=SU,O=SAML User,L=Los Angeles,ST=CA,C=US" +       "</saml2:Issuer>" +    "</saml2:Assertion>" + "</wsse:Security>" +          "</soap:Header>" +          "<soap:Body>" +          "</soap:Body>" +       "</soap:Envelope>",       date.ToUniversalTime().ToString("yyyy-MM-ddThh:mm:ss.fffZ")); //date format //2015-03-09T21:12:02.279Z doc.LoadXml(soap);        }        public static void SignXmlWithCertificate(XmlElement assertion, X509Certificate2 cert)        { SignedXml signedXml = new SignedXml(assertion); signedXml.SigningKey = cert.PrivateKey; Reference reference = new Reference(); reference.Uri = ""; reference.AddTransform(new XmlDsigEnvelopedSignatureTransform()); signedXml.AddReference(reference); KeyInfo keyInfo = new KeyInfo(); keyInfo.AddClause(new KeyInfoX509Data(cert)); signedXml.KeyInfo = keyInfo; signedXml.ComputeSignature(); XmlElement xmlsig = signedXml.GetXml(); assertion.AppendChild(xmlsig);        }        public static void CreateSubject(XmlElement xSubject)        { string subject = "<saml2:NameID Format="urn:oasis:names:tc:SAML:1.1:nameidformat:X509SubjectName">UID=WilmaAnderson</saml2:NameID>" +        "<saml2:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:holder-ofkey">" +          "<saml2:Subject/confirm/iationData>" + "<ds:KeyInfo>" +   "<ds:KeyValue>" +     "<ds:RSAKeyValue>" +       "<ds:Modulus>" +         "maFp5lsEHjhrQQCL0e8cbxMoDpGk1r6Uion/LA2iuD3T+sspJh8TNToQrurpFFVY/u6IzHKIk64s9894pxbwYNwv/LzRVz" +         "M5pOXmCT73KGAg3Cry+QOO5KrN8hR/OXyH90/LIS77FZY+bepqD6qx4URa2/GLll08fu8xh1wPFDMCFAmb2Xz/5gK0fimUXJAWi1+PlNKML" +         "nDGxHgvz5ZwiN1/QwXcQEc1mcJCimLoiCSrk7nvmqkxX4ZZ1dYzQJWdlB8Om4r9Uu96q5cZFTYwSdivLpPFKSzn/2MI9NryZC0VaIBuHRhg" +         "AmspAzM90BjLO5vtiwrrfx/E3uYcMjcSEQ==" +       "</ds:Modulus>" +       "<ds:Exponent>AQAB</ds:Exponent>" +     "</ds:RSAKeyValue>" +   "</ds:KeyValue>" + "</ds:KeyInfo>" +          "</saml2:Subject/confirm/iationData>" +        "</saml2:Subject/confirm/iation>"; xSubject.InnerXml = subject;        }    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/415342.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号