นโยบาย GenerateJWT

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

อะไร

สร้าง JWT ที่มีการลงนามพร้อมชุดการอ้างสิทธิ์ที่กำหนดค่าได้ JWT สามารถส่งคืนไปยัง ไคลเอ็นต์ ส่งไปยังเป้าหมายแบ็กเอนด์ หรือใช้วิธีอื่น ดูรายละเอียดข้อมูลเบื้องต้นได้ที่ภาพรวมของนโยบายของ JWS และ JWT

วิดีโอ

ชมวิดีโอสั้นๆ เพื่อดูวิธีสร้าง JWT ที่มีการลงชื่อ

ตัวอย่าง

สร้าง JWT ที่ลงนามด้วย HS256 อัลกอริทึม

นโยบายตัวอย่างนี้สร้าง JWT ใหม่และลงนามโดยใช้อัลกอริทึม HS256 HS256 ใช้ เกี่ยวกับความลับที่ใช้ร่วมกันสำหรับทั้งการลงชื่อและยืนยันลายเซ็น

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

การกำหนดค่านโยบายที่นี่จะสร้าง JWT ที่มีชุดการอ้างสิทธิ์มาตรฐานตามที่กำหนดโดย ตามข้อกำหนดของ JWT ซึ่งรวมถึงวันหมดอายุ 1 ชั่วโมง และการอ้างสิทธิ์เพิ่มเติม คุณสามารถ รวมการอ้างสิทธิ์เพิ่มเติมได้มากเท่าที่คุณต้องการ ดูข้อมูลอ้างอิง Element สำหรับรายละเอียดเกี่ยวกับ ข้อกำหนดและตัวเลือกสำหรับแต่ละองค์ประกอบในนโยบายตัวอย่างนี้

<GenerateJWT name="JWT-Generate-HS256">
    <DisplayName>JWT Generate HS256</DisplayName>
    <Algorithm>HS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <SecretKey>
        <Value ref="private.secretkey"/>
        <Id>1918290</Id>
    </SecretKey>
    <ExpiresIn>1h</ExpiresIn>
    <Subject>monty-pythons-flying-circus</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>fans</Audience>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

JWT ที่ได้จะมีส่วนหัวนี้ ...

{
  "typ" : "JWT", 
  "alg" : "HS256",
  "kid" : "1918290"
}

... และจะมีเพย์โหลดที่มีเนื้อหามีลักษณะดังนี้

{ 
  "sub" : "monty-pythons-flying-circus",
  "iss" : "urn://apigee-edge-JWT-policy-test",
  "aud" : "show",
  "iat" : 1506553019,
  "exp" : 1506556619,
  "jti" : "BD1FF263-3D25-4593-A685-5EC1326E1F37",
  "show": "And now for something completely different."
}

ค่าของการอ้างสิทธิ์ iat, exp และ jti จะแตกต่างกันไป

สร้าง JWT ที่ลงชื่อด้วย RS256 อัลกอริทึม

นโยบายตัวอย่างนี้สร้าง JWT ใหม่และลงนามโดยใช้อัลกอริทึม RS256 กำลังสร้าง ลายเซ็น RS256 อาศัยคีย์ส่วนตัว RSA ซึ่งต้องระบุในรูปแบบที่เข้ารหัส PEM ดูตัวอย่างที่สมบูรณ์ในวิดีโอด้านบน รวมถึงวิธีส่งคำขอไปยังนโยบาย

เมื่อมีการเรียกใช้การทำงานของนโยบายนี้ Edge จะเข้ารหัสและลงนาม JWT แบบดิจิทัล รวมถึงการอ้างสิทธิ์ หากต้องการดูเกี่ยวกับส่วนต่างๆ ของ JWT รวมถึงวิธีเข้ารหัสและลงนาม โปรดดู RFC7519

