นโยบาย SAMLAssertion

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

อะไร

  • การตรวจสอบสิทธิ์และการให้สิทธิ์ขาเข้า: ตรวจสอบการยืนยัน SAML policy
    ประเภทนโยบาย SAML ช่วยให้พร็อกซี API ตรวจสอบการยืนยัน SAML ที่แนบมากับ คำขอ SOAP ขาเข้าได้ นโยบาย SAML จะตรวจสอบข้อความขาเข้าที่มีการยืนยันสิทธิ์ SAML ที่ลงนามแบบดิจิทัล ปฏิเสธข้อความหากไม่ถูกต้อง และตั้งค่าตัวแปรที่อนุญาตให้นโยบายเพิ่มเติมหรือบริการแบ็กเอนด์เองตรวจสอบข้อมูลในการยืนยันสิทธิ์เพิ่มเติม
  • การสร้างโทเค็นขาออก: สร้างนโยบายการยืนยัน SAML
    ประเภทนโยบาย SAML ช่วยให้พร็อกซี API แนบการยืนยัน SAML กับคำขอ XML ขาออกได้ จากนั้นการยืนยันเหล่านั้นจะพร้อมใช้งานเพื่อให้บริการแบ็กเอนด์ใช้การประมวลผลด้านความปลอดภัยเพิ่มเติมสำหรับการตรวจสอบสิทธิ์และการให้สิทธิ์ได้

ตัวอย่าง

สร้างการยืนยัน SAML

<GenerateSAMLAssertion name="SAML" ignoreContentType="false">
  <CanonicalizationAlgorithm />
  <Issuer ref="reference">Issuer name</Issuer>
  <KeyStore>
    <Name ref="reference">keystorename</Name>
    <Alias ref="reference">alias</Alias>
  </KeyStore>
  <OutputVariable>
    <FlowVariable>assertion.content</FlowVariable>
    <Message name="request">
      <Namespaces>
        <Namespace prefix="test">http://www.example.com/test</Namespace>
      </Namespaces>
      <XPath>/envelope/header</XPath>
    </Message>
  </OutputVariable>
  <SignatureAlgorithm />
  <Subject ref="reference">Subject name</Subject>
  <Template ignoreUnresolvedVariables="false">
    <!-- A lot of XML goes here, in CDATA, with {} around
         each variable -->
  </Template>
</GenerateSAMLAssertion>

สร้างการยืนยัน SAML

ตรวจสอบการยืนยัน SAML

<ValidateSAMLAssertion name="SAML" ignoreContentType="false">
  <Source name="request">
    <Namespaces>
      <Namespace prefix='soap'>http://schemas.xmlsoap.org/soap/envelope/</Namespace>
      <Namespace prefix='wsse'>http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd</Namespace>
      <Namespace prefix='saml'>urn:oasis:names:tc:SAML:2.0:assertion</Namespace>
    </Namespaces>
    <AssertionXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</AssertionXPath>
    <SignedElementXPath>/soap:Envelope/soap:Header/wsse:Security/saml:Assertion</SignedElementXPath>
  </Source>
  <TrustStore>TrustStoreName</TrustStore>
  <RemoveAssertion>false</RemoveAssertion>
</ValidateSAMLAssertion>

การตรวจสอบการยืนยัน SAML


การอ้างอิงองค์ประกอบ

สร้างการยืนยัน SAML

