SAML: เหตุใดใบรับรองจึงอยู่ในลายเซ็น


104

ฉันต้องติดตั้ง SSO กับ SAML สำหรับเว็บไซต์ของ บริษัท ของฉัน (ในฐานะผู้อ้างอิง) ส่วนสำคัญนอกหลักสูตรคือการตรวจสอบลายเซ็น นี่คือส่วนลายเซ็นของตัวอย่าง SAML จาก บริษัท คู่ค้าของเรา (ฝ่ายยืนยัน):

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
 <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:Reference URI="#_2152811999472b94a0e9644dbc932cc3" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
     <ec:InclusiveNamespaces PrefixList="ds saml samlp xs" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    </ds:Transform>
   </ds:Transforms>
   <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
   <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">bW1Os7+WykqRt5h0mdv9o3ZF0JI=</ds:DigestValue>
  </ds:Reference>
 </ds:SignedInfo>
 <ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
cgrAN4T/UmobhrkkTi3miiRfbo0Z7aakSZjXuTWlZlu9jDptxPNbOFw8ZbYKZYyuW544wQqgqpnG
gr5GBWILSngURjf2N45/GDv7HMrv/NRMsRMrgVfFsKbcAovQdLAs24O0Q9CH5UdADai1QtDro3jx
nl4x7HaWIo9F8Gp/H1c=
 </ds:SignatureValue>
 <ds:KeyInfo>
  <ds:X509Data>
   <ds:X509Certificate>MIIElzCCA3+gAwIBAgIQNT2i6HKJtCXFUFRB8qYsZjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQG
    EwJGUjEOMAwGA1UEBxMFUGFyaXMxDDAKBgNVBAoTA3BzYTEgMB4GA1UECxMXY2VydGlmaWNhdGUg
    YXV0aG9yaXRpZXMxKDAmBgNVBAMTH0FDIFBTQSBQZXVnZW90IENpdHJvZW4gUHJvZ3JhbXMwHhcN
    MDkwODE5MDcxNTE4WhcNMTEwODE5MDcxNTE5WjCBhjELMAkGA1UEBhMCZnIxHzAdBgkqhkiG9w0B
    CQEWEHBhc3NleHRAbXBzYS5jb20xGDAWBgoJkiaJk/IsZAEBEwhtZGVtb2IwMDEMMAoGA1UEChMD
    cHNhMREwDwYDVQQLEwhwcm9ncmFtczEbMBkGA1UEAxMSVGVzdCAtIFBBU1NFWFQgREVWMIGfMA0G
    CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCuY1nrepgACvDSTLWk5A1cFOJSwDbl6CWfYp3cNYR0K3YV
    e07MDZn+Rv4jo3SusHVFds+mzKX2f8AeZjkA3Me/0yiS9UpS9LQZu9mnhFlZRhmUlDDoIZxovLXN
    aOv/YHmPeTQMQmJZu5TjqraUq7La1c187AoJuNfpxt227N1vOQIDAQABo4IBkTCCAY0wDgYDVR0P
    AQH/BAQDAgWgMB8GA1UdIwQYMBaAFLceWtTfVeRuVCTDQWkmwO4U01X/MAwGA1UdEwEB/wQCMAAw
    gbYGA1UdIASBrjCBqzCBqAYKKoF6ARfOEAEBBDCBmTBBBggrBgEFBQcCARY1aHR0cDovL3JldW5p
    cy5pbmV0cHNhLmNvbS9hdXRvcml0ZS9QQy1BQy1Qcm9ncmFtcy5wZGYwVAYIKwYBBQUHAgIwSDAK
    FgNwc2EwAwIBARo6UG9saXRpcXVlIGRlIENlcnRpZmljYXRpb24gQUMgUFNBIFBldWdlb3QgQ2l0
    cm9lbiBQcm9ncmFtczBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vaW5mb2NlcnQucHNhLXBldWdl
    b3QtY2l0cm9lbi5jb20vQUMtUFNBLVBldWdlb3QtQ2l0cm9lbi1Qcm9ncmFtcy5jcmwwHQYDVR0l
    BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBYGA1UdDgQPBA1BVVRPX0dFTkVSQVRFMA0GCSqGSIb3
    DQEBBQUAA4IBAQCvRtP6bFkOUEHcqc6yUX0Q1Gk2WaAcx4ziUB0tw2GR9I0276JRJR0EGuJ/N6Fn
    3FhLQrSPmS97Xvc9XmiI66fQUdg64g9YqBecdiQlUkR20VLgI6Nq8pldQlWjU2iYlkP15U7VF4Qr
    0Pb2QiIljZUCKdv3qdED2Ri33za46LfykrlwZB0uhTVUxI/AEtjkKVFaZaqanJg+vJyZI5b30z7g
    Ff8L3ht4Z7SFKdmY3IQSGzElIAAUfduzTJX0cwnGSU9D4BJu1BS8hWnYPwhk+nBJ7OFhXdwYQFWq
    fhpBLq+ciJti9OMhcdCSIi0PbrOqzqtX7hZUQOvfShhCTJnl5TJJ</ds:X509Certificate>
  </ds:X509Data>
 </ds:KeyInfo>