<GenerateJWT name="JWT-Generate-RS256">
    <Algorithm>RS256</Algorithm>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <PrivateKey>
        <Value ref="private.privatekey"/>
        <Password ref="private.privatekey-password"/>
        <Id ref="private.privatekey-id"/>
    </PrivateKey>
    <Subject>apigee-seattle-hatrack-montage</Subject>
    <Issuer>urn://apigee-edge-JWT-policy-test</Issuer>
    <Audience>urn://c60511c0-12a2-473c-80fd-42528eb65a6a</Audience>
    <ExpiresIn>60m</ExpiresIn>
    <Id/>
    <AdditionalClaims>
        <Claim name="show">And now for something completely different.</Claim>
    </AdditionalClaims>
    <OutputVariable>jwt-variable</OutputVariable>
</GenerateJWT>

การกำหนดองค์ประกอบหลัก

องค์ประกอบที่ใช้ระบุคีย์ที่ใช้ในการสร้าง JWT จะขึ้นอยู่กับอัลกอริทึมที่เลือก ดังที่แสดงในตารางต่อไปนี้

อัลกอริทึม องค์ประกอบสำคัญ
HS{256/384/512}*
<SecretKey>
  <Value ref="private.secretkey"/>
  <Id>1918290</Id>
</SecretKey>
RS/PS/ES{256/384/512}*
<PrivateKey>
  <Value ref="private.privatekey"/>
  <Password ref="private.privatekey-password"/>
  <Id ref="private.privatekey-id"/>
</PrivateKey>

องค์ประกอบ <Password> และ <Id> เป็นค่าที่ไม่บังคับ

*สำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดของคีย์ โปรดดู เกี่ยวกับอัลกอริทึมการเข้ารหัสลายเซ็น

การอ้างอิงองค์ประกอบสำหรับ Generate JWT

การอ้างอิงนโยบายอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย Generate JWT

หมายเหตุ: การกำหนดค่าจะแตกต่างกันไปขึ้นอยู่กับการเข้ารหัส อัลกอริทึมที่คุณใช้ ดูตัวอย่างสำหรับตัวอย่างที่แสดง สำหรับ Use Case เฉพาะ

แอตทริบิวต์ที่ ใช้กับองค์ประกอบระดับบนสุด

<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">

แอตทริบิวต์ต่อไปนี้มีอยู่ในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การตรวจหาบุคคล
ชื่อ ชื่อภายในของนโยบาย อักขระที่คุณสามารถใช้ในชื่อจะถูกจำกัดไว้เฉพาะ: A-Z0-9._\-$ % อย่างไรก็ตาม UI การจัดการ Edge จะบังคับใช้เพิ่มเติม เช่น การนำอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ

(ไม่บังคับ) ใช้องค์ประกอบ <displayname></displayname> เพื่อ ติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซีของ UI การจัดการด้วยภาษาอื่นที่เป็นภาษาธรรมชาติ ชื่อ

ไม่มี ต้องระบุ
continueOnError ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
เปิดใช้อยู่ ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เป็น "ปิด" นโยบาย นโยบายนี้จะไม่บังคับใช้ แม้ว่าจะยังมีการเคลื่อนไหว

จริง ไม่บังคับ
ไม่พร้อมกัน แอตทริบิวต์นี้เลิกใช้งานแล้ว เท็จ เลิกใช้

&lt;DisplayName&gt;

<DisplayName>Policy Display Name</DisplayName>

ใช้เพิ่มเติมจากแอตทริบิวต์ชื่อเพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการ ด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ค่าเริ่มต้น หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ชื่อนโยบาย
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง

&lt;Algorithm&gt;

<Algorithm>algorithm-here</Algorithm>

ระบุอัลกอริทึมการเข้ารหัสเพื่อลงนามโทเค็น

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ต้องระบุ
ประเภท สตริง
ค่าที่ถูกต้อง HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, PS256, PS384, PS512

&lt;Audience&gt;

<Audience>audience-here</Audience>

or:

<Audience ref='variable_containing_audience'/>

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

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท อาร์เรย์ (รายการค่าที่คั่นด้วยคอมมา)
ค่าที่ถูกต้อง ทุกสิ่งที่ระบุกลุ่มเป้าหมาย

