사용자 지정 바인딩에 Saml Assertion 추가
Nov 14 2020
이 CustomBinding이 있습니다.
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 ()를 사용할 수 있다고 생각했지만 Assertion 요소를 구성하는 방법을 모르겠습니다.
답변
jdweng Nov 14 2020 at 11:11
어제 이전 게시물에서 말했듯이 파일에서 템플릿을 읽습니다. xml linq를 사용하여 아래 코드와 같은 코드에 넣을 수도 있습니다. 파일에서 읽는 경우 Parse () 메서드를 Load () 메서드로 바꿉니다. :
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);
}
}
}