ชื่อช่อง คำอธิบาย
แอตทริบิวต์ name รายการ ชื่อของอินสแตนซ์นโยบาย ชื่อต้องไม่ซ้ำกันใน องค์กร อักขระที่คุณใช้ในชื่อได้จะจำกัดไว้ที่ A-Z0-9._\-$ % อย่างไรก็ตาม UI การจัดการจะบังคับใช้ข้อจำกัดเพิ่มเติม เช่น นำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขออกโดยอัตโนมัติ
แอตทริบิวต์ ignoreContentType รายการ บูลีนที่ตั้งค่าเป็น true หรือ false ได้ โดยค่าเริ่มต้น ระบบจะไม่สร้างการยืนยันหากประเภทเนื้อหาของข้อความไม่ใช่ประเภทเนื้อหา XML หากตั้งค่าเป็น true ระบบจะถือว่าข้อความเป็น XML ไม่ว่า Content-type จะเป็นอะไรก็ตาม
Issuer
ตัวระบุที่ไม่ซ้ำกันของผู้ให้บริการข้อมูลประจำตัว หากมีแอตทริบิวต์ ref ที่ไม่บังคับ ระบบจะกำหนดค่าของผู้ออกที่รันไทม์ตามตัวแปรที่ ระบุ หากไม่มีแอตทริบิวต์ ref ที่ไม่บังคับ ระบบจะใช้ค่าของผู้ออกใบรับรอง
KeyStore
ชื่อของ KeyStore ที่มีคีย์ส่วนตัวและชื่อแทนของคีย์ส่วนตัว ที่ใช้ในการลงนามการยืนยัน SAML แบบดิจิทัล
OutputVariable
FlowVariable
Message เป้าหมายของนโยบาย ค่าที่ใช้ได้คือ message, request และ response เมื่อตั้งค่าเป็น message นโยบายจะเรียกข้อมูลออบเจ็กต์ข้อความตามจุดแนบของนโยบายแบบมีเงื่อนไข เมื่อแนบไปกับโฟลว์คำขอ นโยบายจะเปลี่ยน message เป็นคำขอ และเมื่อแนบไปกับโฟลว์การตอบกลับ นโยบายจะเปลี่ยน message เป็นการตอบกลับ
XPath นิพจน์ XPath ที่ระบุองค์ประกอบในเอกสาร XML ขาออกซึ่งนโยบายจะแนบการยืนยัน SAML
SignatureAlgorithm SHA1 หรือ SHA256
Subject
ตัวระบุที่ไม่ซ้ำกันของเรื่องการยืนยัน SAML หากมีแอตทริบิวต์ ref ที่ไม่บังคับ ค่าของ Subject จะได้รับการกำหนดที่ รันไทม์โดยอิงตามตัวแปรที่ระบุ หากมีแอตทริบิวต์ ref ที่ไม่บังคับ ระบบจะใช้ค่าของ Subject
Template
หากมีอยู่ ระบบจะสร้างการยืนยันโดยการเรียกใช้เทมเพลตนี้ แทนที่ ทุกอย่างที่ระบุด้วย {} ด้วยตัวแปรที่เกี่ยวข้อง แล้วลงนามดิจิทัล ในผลลัพธ์ ระบบจะประมวลผลเทมเพลตตามกฎนโยบาย AssignMessage ดูกำหนดนโยบาย ข้อความ เท่านั้น

ตรวจสอบการยืนยัน SAML

ชื่อช่อง คำอธิบาย
แอตทริบิวต์ name รายการ
ชื่อของอินสแตนซ์นโยบาย ชื่อต้องไม่ซ้ำกันในองค์กร อักขระที่คุณใช้ในชื่อได้จะจำกัดไว้ที่ A-Z0-9._\-$ % อย่างไรก็ตาม UI การจัดการจะบังคับใช้ข้อจำกัดเพิ่มเติม เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขออกโดยอัตโนมัติ
แอตทริบิวต์ ignoreContentType รายการ บูลีนที่ตั้งค่าเป็น true หรือ false ได้ โดยค่าเริ่มต้น ระบบจะไม่สร้างการยืนยันหากประเภทเนื้อหาของข้อความไม่ใช่ประเภทเนื้อหา XML หากตั้งค่าเป็น true ระบบจะถือว่าข้อความเป็น XML ไม่ว่า Content-type จะเป็นอะไรก็ตาม
Source เป้าหมายของนโยบาย ค่าที่ใช้ได้คือ message, request และ response เมื่อตั้งค่าเป็น message นโยบายจะเรียกข้อมูลออบเจ็กต์ข้อความตามจุดแนบของนโยบายแบบมีเงื่อนไข เมื่อแนบไปกับโฟลว์คำขอ นโยบายจะเปลี่ยน message เป็นคำขอ และเมื่อแนบไปกับโฟลว์การตอบกลับ นโยบายจะเปลี่ยน message เป็นการตอบกลับ
XPath
เลิกใช้งานแล้ว บุตรของ Source ใช้ AssertionXPath และ SignedElementXPath
AssertionXPath
บุตรของ Source นิพจน์ XPath ที่ระบุองค์ประกอบในเอกสาร XML ขาเข้าซึ่งนโยบายสามารถดึงการยืนยัน SAML ได้
SignedElementXPath
บุตรของ Source นิพจน์ XPath ที่ระบุองค์ประกอบใน เอกสาร XML ขาเข้าซึ่งนโยบายสามารถดึงองค์ประกอบที่ลงนามแล้ว ซึ่งอาจแตกต่างหรือเหมือนกับ XPath สำหรับ AssertionXPath
TrustStore
ชื่อของ TrustStore ที่มีใบรับรอง X.509 ที่เชื่อถือได้ซึ่งใช้เพื่อตรวจสอบ ลายเซ็นดิจิทัลในข้อความยืนยัน SAML
RemoveAssertion
บูลีนที่ตั้งค่าเป็น true หรือ false ได้ เมื่อ true ระบบจะนำการยืนยัน SAML ออกจากข้อความคำขอก่อน ที่จะส่งต่อข้อความไปยังบริการแบ็กเอนด์

หมายเหตุการใช้งาน