&lt;AdditionalClaims/Claim&gt;

<AdditionalClaims>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
</AdditionalClaims>

or:

<AdditionalClaims ref='claim_payload'/>

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

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

องค์ประกอบ <Claim> ใช้แอตทริบิวต์ต่อไปนี้

  • name - (ต้องระบุ) ชื่อของการอ้างสิทธิ์
  • ref - (ไม่บังคับ) ชื่อของตัวแปรโฟลว์ หากมี นโยบายจะใช้ค่าของค่านี้ เป็นการอ้างสิทธิ์ ถ้ามีการระบุทั้งแอตทริบิวต์ ref และค่าการอ้างสิทธิ์ที่ชัดเจนค่า Explicit เป็นค่าเริ่มต้น และจะใช้เมื่อตัวแปรโฟลว์ที่อ้างอิงยังไม่ได้รับการระบุ
  • type - (ไม่บังคับ) ข้อใดข้อหนึ่ง: สตริง (ค่าเริ่มต้น) ตัวเลข บูลีน หรือแผนที่
  • array - (ไม่บังคับ) ตั้งค่าเป็น true เพื่อระบุว่าค่านั้นเป็นอาร์เรย์ประเภท ค่าเริ่มต้น: เท็จ

เมื่อคุณรวมองค์ประกอบ <Claim> ระบบจะตั้งชื่อการอ้างสิทธิ์แบบคงที่เมื่อคุณ กำหนดค่านโยบาย หรือคุณจะส่งออบเจ็กต์ JSON เพื่อระบุชื่อการอ้างสิทธิ์ก็ได้ เนื่องจากออบเจ็กต์ JSON ถูกส่งเป็นตัวแปร ชื่อการอ้างสิทธิ์ใน JWT ที่สร้างขึ้นจึงได้รับการกำหนดขณะรันไทม์

เช่น

<AdditionalClaims ref='json_claims'/>

โดยที่ตัวแปร json_claims มีออบเจ็กต์ JSON ในรูปแบบ

{
  "sub" : "person@example.com",
  "iss" : "urn://secure-issuer@example.com",
  "non-registered-claim" : {
    "This-is-a-thing" : 817,
    "https://example.com/foobar" : { "p": 42, "q": false }
  }
}

JWT ที่สร้างขึ้นมีการอ้างสิทธิ์ทั้งหมดในออบเจ็กต์ JSON

&lt;AdditionalHeaders/Claim&gt;

<AdditionalHeaders>
    <Claim name='claim1'>explicit-value-of-claim-here</Claim>
    <Claim name='claim2' ref='variable-name-here'/>
    <Claim name='claim3' ref='variable-name-here' type='boolean'/>
    <Claim name='claim4' ref='variable-name' type='string' array='true'/>
 </AdditionalHeaders>

ใส่ชื่อ/ค่าการอ้างสิทธิ์เพิ่มเติมในส่วนหัวสำหรับ JWT

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

องค์ประกอบ <Claim> ใช้แอตทริบิวต์ต่อไปนี้

  • name - (ต้องระบุ) ชื่อของการอ้างสิทธิ์
  • ref - (ไม่บังคับ) ชื่อของตัวแปรโฟลว์ หากมี นโยบายจะใช้ค่าของค่านี้ เป็นการอ้างสิทธิ์ ถ้ามีการระบุทั้งแอตทริบิวต์ ref และค่าการอ้างสิทธิ์ที่ชัดเจนค่า Explicit เป็นค่าเริ่มต้น และจะใช้เมื่อตัวแปรโฟลว์ที่อ้างอิงยังไม่ได้รับการระบุ
  • type - (ไม่บังคับ) ข้อใดข้อหนึ่ง: สตริง (ค่าเริ่มต้น) ตัวเลข บูลีน หรือแผนที่
  • array - (ไม่บังคับ) ตั้งค่าเป็น true เพื่อระบุว่าค่านั้นเป็นอาร์เรย์ประเภท ค่าเริ่มต้น: เท็จ

&lt;CriticalHeaders&gt;