</ds:Signature>

สิ่งที่ฉันไม่เข้าใจคือเหตุใดใบรับรองจึงอยู่ในลายเซ็น

ฉันหมายถึงโดยปกติฉันจะได้รับใบรับรองจาก บริษัท ด้วยวิธีที่ปลอดภัยดังนั้นฉันจึงรู้ว่าใบรับรองมาจากพวกเขา และเมื่อการตรวจสอบลายเซ็นสำเร็จฉันทราบว่า บริษัท คู่ค้าของเราได้ลงนามแล้ว

แต่เมื่อใบรับรองอยู่ในลายเซ็นของการตอบกลับ SAML ใคร ๆ ก็ส่งมาได้! สิ่งเดียวที่ฉันรู้คือคำตอบนั้นไม่ได้ถูกปลอมแปลง แต่ประเด็นคือฉันไม่รู้ว่าใครเป็นคนส่ง SAML

ใครช่วยอธิบายให้ฉันฟังหน่อยว่ามันทำงานอย่างไร

คำตอบ:


66

การตอบกลับ SAML มาพร้อมกับลายเซ็นและคีย์สาธารณะสำหรับลายเซ็นนั้น

คุณสามารถใช้คีย์สาธารณะเพื่อตรวจสอบว่าเนื้อหาของการตอบกลับ SAML ตรงกับคีย์หรืออีกนัยหนึ่งคือการตอบกลับนั้นมาจากผู้ที่มีคีย์ส่วนตัวที่ตรงกันกับคีย์สาธารณะในข้อความและไม่ได้รับการตอบกลับ ดัดแปลงด้วย.

ฉันไม่รู้ว่าคุณใช้เทคโนโลยีอะไร แต่ใน. Net คุณสามารถตรวจสอบได้ดังนี้:

// load a new XML document
var assertion = new XmlDocument { PreserveWhitespace = true };
assertion.LoadXml("The SAML XML that you were sent");

// use a namespace manager to avoid the worst of xpaths
var ns = new XmlNamespaceManager(assertion.NameTable);
ns.AddNamespace("samlp", @"urn:oasis:names:tc:SAML:2.0:protocol");
ns.AddNamespace("asrt", @"urn:oasis:names:tc:SAML:2.0:assertion");
ns.AddNamespace("dsig", @"http://www.w3.org/2000/09/xmldsig#");

// get nodes down to the signature
var responseNode = assertion.SelectSingleNode("/samlp:Response", ns);
var assertionNode = responseNode.SelectSingleNode("asrt:Assertion", ns);
var signNode = assertionNode.SelectSingleNode("dsig:Signature", ns);

// load the XML signature
var signedXml = new SignedXml(assertion.DocumentElement);
signedXml.LoadXml(signNode as XmlElement);

// get the certificate, basically:
//     signedXml.KeyInfo[0].Certificates[0]
// ...but with added casting
var certificate = GetFirstX509Certificate(signedXml);

