एक कस्टम बाइंडिंग में Saml Assertion जोड़ें
Nov 14 2020
मेरे पास यह कस्टमबाइंडिंग है:
var sec = new AsymmetricSecurityBindingElement(
new X509SecurityTokenParameters(X509KeyIdentifierClauseType.Any, SecurityTokenInclusionMode.Never),
new X509SecurityTokenParameters(X509KeyIdentifierClauseType.Any, SecurityTokenInclusionMode.AlwaysToRecipient));
sec.MessageSecurityVersion = MessageSecurityVersion.WSSecurity10WSTrust13WSSecureConversation13WSSecurityPolicy12BasicSecurityProfile10;
sec.SecurityHeaderLayout = SecurityHeaderLayout.Strict;
sec.IncludeTimestamp = true;
sec.SetKeyDerivation(false);
sec.KeyEntropyMode = System.ServiceModel.Security.SecurityKeyEntropyMode.ServerEntropy;
sec.EnableUnsecuredResponse = true;
CustomBinding myBinding = new CustomBinding();
myBinding.Elements.Add(sec);
myBinding.Elements.Add(new TextMessageEncodingBindingElement(MessageVersion.Soap11, Encoding.UTF8));
myBinding.Elements.Add(new HttpsTransportBindingElement());
मैं इस तरह कुछ SAML अभिकथन जोड़ना चाहूंगा:
<saml:Assertion xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" saml:ID="authorization-assertion" saml:IssueInstant="2020-11-12T09:10:27Z" saml:Version="2.0" wsu:Id="authorization-assertion" xsi:schemaLocation="urn:oasis:names:tc:SAML:2.0:assertion saml-schema-assertion-2.0.xsd">
<saml:Issuer>COMPANY</saml:Issuer>
<saml:Subject>
<saml:nameID>02942630753.localhost.com</saml:nameID>
</saml:Subject>
<saml:AuthzDecisionStatement Decision="Permit" Resource="IDocument">
<saml:Action Namespace="http://FSE/IDocumentService"/>
</saml:AuthzDecisionStatement>
<saml:AttributeStatement/>
</saml:Assertion>
मैंने सोचा कि मैं उपयोग कर सकता हूँ: myBinding.Elements.Add (), लेकिन मैं नहीं जानता कि कैसे निर्माण तत्व का निर्माण करना है।
जवाब
jdweng Nov 14 2020 at 11:11
जैसा कि मैंने आपकी पिछली पोस्ट पर कल एक फ़ाइल से एक टेम्पलेट पढ़ने के लिए कहा था। आप इसे xml linq का उपयोग करके नीचे दिए गए कोड की तरह कोड में भी डाल सकते हैं। यदि आप एक फ़ाइल से पढ़ते हैं तो पार्स () विधि को लोड () विधि से बदलें। :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
string assertion =
"<saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"" +
" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd\"" +
" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"" +
" saml:ID=\"authorization-assertion\"" +
" saml:IssueInstant=\"2020-11-12T09:10:27Z\"" +
" saml:Version=\"2.0\"" +
" wsu:Id=\"authorization-assertion\"" +
" xsi:schemaLocation=\"urn:oasis:names:tc:SAML:2.0:assertion saml-schema-assertion-2.0.xsd\">" +
"<saml:Issuer>COMPANY</saml:Issuer>" +
"<saml:Subject>" +
"<saml:nameID>02942630753.localhost.com</saml:nameID>" +
"</saml:Subject>" +
"<saml:AuthzDecisionStatement Decision=\"Permit\" Resource=\"IDocument\">" +
"<saml:Action Namespace=\"http://FSE/IDocumentService\"/>" +
"</saml:AuthzDecisionStatement>" +
"<saml:AttributeStatement/>" +
"</saml:Assertion>";
XDocument doc = XDocument.Parse(assertion);
}
}
}