<CriticalHeaders>a,b,c</CriticalHeaders>

or:

<CriticalHeaders ref=variable_containing_headers/>

เพิ่มส่วนหัววิกฤติ crit ในส่วนหัว JWT ส่วนหัวของ crit คืออาร์เรย์ของชื่อส่วนหัวที่ตัวรับ JWT ต้องรู้จักและรู้จัก เช่น

{
  “typ: “...”,
  “alg” : “...”,
  “crit” : [ “a”, “b”, “c” ],
}

ขณะรันไทม์ นโยบาย VerifyJWT จะตรวจสอบส่วนหัว crit สำหรับแต่ละรายการที่ระบุในส่วนหัว crit ระบบจะตรวจสอบว่าองค์ประกอบ <KnownHeaders> ของนโยบาย VerifyJWT จะแสดงส่วนหัวดังกล่าวด้วย ส่วนหัวที่นโยบาย VerifyJWT พบใน crit ที่ไม่ได้แสดงอยู่ใน <KnownHeaders> จะทำให้นโยบาย VerifyJWT ล้มเหลว

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

&lt;CustomClaims&gt;

หมายเหตุ: ขณะนี้ระบบจะแทรกองค์ประกอบ CustomClaims เมื่อคุณเพิ่ม นโยบาย GenerateJWT ผ่าน UI องค์ประกอบนี้ไม่ทำงานและจะถูกละเว้น ที่ถูกต้อง องค์ประกอบที่จะใช้แทนคือ &lt;AdditionalClaims&gt; UI จะ เพื่อแทรกองค์ประกอบที่ถูกต้องในภายหลัง

&lt;ExpiresIn&gt;

<ExpiresIn>time-value-here</ExpiresIn>

ระบุอายุการใช้งานของ JWT ในหน่วยมิลลิวินาที วินาที นาที ชั่วโมง หรือวัน

ค่าเริ่มต้น N/A
การตรวจหาบุคคล ไม่บังคับ
ประเภท จำนวนเต็ม
ค่าที่ถูกต้อง

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

  • ms = มิลลิวินาที (ค่าเริ่มต้น)
  • s = วินาที
  • นาที = นาที
  • ชม. = ชั่วโมง
  • d = วัน

ตัวอย่างเช่น ExpiresIn=10d เทียบเท่ากับ ExpiresIn ของ 864000

&lt;Id&gt;

<Id>explicit-jti-value-here</Id>
 -or-
<Id ref='variable-name-here'/>
 -or-
<Id/>

สร้าง JWT ที่มีการอ้างสิทธิ์ JWT ที่เฉพาะเจาะจง เมื่อทั้งค่าข้อความและแอตทริบิวต์อ้างอิง ว่างเปล่า นโยบายจะสร้าง jti ที่มี UUID แบบสุ่ม การอ้างสิทธิ์ JWT ID (jti) คือ รหัสเฉพาะของ JWT ดูข้อมูลเพิ่มเติมเกี่ยวกับ jti ได้ที่ RFC7519

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริงหรือการอ้างอิง
ค่าที่ถูกต้อง สตริงหรือชื่อของตัวแปรโฟลว์ที่มีรหัส

&lt;IgnoreUnresolvedVariables&gt;

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

ตั้งค่าเป็น "เท็จ" หากต้องการให้นโยบายแสดงข้อผิดพลาดเมื่อระบุตัวแปรที่อ้างอิงไว้ ในนโยบายนั้นไม่สามารถแก้ปัญหาได้ ตั้งค่าเป็น "จริง" เพื่อจัดการตัวแปรที่แปลงไม่ได้ใดๆ เป็นสตริงว่าง (Null)

ค่าเริ่มต้น เท็จ
การตรวจหาบุคคล ไม่บังคับ
ประเภท บูลีน
ค่าที่ถูกต้อง จริงหรือเท็จ

&lt;Issuer&gt;

<Issuer ref='variable-name-here'/>
<Issuer>issuer-string-here</Issuer>

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

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริงหรือการอ้างอิง
ค่าที่ถูกต้อง ตามแต่ละประเทศ