// check the key and signature match
bool isSigned = signedXml.CheckSignature(certificate, true);

เพียงแค่ตรวจสอบว่าข้อความนั้นมาจากใคร คุณต้องตรวจสอบเพิ่มเติมว่าข้อความนั้นมาจากบุคคลที่คุณไว้วางใจและการตรวจสอบนี้ช้ากว่า - จำเป็นต้องมีการเพิกถอนและอาจต้องตรวจสอบใบรับรองทั้งหมด

โดยปกติจะเป็นรายการคีย์สาธารณะที่คุณจะยอมรับการตอบกลับ SAML

จากนั้นคุณสามารถตรวจสอบได้ว่าข้อความนี้ไม่ได้ถูกดัดแปลงและมาจากบุคคลที่คุณไว้วางใจดังนั้นคุณจึงสามารถอนุญาตรายละเอียดผู้ใช้ที่ระบุในแอตทริบิวต์ SAML ที่ให้มา

คุณสามารถมีคีย์สาธารณะได้แล้วซึ่งหมายความว่าลายเซ็นไม่จำเป็นต้องรวมคีย์สาธารณะอีกครั้ง แต่คุณยังสามารถมีผู้ส่งที่เป็นไปได้หลายรายหรือแม้แต่กลุ่มผู้ส่งที่รู้จักกัน

ตัวอย่างเช่นคุณอาจมีผู้ให้บริการที่เชื่อถือได้สองราย - ในกรณีใดก็ตามที่คุณตรวจสอบว่าข้อความนั้นไม่ได้ถูกดัดแปลงก่อนที่จะตรวจสอบว่าคุณเชื่อถือผู้ให้บริการรายใดหรือไม่ หากคีย์ไม่ได้อยู่ในลายเซ็นการยืนยันอาจมีขนาดเล็กลงเล็กน้อย แต่ตอนนี้คุณต้องรู้ล่วงหน้าว่าการยืนยันตัวตนมาจากผู้ให้บริการข้อมูลประจำตัวใด

ดังนั้นมีสองเหตุผลหลักที่ทำให้คีย์สาธารณะอยู่ในลายเซ็น:

  1. การตรวจสอบการงัดแงะนั้นเร็วกว่าการตรวจสอบตัวตนและสามารถแยกได้หากทราบคีย์สาธารณะ
  2. ข้อมูลประจำตัวหลายตัวรองรับได้ง่ายกว่ามากหากคีย์อยู่ในการยืนยัน

3
@svlada การยืนยัน SAML ไม่จำเป็นต้องมีการเข้ารหัสของตัวเองเนื่องจากข้อความสามารถส่งผ่าน SSL ได้ - เซสชันผู้ใช้ทั้งหมดควรเป็น HTTPS เนื่องจากการตรวจสอบว่าผู้ส่งที่รู้จักและเชื่อถือได้ลงนามในการยืนยันและไม่มีการดัดแปลงก็เพียงพอแล้ว
Keith

5
@svlada ไม่ควรทำการตรวจสอบสิทธิ์โดยใช้ HTTP (ทุกชนิด) หากไม่มี SSL การเข้ารหัสใบรับรองจะหยุดชายที่อยู่ตรงกลาง (MitM) จากการอ่าน แต่จะไม่หยุดพวกเขาจากการใช้ซ้ำในลักษณะเดียวกับการโจมตี MitM ที่ใช้คุกกี้
Keith

8
การตอบกลับ SAML ไม่จำเป็นต้องมีคีย์สาธารณะสำหรับลายเซ็นนั้น ส่วนที่ 5.4.5 ของข้อมูลจำเพาะ SAML2 ระบุว่า "ลายเซ็น XML กำหนดการใช้งานองค์ประกอบ <ds: KeyInfo> SAML ไม่ต้องการการใช้ <ds: KeyInfo> และไม่ได้กำหนดข้อ จำกัด ใด ๆ ในการใช้งานดังนั้น <ds : KeyInfo> อาจไม่อยู่ " คุณสามารถตรวจสอบลายเซ็นได้หากมีการให้คีย์สาธารณะแก่คุณด้วยวิธีอื่นเช่นเก็บไว้ในที่เก็บใบรับรองในพื้นที่ของคุณก่อนที่จะใช้งาน SAML consumer
Sam Rueby

