使用C#在XML中进行SAML断言

这是我面临的问题,需要一些帮助/指导。


我已经从我的引擎生成了一条XML消息,需要将其解析为服务。为此,我必须将该消息更改为SOAP消息并在其上插入SAML令牌。我正在尝试使用C#代码执行此操作。下面是我生成的输入消息和预期输出:


输入消息:


删除已在SOAP正文中插入的输入消息


期望的输出消息:


<?xml version='1.0' encoding='UTF-8'?>

<S:Envelope

    xmlns:S="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#">

    <S: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 S: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>

    

使用X509证书我可以创建签名部分。但是,我无法创建SAML断言和SOAP消息。如果有人可以帮助/指导我这将是一个很大的帮助。这是我在C#中的代码:


删除我的代码因为它已经是主代码库的一部分


料青山看我应如是
浏览 728回答 3
3回答

慕标琳琳

感谢您提供详细信息..我收到了SOAP消息。但XML应该在<soap:Body> </ soap:Body>中。签名也应该位于<ds:SignedInfo>标记内。请参阅我提到所需格式的输出消息。

侃侃无极

更改自:doc.LoadXml(Encoding.UTF8.GetString(xmlBytes));&nbsp;To:issuer.InnerText = Encoding.UTF8.GetString(xmlBytes);
打开App,查看更多内容
随时随地看视频慕课网APP