ข้อกำหนดของภาษามาร์กอัปเพื่อยืนยันความปลอดภัย (SAML) จะกำหนดรูปแบบและโปรโตคอลที่ ช่วยให้แอปพลิเคชันแลกเปลี่ยนข้อมูลในรูปแบบ XML เพื่อการตรวจสอบสิทธิ์และ การให้สิทธิ์ได้

"การยืนยันความปลอดภัย" คือโทเค็นที่เชื่อถือได้ซึ่งอธิบายแอตทริบิวต์ของแอป ผู้ใช้แอป หรือผู้เข้าร่วมรายอื่นๆ ในธุรกรรม การยืนยันความปลอดภัยได้รับการจัดการและใช้โดยเอนทิตี 2 ประเภท ดังนี้

  • ผู้ให้บริการข้อมูลประจำตัว: สร้างการยืนยันความปลอดภัยในนามของผู้เข้าร่วม
  • ผู้ให้บริการ: ตรวจสอบการยืนยันความปลอดภัยผ่านความสัมพันธ์ที่เชื่อถือได้กับผู้ให้บริการข้อมูลประจำตัว

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

ประเภทนโยบาย SAML รองรับการยืนยัน SAML ที่ตรงกับเวอร์ชัน 2.0 ของข้อกำหนดหลักของ SAML และเวอร์ชัน 1.0 ของข้อกำหนดโปรไฟล์โทเค็น SAML ของ WS-Security

สร้างการยืนยัน SAML

การประมวลผลนโยบาย

  1. หากข้อความไม่ใช่ XML และไม่ได้ตั้งค่า IgnoreContentType เป็น true ระบบจะ แสดงข้อผิดพลาด
  2. หากตั้งค่า "เทมเพลต" ให้ประมวลผลเทมเพลตตามที่อธิบายไว้สำหรับนโยบาย AssignMessage หากไม่มีตัวแปรใดๆ และไม่ได้ตั้งค่า IgnoreUnresolvedVariables ให้เพิ่มข้อผิดพลาด
  3. หากไม่ได้ตั้งค่า "เทมเพลต" ให้สร้างการยืนยันที่มีค่าของพารามิเตอร์ Subject และ Issuer หรือการอ้างอิง
  4. ลงนามในข้อความยืนยันโดยใช้คีย์ที่ระบุ
  5. เพิ่มการยืนยันลงในข้อความที่ XPath ที่ระบุ

ตรวจสอบการยืนยัน SAML

การประมวลผลนโยบาย

  1. นโยบายจะตรวจสอบข้อความขาเข้าเพื่อยืนยันว่าประเภทสื่อของคำขอเป็น XML โดย ตรวจสอบว่าประเภทเนื้อหาตรงกับรูปแบบ text/(.*+)?xml หรือ application/(.*+)?xml หากประเภทสื่อไม่ใช่ XML และไม่ได้ตั้งค่า <IgnoreContentType> นโยบายจะทำให้เกิดข้อผิดพลาด
  2. นโยบายจะแยกวิเคราะห์ XML หากการแยกวิเคราะห์ไม่สำเร็จ ระบบจะแจ้งข้อผิดพลาด
  3. นโยบายจะดึงองค์ประกอบที่ลงนามและการยืนยันโดยใช้ XPath ที่เกี่ยวข้อง ที่ระบุ (<SignedElementXPath> และ <AssertionXPath>) หากเส้นทางใดเส้นทางหนึ่งไม่แสดงผลองค์ประกอบ นโยบายจะทำให้เกิดข้อผิดพลาด
  4. นโยบายจะยืนยันว่าข้อความยืนยันนั้นเหมือนกับองค์ประกอบที่ลงชื่อ หรือ เป็นองค์ประกอบย่อยขององค์ประกอบที่ลงชื่อ หากไม่เป็นเช่นนั้น นโยบายจะทำให้เกิดข้อผิดพลาด
  5. หากมีองค์ประกอบ <NotBefore> หรือ <NotOnOrAfter> ในการยืนยัน นโยบายจะตรวจสอบการประทับเวลาปัจจุบันกับค่าเหล่านี้ตามที่อธิบายไว้ในส่วน 2.5.1 ของ SAML Core
  6. นโยบายจะใช้กฎเพิ่มเติมสำหรับการประมวลผล "เงื่อนไข" ตามที่อธิบายไว้ ในส่วน 2.5.1.1 ของ SAML Core
  7. นโยบายจะตรวจสอบลายเซ็นดิจิทัล XML โดยใช้ค่า Trust Store (<TrustStore>) ที่อธิบายไว้ข้างต้น หากการตรวจสอบไม่ผ่าน นโยบายจะ ทำให้เกิดข้อผิดพลาด

เมื่อนโยบายดำเนินการเสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด นักพัฒนาพร็อกซีจะมั่นใจได้ในสิ่งต่อไปนี้

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