2
@ Sam.Rueby อาฉันจะแก้ไขให้ ทุกการใช้งานที่ฉันเห็นมีคีย์
Keith

5
@Jez โปรโตคอลทั้งหมดนี้สับสนราวกับนรก โดยทั่วไปการยืนยันนั้นมีอยู่ในตัวคุณสามารถตรวจสอบได้ว่าไม่มีการดัดแปลงตั้งแต่คีย์ส่วนตัวลงนาม คุณสามารถทำได้โดยไม่ต้องมีกุญแจสาธารณะด้วยตัวเอง (ฉันรู้ว่าคำยืนยันนี้มาจากเดฟและไม่มีใครยุ่งเกี่ยวกับมันตั้งแต่เดฟเซ็นสัญญา แต่ฉันอาจไม่รู้ว่าเดฟเป็นใครหรือฉันจะเชื่อใจเขาได้หรือไม่) จากนั้นหลังจากตรวจสอบแล้วฉันสามารถตรวจสอบคีย์สาธารณะว่าเป็นคีย์สาธารณะที่ฉันเชื่อถือได้ ฉันคิดว่านี่เป็นเพราะอาจมีความล่าช้าในการตรวจสอบขั้นสุดท้ายนั้น (ในขณะที่ฉันไปถามเกี่ยวกับสำนักงานว่ามีใครรู้จัก Dave หรือไม่)
Keith

42

เหตุผลที่มีการระบุคีย์สาธารณะในการตอบกลับ SAML เนื่องจากข้อมูลเมตาสำหรับผู้ให้บริการข้อมูลประจำตัวสามารถระบุคีย์สาธารณะได้หลายรายการ สิ่งนี้ช่วยให้ผู้ให้บริการข้อมูลประจำตัว (ฝ่ายยืนยัน) สามารถระบุคีย์สาธารณะที่ถูกต้องให้กับผู้ให้บริการ (บุคคลที่เกี่ยวข้อง) เพื่อใช้ในการตรวจสอบลายเซ็นในการตอบกลับ SAML

ตัวอย่างเช่นข้อมูลเมตาของบุคคลที่ยืนยันอาจมีลักษณะดังนี้:

<KeyDescriptor>
    <ds:KeyInfo>
        <ds:X509Data>
            <ds:X509Certificate>BQUAMCMBgN...XerfXHHEZYZs=</ds:X509Certificate>
        </ds:X509Data>
        <ds:X509Data>
            <ds:X509Certificate>H24a88h7zl...2zo28hH5DK78=</ds:X509Certificate>
        </ds:X509Data>
    </ds:KeyInfo>
</KeyDescriptor>

แม้ว่า SAML 2.0 จะไม่ได้กำหนดให้รวมคีย์สาธารณะ แต่ฉันไม่พบผู้ให้บริการข้อมูลประจำตัวใด ๆ ที่ไม่รวมคีย์สาธารณะในการตอบกลับ SAML หากไม่ได้ระบุคีย์สาธารณะพร้อมกับการยืนยันก็ควรอนุมานผ่านข้อมูลเมตาของผู้ให้บริการข้อมูลประจำตัว

ในแง่ของการเชื่อถือคีย์สาธารณะที่ส่งในการตอบกลับคีย์สาธารณะต้องตรงกับคีย์ที่กำหนดไว้ในข้อมูลเมตาของผู้ให้บริการข้อมูลประจำตัว โดยปกติแล้วรายละเอียดข้อมูลเมตาเหล่านี้จะได้รับจากลูกค้าของคุณที่ต้องการใช้ SSO เพื่อเข้าถึงแอปพลิเคชันของคุณคุณจะรู้ได้อย่างชัดเจนว่าต้องการค้นหาคีย์สาธารณะใด (กล่าวคือคุณอาจจะขอให้พวกเขาระบุ url ข้อมูลเมตาของผู้ให้บริการข้อมูลประจำตัวของพวกเขา คุณสามารถดึงข้อมูลเมตาของพวกเขาและดึงข้อมูลที่เกี่ยวข้องเช่นคีย์สาธารณะจุดสิ้นสุดของผู้ออกตราสาร ฯลฯ )