&lt;NotBefore&gt;

<!-- Specify an absolute time. -->
<NotBefore>2017-08-14T11:00:21-07:00</NotBefore>
 -or-
<!-- Specify a time relative to when the token is generated. -->
<NotBefore>6h</NotBefore>

ระบุเวลาที่โทเค็นจะใช้ได้ โทเค็นไม่ถูกต้องจนถึงเวลาที่ระบุ คุณจะระบุค่าเวลาสัมบูรณ์หรือเวลาที่สัมพันธ์กับเวลาที่สร้างโทเค็นได้

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง
ค่าที่ถูกต้อง โปรดดูด้านล่าง

ค่าเวลาที่ถูกต้องสำหรับองค์ประกอบ NotAfter สำหรับค่าเวลาสัมบูรณ์

ชื่อ รูปแบบ ตัวอย่าง
จัดเรียงได้ yyyy-MM-dd'T'HH:mm:ss.SSSZ 2017-08-14T11:00:21.269-0700
RFC 1123 EEE, dd MMM yyyy HH:mm:ss zzz จ. 14 ส.ค. 2017 11:00:21 น. PDT
RFC 850 EEEE, dd-MMM-yy HH:mm:ss zzz วันจันทร์ที่ 14 ส.ค. 17 เวลา 11:00:21 น. PDT
ANCI-C EEE MMM d HH:mm:ss yyyy จ. 14 ส.ค. 11:00:21 2017

สำหรับค่าเวลาสัมพัทธ์ ให้ระบุจำนวนเต็มและระยะเวลา เช่น

  • 10 วินาที
  • 60 นาที
  • 12ชม

&lt;OutputVariable&gt;

<OutputVariable>jwt-variable</OutputVariable>

ระบุตำแหน่งที่จะวาง JWT ที่นโยบายนี้สร้างขึ้น โดยค่าเริ่มต้น จะอยู่ใน ตัวแปรโฟลว์ jwt.POLICYNAME.generated_jwt

ค่าเริ่มต้น jwt.POLICYNAME.generated_jwt
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง (ชื่อตัวแปรโฟลว์)

&lt;PrivateKey/Id&gt;

<PrivateKey>
  <Id ref="flow-variable-name-here"/>
</PrivateKey>

or

<PrivateKey>
  <Id>your-id-value-here</Id>
</PrivateKey>

ระบุรหัสคีย์ (kid) ที่จะรวมไว้ในส่วนหัว JWT ใช้เท่านั้น เมื่ออัลกอริทึมเป็น RS256/RS384/RS512, PS256/PS384/PS512 หรือ ES256/ES384/ES512

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง
ค่าที่ถูกต้อง ตัวแปรโฟลว์หรือสตริง

&lt;PrivateKey/Password&gt;

<PrivateKey>
  <Password ref="private.privatekey-password"/>
</PrivateKey>

ระบุรหัสผ่านที่นโยบายควรใช้เพื่อถอดรหัสคีย์ส่วนตัว หากจำเป็น ใช้เมนู ref เพื่อส่งคีย์ในตัวแปรโฟลว์ ใช้เท่านั้น เมื่ออัลกอริทึมเป็น RS256/RS384/RS512, PS256/PS384/PS512 หรือ ES256/ES384/ES512

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง
ค่าที่ถูกต้อง การอ้างอิงตัวแปรโฟลว์

หมายเหตุ: คุณต้องระบุตัวแปรโฟลว์ Edge จะปฏิเสธเนื่องจาก การกำหนดค่านโยบายซึ่งระบุรหัสผ่านเป็นข้อความธรรมดา ตัวแปรโฟลว์ ต้องมีคำนำหน้าว่า "ส่วนตัว" เช่น private.mypassword

&lt;PrivateKey/Value&gt;

<PrivateKey>
  <Value ref="private.variable-name-here"/>
</PrivateKey>