คุณอาจใช้นโยบายอื่นๆ เช่น ExtractVariables เพื่อแยกวิเคราะห์ XML ดิบของการยืนยัน สำหรับการตรวจสอบที่ซับซ้อนยิ่งขึ้น


ตัวแปรโฟลว์

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

ตัวแปร คำอธิบาย
saml.id รหัสการยืนยัน SAML
saml.issuer "ผู้ออก" การยืนยันที่แปลงจากประเภท XML ดั้งเดิมเป็นสตริง
saml.subject "Subject" ของการยืนยันที่แปลงจากประเภท XML ดั้งเดิมเป็นสตริง
saml.valid แสดงผลเป็นจริงหรือเท็จตามผลการตรวจสอบความถูกต้อง
saml.issueInstant IssueInstant
saml.subjectFormat รูปแบบหัวเรื่อง
saml.scmethod วิธีการยืนยันเรื่อง
saml.scdaddress ที่อยู่ข้อมูลการยืนยันเรื่อง
saml.scdinresponse ข้อมูลการยืนยันเรื่องในการตอบกลับ
saml.scdrcpt ผู้รับข้อมูลการยืนยันเรื่อง
saml.authnSnooa AuthnStatement SessionNotOnOrAfter
saml.authnContextClassRef AuthnStatement AuthnContextClassRef
saml.authnInstant AuthnStatement AuthInstant
saml.authnSessionIndex ดัชนีเซสชัน AuthnStatement

ข้อมูลอ้างอิงข้อผิดพลาด

ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดง และตัวแปรข้อผิดพลาดที่กำหนดโดย Edge เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้มีความสำคัญต่อการทราบว่าคุณจะสร้างกฎความผิดพลาดเพื่อ จัดการกับข้อผิดพลาด หากต้องการเรียนรู้เพิ่มเติม โปรดดูที่สิ่งที่คุณจำเป็นต้องทราบ เกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการ ข้อผิดพลาด

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
SourceNotConfigured องค์ประกอบต่อไปนี้อย่างน้อย 1 รายการสำหรับ Verified SAML Assertion ไม่ได้กำหนดนโยบายหรือว่างเปล่า: <Source>, <XPath> <Namespaces>, <Namespace>
TrustStoreNotConfigured หากองค์ประกอบ <TrustStore> ว่างเปล่าหรือไม่ได้ระบุใน นโยบาย VerifySAMLAssertion จะทำให้การทำให้พร็อกซี API ใช้งานได้ล้มเหลว ต้องระบุ Trust Store ที่ถูกต้อง
NullKeyStoreAlias หากองค์ประกอบย่อย <Alias> ว่างเปล่าหรือไม่ได้ระบุใน <Keystore> ของนโยบาย Generate SAML Assertion แล้วทำให้ API ใช้งานได้ พร็อกซีไม่ทำงาน ต้องมีชื่อแทนคีย์สโตร์ที่ถูกต้อง
NullKeyStore หากองค์ประกอบย่อย <Name> ว่างเปล่าหรือไม่ได้ระบุใน <Keystore> ของนโยบาย GenerateSAMLAssertion แล้ว การทำให้ API ใช้งานได้ พร็อกซีไม่ทำงาน ต้องระบุชื่อคีย์สโตร์ที่ถูกต้อง
NullIssuer หากองค์ประกอบ <Issuer> ว่างเปล่าหรือไม่ได้ระบุในส่วน "สร้าง SAML" นโยบายการยืนยัน การทำให้พร็อกซี API ใช้งานได้ล้มเหลว ต ต้องระบุค่า <Issuer> ที่ถูกต้อง

ตัวแปรความผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาด ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name = "InvalidMediaTpe"
GenerateSAMLAssertion.failed สำหรับการกำหนดค่านโยบายการยืนยัน SAML ที่ตรวจสอบความถูกต้อง คำนำหน้าข้อผิดพลาดคือ ValidateSAMLAssertion GenerateSAMLAssertion.failed = true

ตัวอย่างการตอบสนองข้อผิดพลาด

{
  "fault": {
    "faultstring": "GenerateSAMLAssertion[GenSAMLAssert]: Invalid media type",
    "detail": {
      "errorcode": "steps.saml.generate.InvalidMediaTpe"
    }
  }
}

ตัวอย่างกฎข้อผิดพลาด

<FaultRules>
    <FaultRule name="invalid_saml_rule">
        <Step>
            <Name>invalid-saml</Name>
        </Step>
        <Condition>(GenerateSAMLAssertion.failed = "true")</Condition>
    </FaultRule>
</FaultRules>

หัวข้อที่เกี่ยวข้อง

การแยกตัวแปร: นโยบายแยกตัวแปร