หากคีย์สาธารณะที่มาพร้อมกับลายเซ็นเป็นรหัสที่ไม่ได้ระบุไว้ในข้อมูลเมตาระบบ SAML จะต้องสร้างข้อผิดพลาดเมื่อตรวจสอบลายเซ็น


10
ฉันคิดว่านี่เป็นจุดสำคัญที่ใบรับรองในการตอบกลับต้องตรงกับใบรับรองในข้อมูลเมตา มิฉะนั้นฉันสามารถลงชื่อในการตอบกลับด้วยใบรับรองใดก็ได้ที่ฉันต้องการและส่งคีย์สาธารณะเพื่อการตรวจสอบ
dana

6
ฉันคิดว่านี่เป็นคำตอบที่ดีที่สุดสำหรับฉันแล้วดูเหมือนว่าคนอื่น ๆ จะพลาดประเด็นที่ว่าการตรวจสอบข้อความเทียบกับคีย์ที่ประกาศในข้อความนั้นไม่ได้ให้ความปลอดภัยใด ๆ กับคุณ ... คุณยังต้องตรวจสอบคีย์ในข้อความ ถูกต้อง! (ในกรณีนี้คุณต้องแน่ใจว่าอยู่ในข้อมูลเมตาที่เชื่อถือได้)
rchampour ก่อนหน้านี้

4
เห็นด้วยอย่างยิ่งกับความคิดเห็นข้างต้น - ใบรับรองที่ส่งผ่านในข้อความนั้นไร้ค่าในตัวมันเองเพราะจุดสำคัญทั้งหมดของการลงนามคือการตรวจสอบว่าข้อความนั้นน่าเชื่อถือ หากข้อความไม่น่าเชื่อถือแสดงว่าไม่ใช่ใบรับรองที่แถมมา
Jez

@jbindel - ขอบคุณ! ฉันมีคำถามใหม่โดยถ้าเป็นไปได้: ใบรับรอง SAML นี้ต้องตรงกับใบรับรองจริงปัจจุบันหรือใช้เพื่อให้ได้ข้อมูลเมตาที่ตรงกันเท่านั้น ฉันถามสิ่งนี้ในขณะที่ฉันกังวลเกี่ยวกับผลกระทบในการดำเนินงานของ IdP ที่ป้อนใบรับรองใหม่ - ณ จุดนี้น่าจะไม่ตรงกับคีย์ข้อมูลเมตา ถ้าทั้ง 2 ผูกกันฉันก็กังวลอีกครั้ง ผลกระทบในการดำเนินงาน ได้แก่ จนกว่าทั้ง SP และ IdP จะอัปเดตคีย์ SAML2 ด้วยตนเอง SSO ทั้งหมดจะล้มเหลวและผลที่ตามมาจะส่งผลต่อผู้ใช้ SSO หากการติดต่อทางเทคนิคไม่สมบูรณ์ (ขออภัยหากคำถามโง่ ๆ )
Pancho

ข้อมูลเมตา SP ต้องมีใบรับรอง แต่ข้อมูลเมตา SP สามารถระบุทั้งใบรับรอง IdP เก่าและใหม่ได้ หาก IdP กำลังอัปเดตใบรับรองก็สามารถเพิ่มลงในข้อมูลเมตา SP ได้ เมื่อ IdP ควรทำโดยใช้ใบรับรองเก่าคุณสามารถลบออกจากข้อมูลเมตา SP ได้ ที่อยู่ในสิ่งที่คุณถามหรือไม่? ฉันรู้ว่าสิ่งนี้ใช้ได้ดีกับ Shibboleth SP ไฟล์ข้อมูลเมตา SP จำเป็นต้องมี<KeyDescriptor use="signing">องค์ประกอบสำหรับใบรับรอง IdP ที่ SP จะยอมรับ
jbindel