ระบุคีย์ส่วนตัวที่เข้ารหัส PEM ซึ่งใช้เพื่อลงนาม JWT ใช้แอตทริบิวต์ ref เพื่อส่ง ในตัวแปรโฟลว์ ใช้เมื่ออัลกอริทึมเป็น RS256/RS384/RS512 เท่านั้น PS256/PS384/PS512 หรือ ES256/ES384/ES512

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ต้องใช้เพื่อสร้าง JWT โดยใช้อัลกอริทึม RS256
ประเภท สตริง
ค่าที่ถูกต้อง ตัวแปรโฟลว์ซึ่งมีสตริงที่แทนค่าคีย์ส่วนตัว RSA ที่เข้ารหัส PEM

หมายเหตุ: ตัวแปรโฟลว์ต้องมีคํานําหน้า "private" ตัวอย่างเช่น private.mykey

&lt;SecretKey/Id&gt;

<SecretKey>
  <Id ref="flow-variable-name-here"/>
</SecretKey>

or

<SecretKey>
  <Id>your-id-value-here</Id>
</SecretKey>

ระบุรหัสคีย์ (kid) ที่จะรวมไว้ในส่วนหัว JWT ของ JWT ที่ลงนามด้วย HMAC อัลกอริทึม ใช้เมื่ออัลกอริทึมเป็นหนึ่งใน HS256/HS384/HS512 เท่านั้น

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ไม่บังคับ
ประเภท สตริง
ค่าที่ถูกต้อง ตัวแปรโฟลว์หรือสตริง

&lt;SecretKey/Value&gt;

<SecretKey>
  <Value ref="private.your-variable-name"/>
</SecretKey>

ระบุคีย์ลับที่ใช้เพื่อยืนยันหรือลงนามโทเค็นด้วยอัลกอริทึม HMAC ใช้เท่านั้น เมื่ออัลกอริทึมเป็น HS256/HS384/HS512 ใช้แอตทริบิวต์ ref เพื่อส่งคีย์ในตัวแปรโฟลว์ได้

Edge บังคับใช้ความแรงของคีย์ขั้นต่ำสำหรับอัลกอริทึม HS256/HS384/HS512 ความยาวคีย์ขั้นต่ำ สำหรับ HS256 คือ 32 ไบต์ ส่วน HS384 เท่ากับ 48 ไบต์ และสำหรับ HS512 จะมีขนาด 64 ไบต์ การใช้คีย์ที่มีขนาดต่ำกว่าจะทำให้เกิดข้อผิดพลาดรันไทม์

ค่าเริ่มต้น ไม่มี
การตรวจหาบุคคล ต้องระบุสำหรับอัลกอริทึม HMAC
ประเภท สตริง
ค่าที่ถูกต้อง ตัวแปรโฟลว์ที่อ้างอิงสตริง

หมายเหตุ: หากตัวแปรโฟลว์ ตัวแปรต้องมีคำนำหน้า "private" สำหรับ ตัวอย่างเช่น private.mysecret

&lt;Subject&gt;

<Subject>subject-string-here</Subject>
หรือ
<Subject ref="flow_variable" />

เช่น

<Subject ref="apigee.developer.email"/>

นโยบายจะสร้าง JWT ที่มีการอ้างสิทธิ์ sub โดยตั้งค่าเป็น value.คำกล่าวอ้างนี้ระบุหรือให้คำแถลงเกี่ยวกับหัวเรื่องของ JWT นี่คือหนึ่งใน ชุดการอ้างสิทธิ์มาตรฐานที่กล่าวถึงใน RFC7519

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

ตัวแปรโฟลว์

นโยบาย Generate JWT ไม่ได้ตั้งค่าตัวแปรโฟลว์

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

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

ข้อผิดพลาดเกี่ยวกับรันไทม์

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน

