คุณกำลังดูเอกสารประกอบของ 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> องค์ประกอบ |
|
*ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อกำหนดของคีย์ได้ที่เกี่ยวกับอัลกอริทึมการเข้ารหัสลายเซ็น |
การอ้างอิงองค์ประกอบสำหรับการสร้าง JWT
ข้อมูลอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบายสร้าง JWT
หมายเหตุ: การกำหนดค่าจะแตกต่างไปบ้างขึ้นอยู่กับอัลกอริทึมการเข้ารหัสที่ใช้ ดูตัวอย่างสำหรับตัวอย่างที่สาธิตการกำหนดค่าสำหรับกรณีการใช้งานเฉพาะ
แอตทริบิวต์ที่ใช้กับองค์ประกอบระดับบนสุด
<GenerateJWT name="JWT" continueOnError="false" enabled="true" async="false">
แอตทริบิวต์ต่อไปนี้มีอยู่ในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การปรากฏ |
---|---|---|---|
ชื่อ |
ชื่อภายในของนโยบาย จำกัดอักขระที่ใช้ในชื่อได้ดังต่อไปนี้
A-Z0-9._\-$ % แต่ UI การจัดการ Edge จะบังคับใช้ข้อจํากัดเพิ่มเติม เช่น นําอักขระที่ไม่ใช่ตัวอักษรและตัวเลขคละกันออกโดยอัตโนมัติ
(ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว ซึ่งถือเป็นเรื่องปกติสำหรับนโยบายส่วนใหญ่
ตั้งค่าเป็น |
false | ไม่บังคับ |
เปิดใช้อยู่ |
ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย
ตั้งค่าเป็น |
จริง | ไม่บังคับ |
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 |
การปรากฏ | ไม่บังคับ |
ประเภท | จำนวนเต็ม |
ค่าที่ถูกต้อง |
ค่าหรือการอ้างอิงไปยังตัวแปรโฟลว์ที่มีค่า ระบุหน่วยเวลาได้ดังนี้
เช่น |
<รหัส>
<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" เช่น |
<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" เช่น |
<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" เช่น |
<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
|
build |
InvalidTypeForAdditionalClaim |
หากการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ใช่ประเภท string , number , boolean หรือ map การทำให้ใช้งานได้จะล้มเหลว
|
build |
MissingNameForAdditionalClaim |
หากไม่ได้ระบุชื่อการอ้างสิทธิ์ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> การทำให้ใช้งานได้จะล้มเหลว
|
build |
InvalidNameForAdditionalHeader |
ข้อผิดพลาดนี้จะเกิดขึ้นเมื่อชื่อของการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> เป็น alg หรือ typ
|
build |
InvalidTypeForAdditionalHeader |
หากประเภทของการอ้างสิทธิ์ที่ใช้ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ใช่ประเภท string , number , boolean หรือ map การทำให้ใช้งานได้จะล้มเหลว
|
build |
InvalidValueOfArrayAttribute |
ข้อผิดพลาดนี้เกิดขึ้นเมื่อค่าของแอตทริบิวต์อาร์เรย์ในองค์ประกอบย่อย <Claim> ขององค์ประกอบ <AdditionalClaims> ไม่ได้ตั้งค่าเป็น true หรือ false
|
build |
InvalidConfigurationForActionAndAlgorithm |
หากใช้องค์ประกอบ <PrivateKey> กับอัลกอริทึม HS Family หรือมีการใช้องค์ประกอบ <SecretKey> กับอัลกอริทึม Family ของ RSA การทำให้ใช้งานได้จะล้มเหลว
|
build |
InvalidValueForElement |
หากค่าที่ระบุในองค์ประกอบ <Algorithm> ไม่ใช่ค่าที่รองรับ การทำให้ใช้งานได้จะล้มเหลว
|
build |
MissingConfigurationElement |
ข้อผิดพลาดนี้จะเกิดขึ้นหากไม่ได้ใช้องค์ประกอบ <PrivateKey> กับอัลกอริทึมตระกูล RSA หรือไม่ได้ใช้องค์ประกอบ <SecretKey> กับอัลกอริทึมครอบครัว HS
|
build |
InvalidKeyConfiguration |
หากไม่ได้กำหนดองค์ประกอบย่อย <Value> ในองค์ประกอบ <PrivateKey> หรือ <SecretKey> การทำให้ใช้งานได้จะล้มเหลว
|
build |
EmptyElementForKeyConfiguration |
หากแอตทริบิวต์ ref ขององค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ว่างเปล่าหรือไม่ได้ระบุ การทำให้ใช้งานได้จะล้มเหลว
|
build |
InvalidVariableNameForSecret |
ข้อผิดพลาดนี้เกิดขึ้นหากชื่อตัวแปรโฟลว์ที่ระบุในแอตทริบิวต์ ref ขององค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ไม่มีคำนำหน้าส่วนตัว (private.)
|
build |
InvalidSecretInConfig |
ข้อผิดพลาดนี้เกิดขึ้นหากองค์ประกอบย่อย <Value> ขององค์ประกอบ <PrivateKey> หรือ <SecretKey> ไม่มีคำนำหน้าส่วนตัว (private.)
|
build |
InvalidTimeFormat |
หากค่าที่ระบุในองค์ประกอบ <NotBefore> ไม่ได้ใช้รูปแบบที่รองรับ การทำให้ใช้งานได้จะล้มเหลว
|
build |
ตัวแปรของข้อผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อเกิดข้อผิดพลาดรันไทม์ ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด | fault.name Matches "TokenExpired" |
JWT.failed |
นโยบาย JWT ทั้งหมดจะกำหนดตัวแปรเดียวกันในกรณีที่เกิดข้อผิดพลาด | JWT.failed = true |
ตัวอย่างการตอบกลับข้อผิดพลาด
สำหรับการจัดการข้อผิดพลาด แนวทางปฏิบัติแนะนำคือดักส่วน 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>