8

ส่วนสาธารณะของใบรับรองการลงนามอยู่ในข้อความ SAML สิ่งนี้ใช้เพื่อตรวจสอบลายเซ็นของโทเค็นเองและแน่นอนเพื่อให้ผู้รับสามารถบอกได้ว่าใครเป็นผู้ออกโทเค็นและปฏิบัติตามนั้น

ความจริงที่ว่าในนั้นเป็นส่วนหนึ่งของข้อกำหนดลายเซ็นดิจิทัล XML จึงไม่ได้เจาะจงอะไรกับ SAML หากไม่มีใบรับรองคุณจะบอกได้อย่างไรว่าโทเค็นมาจากไหนและคุณจะตรวจสอบความถูกต้องได้อย่างไร

XmlDSig ระบุวิธีการอื่นคุณสามารถระบุคีย์การลงนามตามหัวเรื่องหมายเลขซีเรียลแฮช ฯลฯ แต่ถือว่าฝ่ายรับมีใบรับรองสาธารณะ สำหรับ SAML อาจไม่เป็นเช่นนั้นดังนั้นการฝังส่วนสาธารณะของใบรับรอง X509


1
"หากไม่มีใบรับรองคุณจะบอกได้อย่างไรว่าโทเค็นมาจากไหนและคุณจะตรวจสอบความถูกต้องได้อย่างไร" - คุณกำลังพูดถึงอะไร? เพื่อที่จะไว้วางใจลายเซ็นในข้อความ SAML คุณต้องแล้วมีรายชื่อของใบรับรองสาธารณะที่เชื่อถือได้ คุณสามารถใช้Issuerองค์ประกอบและเก็บใบรับรองของผู้ออกหลักทรัพย์นั้นกับที่และรับใบรับรองกับที่ที่จะตรวจสอบลายเซ็นสำหรับข้อความนี้
Jez

2
ไม่จริงเลย Jez คุณสามารถไว้วางใจผู้ออกใบรับรองเช่น CA โดยไม่ต้องเชื่อถือใบรับรองแต่ละฉบับที่เป็นปัญหาและไม่ต้องเก็บสำเนาใบรับรองทั้งหมดไว้ในเครื่อง
blowdart

4
blowdart นั่นหมายความว่าคุณไว้วางใจโทเค็น saml ที่ลงนามโดยใบรับรองที่ถูกต้องอื่น ๆ ที่ออกโดย CA ไม่ซื้อไม่ได้แล้ว! เพื่อให้แน่ใจว่าโทเค็นของคุณมาจากแหล่งที่มาที่ถูกต้องตามที่ @Jez กล่าวถึงคุณควรมีรายการใบรับรองสาธารณะที่เชื่อถือได้
อาทิตย์

2
@ ซันไม่ถูกต้อง นั่นเหมือนกับการบอกว่า Wells Fargo สามารถแอบอ้างเป็น Bank of America ได้หากพวกเขามี CA เดียวกัน ใบรับรอง X509 มี DN หัวเรื่องที่สามารถตรวจสอบความถูกต้องสำหรับข้อมูลประจำตัวที่ถูกต้อง
Paul Draper

+1 โดยเฉพาะอย่างยิ่งสำหรับการระบุว่านี่เป็นส่วนหนึ่งของข้อกำหนดลายเซ็นดิจิทัล XML ซึ่งเป็นสิ่งที่น้อยกว่าที่ชัดเจนสำหรับมือใหม่และเป็นสิ่งสำคัญสำหรับการทำความเข้าใจว่าข้อความถูกประมวลผลจริงอย่างไรเนื่องจากการใช้งาน SAML เกือบทั้งหมดต้องอาศัยไลบรารี XML ในการทำ ยกของหนัก
BryKKan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.