รหัสข้อผิดพลาด สถานะ HTTP เกิดขึ้นเมื่อ
steps.jwt.AlgorithmInTokenNotPresentInConfiguration 401 เกิดขึ้นเมื่อนโยบายการยืนยันมีอัลกอริทึมหลายรายการ
steps.jwt.AlgorithmMismatch 401 อัลกอริทึมที่ระบุในนโยบายการสร้างไม่ตรงกับอัลกอริทึมในนโยบาย "ยืนยัน" อัลกอริทึมที่ระบุต้องตรงกัน
steps.jwt.FailedToDecode 401 นโยบายนี้ถอดรหัส JWT ไม่ได้ JWT อาจเสียหาย
steps.jwt.GenerationFailed 401 นโยบายสร้าง JWT ไม่ได้
steps.jwt.InsufficientKeyLength 401 สำหรับคีย์ที่มีขนาดเล็กกว่า 32 ไบต์สำหรับอัลกอริทึม HS256 ขนาดน้อยกว่า 48 ไบต์สำหรับอัลกอริทึม HS386 และน้อยกว่า 64 ไบต์สำหรับอัลกอริทึม HS512
steps.jwt.InvalidClaim 401 สำหรับการอ้างสิทธิ์ที่ขาดหายไปหรือการอ้างสิทธิ์ไม่ตรงกัน หรือส่วนหัวที่ขาดหายไปหรือส่วนหัวไม่ตรงกัน
steps.jwt.InvalidCurve 401 เส้นโค้งที่คีย์ระบุไม่ถูกต้องสำหรับอัลกอริทึม Elliptic Curve
steps.jwt.InvalidJsonFormat 401 พบ JSON ที่ไม่ถูกต้องในส่วนหัวหรือเพย์โหลด
steps.jwt.InvalidToken 401 ข้อผิดพลาดนี้เกิดขึ้นเมื่อการยืนยันลายเซ็น JWT ล้มเหลว
steps.jwt.JwtAudienceMismatch 401 การอ้างสิทธิ์กลุ่มเป้าหมายล้มเหลวในการยืนยันโทเค็น
steps.jwt.JwtIssuerMismatch 401 การอ้างสิทธิ์ของผู้ออกบัตรล้มเหลวในการยืนยันโทเค็น
steps.jwt.JwtSubjectMismatch 401 เรื่องการอ้างสิทธิ์ล้มเหลวในการยืนยันโทเค็น
steps.jwt.KeyIdMissing 401 นโยบาย "ยืนยัน" ใช้ JWKS เป็นแหล่งที่มาสำหรับคีย์สาธารณะ แต่ JWT ที่ลงนามไม่มีพร็อพเพอร์ตี้ kid ในส่วนหัว
steps.jwt.KeyParsingFailed 401 ไม่สามารถแยกวิเคราะห์คีย์สาธารณะจากข้อมูลคีย์ที่ระบุ
steps.jwt.NoAlgorithmFoundInHeader 401 เกิดขึ้นเมื่อ JWT ไม่มีส่วนหัวอัลกอริทึม
steps.jwt.NoMatchingPublicKey 401 นโยบายยืนยันใช้ JWKS เป็นแหล่งที่มาสำหรับคีย์สาธารณะ แต่ kid ใน JWT ที่ลงนามแล้วไม่ได้แสดงอยู่ใน JWKS
steps.jwt.SigningFailed 401 ใน GenerateJWT สำหรับคีย์ที่มีขนาดเล็กกว่าขนาดต่ำสุดสำหรับอัลกอริทึม HS384 หรือ HS512
steps.jwt.TokenExpired 401 นโยบายจะพยายามยืนยันโทเค็นที่หมดอายุ
steps.jwt.TokenNotYetValid 401 โทเค็นยังไม่ถูกต้อง
steps.jwt.UnhandledCriticalHeader 401 ส่วนหัวที่พบในนโยบาย "ยืนยัน JWT" ในส่วนหัว crit จะไม่ปรากฏใน KnownHeaders
steps.jwt.UnknownException 401 เกิดข้อผิดพลาดที่ไม่ทราบสาเหตุ
steps.jwt.WrongKeyType 401 ประเภทคีย์ที่ระบุไม่ถูกต้อง เช่น หากคุณระบุคีย์ RSA สำหรับอัลกอริทึม Elliptic Curve หรือคีย์เส้นโค้งสำหรับอัลกอริทึม RSA

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

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

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
InvalidNameForAdditionalClaim การทำให้ใช้งานได้จะล้มเหลวหากการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> มีชื่อที่จดทะเบียนอย่างใดอย่างหนึ่งต่อไปนี้ kid, iss, sub, aud, iat, exp, nbf หรือ jti
InvalidTypeForAdditionalClaim หากการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ใช่ประเภท string, number, boolean หรือ map การทำให้ใช้งานได้จะล้มเหลว
MissingNameForAdditionalClaim หากไม่ได้ระบุชื่อการอ้างสิทธิ์ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> การทำให้ใช้งานได้จะล้มเหลว
InvalidNameForAdditionalHeader ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อชื่อของการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> เป็น alg หรือ typ
InvalidTypeForAdditionalHeader หากประเภทของการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ใช่ประเภท string, number, boolean หรือ map การทำให้ใช้งานได้จะล้มเหลว
InvalidValueOfArrayAttribute ข้อผิดพลาดนี้เกิดขึ้นเมื่อค่าของแอตทริบิวต์อาร์เรย์ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ได้ตั้งค่าเป็น true หรือ false
InvalidConfigurationForActionAndAlgorithm หากใช้องค์ประกอบ <PrivateKey> กับอัลกอริทึม HS Family หรือมีการใช้องค์ประกอบ <SecretKey> กับอัลกอริทึม Family ของ RSA การทำให้ใช้งานได้จะล้มเหลว
InvalidValueForElement หากค่าที่ระบุในองค์ประกอบ <Algorithm> ไม่ใช่ค่าที่รองรับ การทำให้ใช้งานได้จะล้มเหลว
MissingConfigurationElement ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้ใช้องค์ประกอบ <PrivateKey> กับอัลกอริทึมตระกูล RSA หรือไม่ได้ใช้องค์ประกอบ <SecretKey> กับอัลกอริทึมครอบครัว HS
InvalidKeyConfiguration หากไม่ได้กำหนดองค์ประกอบย่อย <Value> ในองค์ประกอบ <PrivateKey> หรือ <SecretKey> การทำให้ใช้งานได้จะล้มเหลว
EmptyElementForKeyConfiguration หากแอตทริบิวต์ ref ขององค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ว่างเปล่าหรือไม่ได้ระบุ การทำให้ใช้งานได้จะล้มเหลว
InvalidVariableNameForSecret ข้อผิดพลาดนี้เกิดขึ้นหากชื่อตัวแปรโฟลว์ที่ระบุในแอตทริบิวต์ ref ขององค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ไม่มีคำนำหน้าส่วนตัว (private.)
InvalidSecretInConfig ข้อผิดพลาดนี้เกิดขึ้นหากองค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ไม่มีคำนำหน้าส่วนตัว (private.)
InvalidTimeFormat หากค่าที่ระบุในองค์ประกอบ <NotBefore> ไม่ได้ใช้รูปแบบที่รองรับ การทำให้ใช้งานได้จะล้มเหลว

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

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่ระบุไว้ในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของรหัสข้อผิดพลาด fault.name Matches "TokenExpired"
JWT.failed นโยบาย JWT ทั้งหมดตั้งค่าตัวแปรเดียวกันในกรณีที่ดำเนินการไม่สำเร็จ JWT.failed = true

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

โค้ดความผิดพลาดของนโยบาย JWT

สำหรับการจัดการข้อผิดพลาด แนวทางปฏิบัติแนะนำคือให้ดักจับส่วน errorcode ของข้อผิดพลาด คำตอบ อย่าพึ่งพาข้อความใน faultstring เนื่องจากอาจมีการเปลี่ยนแปลง

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

    <FaultRules>
        <FaultRule name="JWT Policy Errors">
            <Step>
                <Name>JavaScript-1</Name>
                <Condition>(fault.name Matches "TokenExpired")</Condition>
            </Step>
            <Condition>JWT.failed=true</Condition>
        </FaultRule>
    </FaultRules>