นโยบาย GenerateJWT

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

อะไร

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

วิดีโอ

ดูวิดีโอสั้นๆ เพื่อดูวิธีสร้าง JWT พร้อมลายเซ็น

ลองฟัง

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

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

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

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

<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 และวิธีเข้ารหัสและรับรองส่วนต่างๆ ของ 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> เป็นค่าที่ไม่บังคับ

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

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

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

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

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

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

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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การปรากฏ
ชื่อ ชื่อภายในของนโยบาย จำกัดอักขระที่ใช้ในชื่อได้ดังต่อไปนี้ A-Z0-9._\-$ % แต่ UI การจัดการ Edge จะบังคับใช้ข้อจํากัดเพิ่มเติม เช่น นําอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ

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

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

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

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

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

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

<DisplayName>

<DisplayName>Policy Display Name</DisplayName>

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

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

<Algorithm>

<Algorithm>algorithm-here</Algorithm>

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

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

<Audience>

<Audience>audience-here</Audience>

or:

<Audience ref='variable_containing_audience'/>

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

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

<การอ้างสิทธิ์/การอ้างสิทธิ์เพิ่มเติม>

<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

<ส่วนหัว/การอ้างสิทธิ์เพิ่มเติม>

<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 เพื่อระบุว่าค่านี้เป็นอาร์เรย์ประเภทหรือไม่ ค่าเริ่มต้น: เท็จ

<CriticalHeaders>

<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> ของนโยบาย ConfirmJWT แสดงส่วนหัวดังกล่าวด้วย ส่วนหัวที่นโยบาย ConfirmJWT ใน crit ซึ่งไม่ได้ระบุไว้ใน <KnownHeaders> จะทำให้นโยบาย ConfirmJWT ล้มเหลว

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

<CustomClaims>

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

<ExpiresIn>

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

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

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

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

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

เช่น ExpiresIn=10d มีค่าเท่ากับ ExpiresIn ของ 864000

<รหัส>

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

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

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

<IgnoreUnresolvedVariables>

<IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>

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

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

<Issuer>

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

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

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

<NotBefore>

<!-- 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>

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

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

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

ชื่อ รูปแบบ ตัวอย่าง
จัดเรียงได้ 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ชม

<OutputVariable>

<OutputVariable>jwt-variable</OutputVariable>

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

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

<PrivateKey/Id>

<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

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

<PrivateKey/Password>

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

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

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

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

<PrivateKey/Value>

<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

<SecretKey/Id>

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

or

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

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

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

<SecretKey/Value>

<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

<Subject>

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

เช่น

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

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

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

ตัวแปรโฟลว์

นโยบายสร้าง 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>