นโยบาย OAuthV2

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

อะไร

OAuthV2 เป็นนโยบายแบบหลายด้านสำหรับดำเนินการประเภทการให้สิทธิ์ OAuth 2.0 นี่คือนโยบายหลักที่ใช้เพื่อกำหนดค่าปลายทาง OAuth 2.0 บน Apigee Edge

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

ตัวอย่าง

VerifyAccessToken

VerifyAccessToken

การกำหนดค่านโยบาย OAuthV2 นี้ (ที่มีการดำเนินการ ConfirmAccessToken) จะยืนยันว่าโทเค็นเพื่อการเข้าถึงที่ส่งไปยัง Apigee Edge ถูกต้อง เมื่อมีการเรียกใช้การดำเนินการนโยบายนี้ Edge จะหาโทเค็นเพื่อการเข้าถึงที่ถูกต้องในคำขอ หากโทเค็นเพื่อการเข้าถึงถูกต้อง ระบบจะอนุญาตให้คำขอดำเนินการต่อ หากไม่ถูกต้อง ระบบจะหยุดการประมวลผลทั้งหมดและแสดงข้อผิดพลาดในการตอบกลับ

<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
    <DisplayName>OAuth v2.0 2</DisplayName>
    <Operation>VerifyAccessToken</Operation>
    <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>

หมายเหตุ: รองรับเฉพาะโทเค็นสำหรับผู้ถือ OAuth 2.0 เท่านั้น ไม่รองรับโทเค็นรหัสการตรวจสอบสิทธิ์ข้อความ (MAC)

เช่น

$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282

โดยค่าเริ่มต้น Edge จะยอมรับโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization ที่มีคำนำหน้า Bearer คุณจะเปลี่ยนค่าเริ่มต้นนี้ได้ด้วยองค์ประกอบ <AccessToken>

GenerateAccessToken

การสร้างโทเค็นเพื่อการเข้าถึง

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

GenerateAuthorizationCode

สร้างรหัสการให้สิทธิ์

ดูตัวอย่างแสดงวิธีขอรหัสการให้สิทธิ์ได้ที่การขอรหัสการให้สิทธิ์

RefreshAccessToken

รีเฟรชโทเค็นเพื่อการเข้าถึง

ดูตัวอย่างแสดงวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรชได้ที่การรีเฟรชโทเค็นเพื่อการเข้าถึง

โทเค็นขั้นตอนการตอบกลับ

สร้างโทเค็นเพื่อการเข้าถึงในขั้นตอนการตอบกลับ

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

เรามาดูนโยบายตัวอย่างกันก่อน

<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <AppEndUser>Doe</AppEndUser>
    <UserName>jdoe</UserName>
    <PassWord>jdoe</PassWord>
    <GrantType>grant_type</GrantType>
    <ClientId>a_valid_client_id</ClientId>
    <SupportedGrantTypes>
        <GrantType>password</GrantType>
    </SupportedGrantTypes>
</OAuthV2>

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

ส่วนหัวการให้สิทธิ์ต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี client_id:client_secret ที่เข้ารหัส Base64

คุณจะเพิ่มส่วนหัวนี้ด้วยนโยบาย JavaScript ที่วางไว้ก่อนนโยบาย OAuthV2 ได้ แบบนี้ ตัวแปร "local_clientid" และ "local_secret" ต้องมีการตั้งค่าก่อนหน้านี้และมีให้ใช้งานในขั้นตอนดังนี้

var client_id = context.getVariable("local_clientid");
var client_secret = context.getVariable("local_secret");
context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1
                                      .parse(client_id + ':' + client_secret)));

ดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน" เพิ่มเติม

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

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

นโยบายตัวอย่างที่แสดงด้านล่างเป็นการกำหนดค่าที่เป็นไปได้หลายแบบ ตัวอย่างนี้แสดงนโยบาย OAuthV2 ที่กำหนดค่าไว้สำหรับการดำเนินการ GenerateAccessToken ซึ่งมีองค์ประกอบที่จำเป็นและไม่บังคับ ดูรายละเอียดได้จากคำอธิบายองค์ประกอบในส่วนนี้

<OAuthV2 name="GenerateAccessToken">
  <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type -->
  <Operation>GenerateAccessToken</Operation>
  <!-- This is in millseconds, so expire in an hour -->
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GrantType>request.queryparam.grant_type</GrantType>
  <GenerateResponse/>
</OAuthV2>

แอตทริบิวต์ <OAuthV2>

<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">

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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

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

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

ไม่มีข้อมูล จำเป็น
continueOnError

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

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

false ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

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

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

false เลิกใช้

องค์ประกอบ <DisplayName>

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

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มีข้อมูล

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

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

องค์ประกอบ <AccessToken>

<AccessToken>request.header.access_token</AccessToken>

โดยค่าเริ่มต้น ConfirmAccessToken ต้องการให้ส่งโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization คุณเปลี่ยนค่าเริ่มต้นดังกล่าวได้โดยใช้องค์ประกอบนี้ ตัวอย่างเช่น request.queryparam.access_token บ่งบอกว่าโทเค็นเพื่อการเข้าถึงควรแสดงอยู่ในพารามิเตอร์การค้นหาชื่อ access_token

ตัวอย่างที่ระบุ <AccessToken>request.header.access_token</AccessToken>

curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"
ตัวอย่างที่ระบุ <AccessToken>request.queryparam.access_token</AccessToken>:

curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"

ค่าเริ่มต้น:

ไม่มีข้อมูล

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ใช้กับการดำเนินการ
  • VerifyAccessToken

องค์ประกอบ <AccessTokenPrefix>

<AccessTokenPrefix>Bearer</AccessTokenPrefix>

โดยค่าเริ่มต้น ConfirmAccessToken กำหนดให้ส่งโทเค็นเพื่อการเข้าถึงในส่วนหัวการให้สิทธิ์เป็นโทเค็นสำหรับผู้ถือ เช่น

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

ปัจจุบันระบบรองรับคำนำหน้าเพียงชื่อเดียว

ค่าเริ่มต้น:

Bearer

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้

Bearer

ใช้กับการดำเนินการ
  • VerifyAccessToken

องค์ประกอบ <AppEndUser>

<AppEndUser>request.queryparam.app_enduser</AppEndUser>

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

ตัวอย่างเช่น request.queryparam.app_enduser บ่งชี้ว่า AppEndUser ควรเป็นพารามิเตอร์การค้นหา เช่น ?app_enduser=ntesla@theramin.com เช่น หากต้องการกำหนดให้ AppEndUser อยู่ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.app_enduser

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

ค่าเริ่มต้น:

ไม่มีข้อมูล

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้

ตัวแปรโฟลว์ทั้งหมดที่นโยบายเข้าถึงได้ขณะรันไทม์

ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials

<แอตทริบิวต์/แอตทริบิวต์>

<Attributes>
    <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute>
    <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute>
</Attributes>

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

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

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

การแสดงหรือซ่อนแอตทริบิวต์ที่กำหนดเองในการตอบสนอง

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

โดยค่าเริ่มต้น แอตทริบิวต์ที่กำหนดเองจะปรากฏในการตอบกลับ หากต้องการซ่อน ให้ตั้งค่าพารามิเตอร์ display เป็น false เช่น

<Attributes>
    <Attribute name="employee_id" ref="employee.id" display="false"/>
    <Attribute name="employee_name" ref="employee.name" display="false"/>
</Attributes>

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

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

หากต้องการซ่อนแอตทริบิวต์ที่กำหนดเองในกรณีเหล่านี้ คุณมีตัวเลือกต่อไปนี้

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

โปรดดูที่การปรับแต่งโทเค็นและรหัสการให้สิทธิ์

ค่าเริ่มต้น:

N/A

สถานที่ตั้ง:

ไม่บังคับ

ค่าที่ถูกต้องมีดังนี้
  • name -ชื่อแอตทริบิวต์
  • ref - ค่าของแอตทริบิวต์ อาจมาจากตัวแปรโฟลว์
  • display - (ไม่บังคับ) ให้คุณระบุว่าแอตทริบิวต์ที่กำหนดเองจะปรากฏในคำตอบหรือไม่ หากเป็น true แอตทริบิวต์ที่กำหนดเองจะปรากฏในคำตอบ (หากเปิดใช้ GenerateResponse ด้วย) หากตั้งค่าเป็น false แอตทริบิวต์ที่กำหนดเองจะไม่รวมอยู่ในคำตอบ ค่าเริ่มต้นคือ true ดูการแสดงหรือซ่อนแอตทริบิวต์ที่กำหนดเองในการตอบกลับ
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials
  • refresh_token
  • ที่ใช้ร่วมกับการดำเนินการ GenerateAuthorizationCode ได้

องค์ประกอบ <ClientId>

<ClientId>request.formparam.client_id</ClientId>

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

ค่าเริ่มต้น:

request.formparam.client_id (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ ตัวแปรโฟลว์: request.formparam.client_id
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • รหัสผ่าน
  • โดยปริยาย
  • client_credentials

ที่ใช้ร่วมกับการดำเนินการ GenerateAuthorizationCode ได้

อีลิเมนต์ <Code>

<Code>request.queryparam.code</Code>

ในขั้นตอนประเภทการให้สิทธิ์ ไคลเอ็นต์ต้องส่งรหัสการให้สิทธิ์ไปยังเซิร์ฟเวอร์การให้สิทธิ์ (Apigee Edge) องค์ประกอบนี้ให้คุณระบุตำแหน่งที่ Edge ควรค้นหารหัสการให้สิทธิ์ เช่น อาจส่งเป็นพารามิเตอร์การค้นหา ส่วนหัว HTTP หรือพารามิเตอร์ของฟอร์ม (ค่าเริ่มต้น) ได้

ตัวแปร request.queryparam.auth_code บ่งบอกว่าควรมีการแสดงรหัสการให้สิทธิ์เป็นพารามิเตอร์การค้นหา เช่น ?auth_code=AfGlvs9 เช่น หากต้องการกำหนดให้ใช้รหัสการให้สิทธิ์ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.auth_code ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม

ค่าเริ่มต้น:

request.formparam.code (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ ตัวแปรโฟลว์ทั้งหมดที่นโยบายเข้าถึงได้ขณะรันไทม์
ใช้กับประเภทการให้สิทธิ์ authorization_code

องค์ประกอบ <ExpiresIn>

<ExpiresIn>10000</ExpiresIn> 

บังคับใช้เวลาหมดอายุของโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์ในหน่วยมิลลิวินาที (สำหรับโทเค็นการรีเฟรช ให้ใช้ <RefreshTokenExpiresIn>) ค่าเวลาหมดอายุเป็นค่าที่ระบบสร้างขึ้นบวกกับค่า <ExpiresIn> หากตั้งค่า <ExpiresIn> เป็น -1 โทเค็นหรือรหัสจะหมดอายุตามวันหมดอายุของโทเค็นเพื่อการเข้าถึง OAuth สูงสุด หากไม่ได้ระบุ <ExpiresIn> ระบบจะใช้ค่าเริ่มต้นที่กำหนดค่าไว้ที่ระดับระบบ

นอกจากนี้ ยังกำหนดเวลาหมดอายุระหว่างรันไทม์ได้โดยใช้ค่าเริ่มต้นที่เป็นฮาร์ดโค้ด หรือโดยการอ้างอิงตัวแปรโฟลว์ เช่น จัดเก็บค่าการหมดอายุของโทเค็นในแมปค่าคีย์ เรียกข้อมูลค่า กําหนดให้กับตัวแปร และอ้างอิงค่าในนโยบาย เช่น kvm.oauth.expires_in

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

  • โทเค็นเพื่อการเข้าถึง OAuth ซึ่งหมายความว่าโทเค็นที่เพิกถอนอาจยังดำเนินการได้สำเร็จเป็นเวลาสูงสุด 3 นาที จนกว่าขีดจำกัดแคชจะหมดอายุ
  • เอนทิตีบริการการจัดการคีย์ (KMS) (แอป, นักพัฒนาซอฟต์แวร์, ผลิตภัณฑ์ API)
  • แอตทริบิวต์ที่กำหนดเองในโทเค็น OAuth และเอนทิตี KMS

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

<ExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</ExpiresIn>

Edge ไม่รองรับวิธีบังคับให้โทเค็นหมดอายุหลังจากที่สร้างโทเค็นแล้ว หากต้องการบังคับให้โทเค็นหมดอายุ (เช่น ตามเงื่อนไข) โปรดดูวิธีแก้ปัญหาที่เป็นไปได้ใน โพสต์ชุมชน Apigee นี้

โดยค่าเริ่มต้น ระบบจะลบโทเค็นเพื่อการเข้าถึงที่หมดอายุออกจากระบบ Apigee Edge อย่างถาวรโดยอัตโนมัติหลังหมดอายุ 3 วัน โปรดดูเพิ่มเติมที่การล้าง โทเค็นเพื่อการเข้าถึง

Private Cloud: สำหรับการติดตั้ง Edge สำหรับ Private Cloud พร็อพเพอร์ตี้ conf_keymanagement_oauth_auth_code_expiry_time_in_millis จะกำหนดค่าเริ่มต้น วิธีตั้งค่าพร็อพเพอร์ตี้นี้

  1. เปิดไฟล์ message-processor.properties ในตัวแก้ไข หากไม่มีไฟล์ ให้สร้างขึ้นมาโดยทำดังนี้
    vi /opt/apigee/customer/application/message-processor.properties
  2. ตั้งค่าพร็อพเพอร์ตี้ตามต้องการ ดังนี้
    conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
  3. ตรวจสอบว่าผู้ใช้ "apigee" เป็นเจ้าของไฟล์พร็อพเพอร์ตี้:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. รีสตาร์ทเครื่องมือประมวลผลข้อความ
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

ค่าเริ่มต้น:

หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นที่กำหนดค่าที่ระดับระบบ

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: จำนวนเต็ม
ค่าที่ถูกต้องมีดังนี้
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials
  • refresh_token

ใช้กับการดำเนินการ GenerateAuthorizationCode ด้วย

อีลิเมนต์ <ExternalAccessToken>

<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>

บอกให้ Apigee Edge ทราบว่าจะค้นหาโทเค็นเพื่อการเข้าถึงภายนอกได้จากที่ใด (โทเค็นเพื่อการเข้าถึงที่ไม่ได้สร้างโดย Apigee Edge)

ตัวแปร request.queryparam.external_access_token บ่งบอกว่าโทเค็นเพื่อการเข้าถึงภายนอกควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?external_access_token=12345678 เช่น หากต้องการกำหนดให้โทเค็นเพื่อการเข้าถึงภายนอกอยู่ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_access_token ดูการใช้โทเค็น OAuth ของบุคคลที่สาม

อีลิเมนต์ <ExternalAuthorization>

<ExternalAuthorization>true</ExternalAuthorization>

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

ค่าเริ่มต้น:

false

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: บูลีน
ค่าที่ถูกต้องมีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • รหัสผ่าน
  • client_credentials

องค์ประกอบ <ExternalAuthorizationCode>

<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>

บอกให้ Apigee Edge ทราบตำแหน่งที่จะค้นหารหัสการให้สิทธิ์ภายนอก (รหัสการให้สิทธิ์ที่ไม่ได้สร้างโดย Apigee Edge)

ตัวแปร request.queryparam.external_auth_code บ่งบอกว่าควรมีการแสดงรหัสการให้สิทธิ์ภายนอกเป็นพารามิเตอร์การค้นหา เช่น ?external_auth_code=12345678 เช่น หากต้องการกำหนดให้ใช้รหัสการให้สิทธิ์ภายนอกในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_auth_code ดูการใช้โทเค็น OAuth ของบุคคลที่สาม

องค์ประกอบ <ExternalRefreshToken>

<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>

บอกให้ Apigee Edge ทราบว่าจะค้นหาโทเค็นการรีเฟรชภายนอกได้จากที่ใด (Apigee Edge ไม่ได้สร้างโทเค็นการรีเฟรช)

ตัวแปร request.queryparam.external_refresh_token บ่งบอกว่าโทเค็นการรีเฟรชภายนอกควรแสดงเป็นพารามิเตอร์การค้นหา เช่น ?external_refresh_token=12345678 เช่น หากต้องการกำหนดให้ใช้โทเค็นการรีเฟรชภายนอกในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_refresh_token ดูการใช้โทเค็น OAuth ของบุคคลที่สาม

องค์ประกอบ <GenerateResponse>

<GenerateResponse enabled='true'/>

หากตั้งค่าเป็น true นโยบายจะสร้างและแสดงผลการตอบกลับ เช่น สำหรับ GenerateAccessToken คำตอบอาจมีลักษณะดังนี้

{
  "issued_at" : "1467841035013",
  "scope" : "read",
  "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930",
  "refresh_token_issued_at" : "1467841035013",
  "status" : "approved",
  "refresh_token_status" : "approved",
  "api_product_list" : "[Product1, nhl_product]",
  "expires_in" : "1799",
  "developer.email" : "edward@slalom.org",
  "token_type" : "BearerToken",
  "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ",
  "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj",
  "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a",
  "organization_name" : "cerruti",
  "refresh_token_expires_in" : "0",
  "refresh_count" : "0"
}

หากเป็น false จะไม่มีการส่งการตอบกลับ แต่ระบบจะเติมชุดตัวแปรโฟลว์ด้วยค่าที่เกี่ยวข้องกับฟังก์ชันของนโยบาย ตัวอย่างเช่น ระบบจะป้อนข้อมูลตัวแปรโฟลว์ชื่อ oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code ด้วยรหัสการให้สิทธิ์ที่สร้างขึ้นใหม่ โปรดทราบว่า expires_in จะแสดงเป็นหน่วยวินาทีในการตอบสนอง

ค่าเริ่มต้น:

false

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: string
ค่าที่ถูกต้องมีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials
  • refresh_token
  • ยังสามารถใช้กับการดำเนินการ GenerateAuthorizationCode ได้

องค์ประกอบ <GenerateErrorResponse>

<GenerateErrorResponse enabled='true'/>

หากตั้งค่าเป็น true นโยบายจะสร้างและแสดงผลการตอบกลับหากแอตทริบิวต์ ContinueOnError ตั้งค่าเป็น "จริง" หากเป็น false (ค่าเริ่มต้น) ระบบจะไม่ส่งคำตอบ แต่ระบบจะป้อนข้อมูลชุดตัวแปรโฟลว์ด้วยค่าที่เกี่ยวข้องกับฟังก์ชันของนโยบาย

ค่าเริ่มต้น:

false

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: string
ค่าที่ถูกต้องมีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials
  • refresh_token
  • ยังสามารถใช้กับการดำเนินการ GenerateAuthorizationCode ได้

<GrantType>

<GrantType>request.queryparam.grant_type</GrantType>

บอกนโยบายว่าจะหาพารามิเตอร์ประเภทการให้สิทธิ์ที่ส่งในคำขอได้ที่ใด ตามข้อกำหนดของ OAuth 2.0 คุณต้องระบุประเภทการให้สิทธิ์สำหรับคำขอสำหรับโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์ ตัวแปรอาจเป็นส่วนหัว พารามิเตอร์การค้นหา หรือพารามิเตอร์ของฟอร์ม (ค่าเริ่มต้น)

ตัวอย่างเช่น request.queryparam.grant_type ระบุว่ารหัสผ่านควรแสดงเป็นพารามิเตอร์การค้นหา เช่น ?grant_type=password หากต้องการกำหนดประเภทการให้สิทธิ์ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.grant_type โปรดดูที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

ค่าเริ่มต้น:

request.formparam.grant_type (x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: string
ค่าที่ถูกต้องมีดังนี้ ตัวแปรตามที่อธิบายไว้ข้างต้น
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • รหัสผ่าน
  • โดยปริยาย
  • client_credentials
  • refresh_token

องค์ประกอบ <การดำเนินการ>

<Operation>GenerateAuthorizationCode</Operation>

การดำเนินการ OAuth 2.0 ที่นโยบายดำเนินการ

ค่าเริ่มต้น:

หากไม่ได้ระบุ <Operation> ไว้ Edge จะดูรายการของ <SupportedGrantTypes> เฉพาะการดำเนินการในประเภทการให้สิทธิ์เหล่านั้นเท่านั้นที่จะประสบความสำเร็จ กล่าวคือ คุณจะละเว้น <Operation> ก็ได้หากระบุ <GrantType> ในรายการ <SupportedGrantTypes> หากไม่ได้ระบุ <Operation> และ <SupportedGrantTypes> ประเภทการให้สิทธิ์เริ่มต้นจะเป็นAuthorization_code ซึ่งหมายความว่าคำขอประเภทการให้สิทธิ์รหัสการให้สิทธิ์จะสำเร็จ แต่คำขออื่นๆ ทั้งหมดจะไม่สำเร็จ

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้

องค์ประกอบ <PassWord>

<PassWord>request.queryparam.password</PassWord>

องค์ประกอบนี้ใช้กับ ประเภทการให้สิทธิ์รหัสผ่านเท่านั้น เมื่อใช้ประเภทการให้สิทธิ์รหัสผ่าน ข้อมูลเข้าสู่ระบบของผู้ใช้ (รหัสผ่านและชื่อผู้ใช้) จะต้องพร้อมใช้งานในนโยบาย OAuthV2 องค์ประกอบ <PassWord> และ <UserName> จะใช้เพื่อระบุตัวแปรที่ Edge สามารถค้นหาค่าเหล่านี้ได้ หากไม่ได้ระบุองค์ประกอบเหล่านี้ นโยบายคาดว่าจะพบค่า (โดยค่าเริ่มต้น) ในพารามิเตอร์แบบฟอร์มที่ชื่อ username และ password หากไม่พบค่า แสดงว่านโยบายจะแสดงข้อผิดพลาด คุณใช้องค์ประกอบ <PassWord> และ <UserName> เพื่ออ้างอิงตัวแปรโฟลว์ใดก็ได้ที่มีข้อมูลเข้าสู่ระบบ

เช่น คุณส่งผ่านรหัสผ่านในคำขอโทเค็นโดยใช้พารามิเตอร์การค้นหาได้ แล้วตั้งค่าองค์ประกอบดังนี้ <PassWord>request.queryparam.password</PassWord>. หากต้องการกำหนดให้ใช้รหัสผ่านในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.password

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

ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม

ค่าเริ่มต้น:

request.formparam.password (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

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

องค์ประกอบ <RedirectUri>

<RedirectUri>request.queryparam.redirect_uri</RedirectUri>

ระบุตำแหน่งที่ Edge ควรมองหาพารามิเตอร์ redirect_uri ในคำขอ

เกี่ยวกับ URI การเปลี่ยนเส้นทาง

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

  • (จำเป็น) หาก URL เรียกกลับลงทะเบียนกับแอปของนักพัฒนาซอฟต์แวร์ซึ่งเชื่อมโยงกับคีย์ไคลเอ็นต์ของคำขอ และหากมี redirect_uri ในคำขอ ทั้ง 2 รายการจะต้องตรงกัน หากไม่ตรงกัน ระบบจะแสดงผลข้อผิดพลาด ดูข้อมูลเกี่ยวกับการลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์ใน Edge และการระบุ URL เรียกกลับได้ที่ลงทะเบียนแอปและจัดการคีย์ API

  • (ไม่บังคับ) หากลงทะเบียน URL เรียกกลับไว้และไม่มี redirect_uri ในคำขอ Edge จะเปลี่ยนเส้นทางไปยัง URL เรียกกลับที่ลงทะเบียนไว้
  • (ต้องระบุ) หาก URL เรียกกลับไม่ได้ลงทะเบียนไว้ คุณต้องระบุ redirect_uri โปรดทราบว่าในกรณีนี้ Edge จะยอมรับ URL ใดก็ได้ กรณีนี้อาจก่อให้เกิดปัญหาด้านความปลอดภัย ดังนั้นจึงควรใช้กับแอปไคลเอ็นต์ที่เชื่อถือได้เท่านั้น หากแอปไคลเอ็นต์ไม่น่าเชื่อถือ แนวทางปฏิบัติแนะนำคือต้องมีการลงทะเบียน URL เรียกกลับเสมอ

คุณจะส่งพารามิเตอร์นี้ในพารามิเตอร์การค้นหาหรือในส่วนหัวก็ได้ ตัวแปร request.queryparam.redirect_uri บ่งบอกว่า RedirectUri ควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?redirect_uri=login.myapp.com เช่น หากต้องการกำหนดให้ RedirectUri อยู่ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.redirect_uri ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม

ค่าเริ่มต้น:

request.formparam.redirect_uri (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ ตัวแปรโฟลว์ทั้งหมดที่เข้าถึงได้ในนโยบายขณะรันไทม์
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • โดยปริยาย

ใช้กับการดำเนินการ GenerateAuthorizationCode ด้วย

องค์ประกอบ <RefreshToken>

<RefreshToken>request.queryparam.refreshtoken</RefreshToken>

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

ตัวแปร request.queryparam.refreshtoken ระบุว่าโทเค็นการรีเฟรชควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?refresh_token=login.myapp.com เช่น หากต้องการกำหนดให้ RefreshToken ในส่วนหัว HTTP ให้กำหนดค่านี้เป็น request.header.refresh_token ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม

ค่าเริ่มต้น:

request.formparam.refresh_token (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ ตัวแปรโฟลว์ทั้งหมดที่เข้าถึงได้ในนโยบายขณะรันไทม์
ใช้กับประเภทการให้สิทธิ์
  • refresh_token

องค์ประกอบ <RefreshTokenEXPIRIn>

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

บังคับใช้เวลาหมดอายุของโทเค็นการรีเฟรชในหน่วยมิลลิวินาที ค่าเวลาหมดอายุเป็นค่าที่ระบบสร้างขึ้นบวกกับค่า <RefreshTokenExpiresIn> หากตั้งค่า <RefreshTokenExpiresIn> เป็น -1 โทเค็นการรีเฟรชจะหมดอายุตามวันหมดอายุของโทเค็นการรีเฟรช OAuth สูงสุด หากไม่ได้ระบุ <RefreshTokenExpiresIn> วันหมดอายุจะเป็นแบบไม่จำกัดโดยค่าเริ่มต้น

นอกจากนี้ ยังกำหนดเวลาหมดอายุระหว่างรันไทม์ได้โดยใช้ค่าเริ่มต้นที่เป็นฮาร์ดโค้ด หรือโดยการอ้างอิงตัวแปรโฟลว์ เช่น จัดเก็บค่าการหมดอายุของโทเค็นในแมปค่าคีย์ เรียกข้อมูลค่า กําหนดให้กับตัวแปร และอ้างอิงค่าในนโยบาย เช่น kvm.oauth.expires_in

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

<RefreshTokenExpiresIn ref="kvm.oauth.expires_in">
    3600000 <!--default value in milliseconds-->
</RefreshTokenExpiresIn>

Private Cloud: สำหรับการติดตั้ง Edge สำหรับ Private Cloud พร็อพเพอร์ตี้ conf_keymanagement_oauth_refresh_token_expiry_time_in_millis จะกำหนดค่าเริ่มต้น วิธีตั้งค่าพร็อพเพอร์ตี้นี้

  1. เปิดไฟล์ message-processor.properties ในตัวแก้ไข หากไม่มีไฟล์ ให้สร้างขึ้นมาโดยทำดังนี้
    vi /opt/apigee/customer/application/message-processor.properties
  2. ตั้งค่าพร็อพเพอร์ตี้ตามต้องการ ดังนี้
    conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
  3. ตรวจสอบว่าผู้ใช้ "apigee" เป็นเจ้าของไฟล์พร็อพเพอร์ตี้:
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
  4. รีสตาร์ทเครื่องมือประมวลผลข้อความ
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart

ค่าเริ่มต้น:

หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นที่กำหนดค่าที่ระดับระบบ

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: จำนวนเต็ม
ค่าที่ถูกต้องมีดังนี้
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • รหัสผ่าน
  • refresh_token

องค์ประกอบ <ResponseType>

<ResponseType>request.queryparam.response_type</ResponseType>

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

โดยค่าเริ่มต้น Edge จะมองหาค่าประเภทการตอบกลับในพารามิเตอร์การค้นหา response_type หากต้องการลบล้างการทำงานเริ่มต้นนี้ ให้ใช้องค์ประกอบ <ResponseType> เพื่อกำหนดค่าตัวแปรโฟลว์ที่มีค่าประเภทการตอบกลับ เช่น หากคุณตั้งค่าองค์ประกอบนี้เป็น request.header.response_type ทาง Edge จะมองหาประเภทการตอบกลับที่จะส่งไปในส่วนหัวของคำขอ โปรดดูที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

ค่าเริ่มต้น:

request.formparam.response_type (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ ใช้องค์ประกอบนี้หากคุณต้องการลบล้างการทำงานเริ่มต้น

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ code (สำหรับประเภทการให้สิทธิ์รหัสการให้สิทธิ์) หรือ token (สำหรับประเภทการให้สิทธิ์โดยนัย)
ใช้กับประเภทการให้สิทธิ์
  • โดยปริยาย
  • ใช้กับการดำเนินการ GenerateAuthorizationCode ด้วย

องค์ประกอบ <ReuseรีเฟรชToken>

<ReuseRefreshToken>true</ReuseRefreshToken>

เมื่อตั้งค่าเป็น true ระบบจะใช้โทเค็นการรีเฟรชที่มีอยู่ซ้ำจนกว่าจะหมดอายุ หากเป็น false Apigee Edge จะออกโทเค็นการรีเฟรชใหม่เมื่อมีโทเค็นการรีเฟรชที่ถูกต้อง

ค่าเริ่มต้น:

false

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: boolean
ค่าที่ถูกต้องมีดังนี้

true หรือ false

ใช้กับประเภทการให้สิทธิ์:
  • refresh_token

องค์ประกอบ <Scope>

<Scope>request.queryparam.scope</Scope>

หากองค์ประกอบนี้อยู่ในนโยบาย GenerateAccessToken หรือ GenerateAuthorizationCode ระบบจะใช้องค์ประกอบดังกล่าวเพื่อระบุขอบเขตที่จะให้สิทธิ์โทเค็นหรือโค้ด ปกติแล้วค่าเหล่านี้จะส่งผ่านไปให้กับนโยบายในคำขอจากแอปไคลเอ็นต์ คุณกำหนดค่าองค์ประกอบให้นำตัวแปรโฟลว์ได้ ซึ่งมีตัวเลือกในการเลือกวิธีส่งขอบเขตในคำขอ ในตัวอย่างต่อไปนี้ request.queryparam.scope บ่งชี้ว่าขอบเขตควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?scope=READ เช่น หากต้องการระบุขอบเขตในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.scope

หากองค์ประกอบนี้ปรากฏในนโยบาย "VerifyAccessToken" ระบบจะใช้องค์ประกอบดังกล่าวเพื่อระบุขอบเขตที่นโยบายควรบังคับใช้ ในนโยบายประเภทนี้ ค่าต้องเป็นชื่อขอบเขต "ฮาร์ดโค้ด" - คุณใช้ตัวแปรไม่ได้ เช่น

<Scope>A B</Scope>

โปรดดูหัวข้อการทำงานกับขอบเขต OAuth2 และการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

ค่าเริ่มต้น:

ไม่มีขอบเขต

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้

หากใช้กับนโยบาย Generate* ตัวแปรขั้นตอน

หากใช้กับ ConfirmAccessToken ซึ่งเป็นรายการชื่อขอบเขต (สตริง) ที่คั่นด้วยการเว้นวรรค

ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • โดยปริยาย
  • รหัสผ่าน
  • client_credentials
  • ใช้ร่วมกับการดำเนินการ GenerateAuthorizationCode และ ConfirmAccessToken ได้ด้วย

องค์ประกอบ <State>

<State>request.queryparam.state</State>

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

ตัวอย่างเช่น request.queryparam.state บ่งชี้ว่าสถานะควรเป็นพารามิเตอร์การค้นหา เช่น ?state=HjoiuKJH32 เช่น หากต้องการกำหนดสถานะในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.state ดูเพิ่มเติมที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

ค่าเริ่มต้น:

ไม่มีสถานะ

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ ตัวแปรโฟลว์ทั้งหมดที่นโยบายเข้าถึงได้ขณะรันไทม์
ใช้กับประเภทการให้สิทธิ์
  • ทั้งหมด
  • สามารถใช้กับการดำเนินการ GenerateAuthorizationCode ได้

องค์ประกอบ <StoreToken>

 <StoreToken>true</StoreToken> 

ตั้งค่าองค์ประกอบนี้เป็น true เมื่อองค์ประกอบ <ExternalAuthorization> คือ true องค์ประกอบ <StoreToken> จะบอกให้ Apigee Edge จัดเก็บโทเค็นเพื่อการเข้าถึงภายนอก มิฉะนั้น จะไม่สามารถคงอยู่ได้

ค่าเริ่มต้น:

false

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: บูลีน
ค่าที่ถูกต้องมีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์
  • authorization_code
  • รหัสผ่าน
  • client_credentials

องค์ประกอบ <SupportedGrantTypes>/<GrantType>

<SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
    <GrantType>client_credentials</GrantType>
    <GrantType>implicit</GrantType>
    <GrantType>password</GrantType>
</SupportedGrantTypes>

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

หากไม่มีการระบุประเภทการให้สิทธิ์ที่รองรับ การให้สิทธิ์ประเภทที่อนุญาตมีเพียง authorization_code และ implicit โปรดดูองค์ประกอบ <GrantType> (ซึ่งเป็นองค์ประกอบระดับสูงกว่าที่ใช้ในการระบุตําแหน่งที่ Apigee Edge ควรค้นหาพารามิเตอร์ grant_type ที่ส่งผ่านในคำขอไคลเอ็นต์) Edge จะตรวจสอบว่าค่าของพารามิเตอร์ grant_type ตรงกับการให้สิทธิ์ในประเภทที่รองรับ)

ค่าเริ่มต้น:

รหัสการให้สิทธิ์และโดยนัย

สถานที่ตั้ง:

ต้องระบุ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้
  • client_credentials
  • authorization_code
  • รหัสผ่าน
  • โดยปริยาย

องค์ประกอบ <Tokens>/<Token>

ใช้กับการดำเนินการ InspectToken และในระหว่าง คุณก็สามารถใช้โทเค็นได้ ดูการอนุมัติและการเพิกถอนโทเค็นเพื่อการเข้าถึง องค์ประกอบ <Token> ระบุตัวแปรโฟลว์ที่กำหนดแหล่งที่มาของโทเค็นที่จะเพิกถอน หากนักพัฒนาซอฟต์แวร์จะต้องส่งโทเค็นเพื่อการเข้าถึงเป็นพารามิเตอร์การค้นหาชื่อ access_token เช่น ให้ใช้ request.queryparam.access_token

อีลิเมนต์ <UserName>

<UserName>request.queryparam.user_name</UserName>

องค์ประกอบนี้ใช้กับ ประเภทการให้สิทธิ์รหัสผ่านเท่านั้น เมื่อใช้ประเภทการให้สิทธิ์รหัสผ่าน ข้อมูลเข้าสู่ระบบของผู้ใช้ (รหัสผ่านและชื่อผู้ใช้) จะต้องพร้อมใช้งานในนโยบาย OAuthV2 องค์ประกอบ <PassWord> และ <UserName> จะใช้เพื่อระบุตัวแปรที่ Edge สามารถค้นหาค่าเหล่านี้ได้ หากไม่ได้ระบุองค์ประกอบเหล่านี้ นโยบายคาดว่าจะพบค่า (โดยค่าเริ่มต้น) ในพารามิเตอร์แบบฟอร์มที่ชื่อ username และ password หากไม่พบค่า แสดงว่านโยบายจะแสดงข้อผิดพลาด คุณใช้องค์ประกอบ <PassWord> และ <UserName> เพื่ออ้างอิงตัวแปรโฟลว์ใดก็ได้ที่มีข้อมูลเข้าสู่ระบบ

เช่น คุณส่งชื่อผู้ใช้ในพารามิเตอร์การค้นหาแล้วตั้งค่าองค์ประกอบ <UserName> ได้โดยทำดังนี้ <UserName>request.queryparam.username</UserName>.หากต้องการ ระบุชื่อผู้ใช้ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.username

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

ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม

ค่าเริ่มต้น:

request.formparam.username (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ)

สถานที่ตั้ง:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ถูกต้องมีดังนี้ การตั้งค่าตัวแปรใดก็ได้
ใช้กับประเภทการให้สิทธิ์ รหัสผ่าน

กำลังยืนยันโทเค็นเพื่อการเข้าถึง

เมื่อตั้งค่าปลายทางของโทเค็นสำหรับพร็อกซี API แล้ว ระบบจะแนบนโยบาย OAuthV2 ที่เกี่ยวข้องซึ่งระบุการดำเนินการ VerifyAccessToken กับโฟลว์ที่แสดงทรัพยากรที่มีการป้องกัน

เช่น นโยบายต่อไปนี้จะบังคับใช้การยืนยันโทเค็นเพื่อการเข้าถึงเพื่อให้แน่ใจว่าคำขอทั้งหมดที่ส่งไปยัง API ได้รับอนุญาต

<OAuthV2 name="VerifyOAuthAccessToken">
  <Operation>VerifyAccessToken</Operation>
</OAuthV2>

นโยบายจะแนบไปกับทรัพยากร API เพื่อปกป้อง หากต้องการตรวจสอบว่าคำขอทั้งหมดที่ส่งไปยัง API ได้รับการยืนยันแล้ว ให้แนบนโยบายไปกับ PreFlow คำขอ ProxyEndpoint ดังนี้

<PreFlow>
  <Request>
    <Step><Name>VerifyOAuthAccessToken</Name></Step>
  </Request>
</PreFlow>

คุณใช้องค์ประกอบที่ไม่บังคับต่อไปนี้เพื่อลบล้างการตั้งค่าเริ่มต้นสำหรับการดำเนินการ ConfirmAccessToken ได้

ชื่อ คำอธิบาย
ขอบเขต

รายการขอบเขตที่คั่นด้วยช่องว่าง การยืนยันจะสำเร็จหากมีขอบเขตที่ระบุอย่างน้อย 1 รายการในโทเค็นเพื่อการเข้าถึง ตัวอย่างเช่น นโยบายต่อไปนี้จะตรวจสอบโทเค็นเพื่อการเข้าถึงเพื่อให้แน่ใจว่ามีขอบเขตที่ระบุอย่างน้อย 1 รายการ หากมี READ หรือ WRITE อยู่ การยืนยันจะสำเร็จ

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken ตัวแปรที่ควรระบุโทเค็นเพื่อการเข้าถึง เช่น request.queryparam.accesstoken โดยค่าเริ่มต้น โทเค็นเพื่อการเข้าถึงควรแสดงโดยแอปในส่วนหัว HTTP การให้สิทธิ์ตามข้อมูลจำเพาะของ OAuth 2.0 ใช้การตั้งค่านี้หากโทเค็นเพื่อการเข้าถึงจะปรากฏในตำแหน่งที่ไม่ใช่แบบมาตรฐาน เช่น พารามิเตอร์การค้นหา หรือส่วนหัว HTTP ที่มีชื่ออื่นที่ไม่ใช่การให้สิทธิ์

โปรดดูที่การยืนยันโทเค็นเพื่อการเข้าถึงและการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

การระบุตำแหน่งที่ตั้งตัวแปรของคำขอ

สำหรับการให้สิทธิ์แต่ละประเภท นโยบายจะคาดเดาเกี่ยวกับสถานที่ตั้งหรือข้อมูลที่ต้องระบุในข้อความคำขอ สมมติฐานเหล่านี้อิงตามข้อกําหนดของ OAuth 2.0 หากแอปจำเป็นต้องเบี่ยงเบนจากข้อกำหนด OAuth 2.0 คุณอาจระบุตำแหน่งที่คาดไว้สำหรับแต่ละพารามิเตอร์ได้ เช่น เมื่อจัดการรหัสการให้สิทธิ์ คุณจะระบุตำแหน่งของรหัสการให้สิทธิ์, รหัสไคลเอ็นต์, URI การเปลี่ยนเส้นทาง และขอบเขตได้ โดยระบุเป็นส่วนหัว HTTP, พารามิเตอร์การค้นหา หรือพารามิเตอร์แบบฟอร์ม

ตัวอย่างด้านล่างแสดงวิธีระบุตำแหน่งของพารามิเตอร์รหัสการให้สิทธิ์ที่จำเป็นเป็นส่วนหัว HTTP

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.header.client_id</ClientId>
  <RedirectUri>request.header.redirect_uri</RedirectUri>
  <Scope>request.header.scope</Scope>
  ...

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

  ...
  <GrantType>request.header.grant_type</GrantType>
  <Code>request.header.code</Code>
  <ClientId>request.queryparam.client_id</ClientId>
  <RedirectUri>request.queryparam.redirect_uri</RedirectUri>
  <Scope>request.queryparam.scope</Scope>
  ...

กำหนดค่าตำแหน่งได้เพียง 1 ตำแหน่งต่อพารามิเตอร์เท่านั้น

ตัวแปรโฟลว์

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

การดำเนินการ ConfirmAccessToken

การดำเนินการ โปรดยืนยันว่าAccessToken ดำเนินการอยู่ ระบบจะป้อนข้อมูลตัวแปรโฟลว์จำนวนมากในบริบทการดำเนินการของพร็อกซี ตัวแปรเหล่านี้จะให้พร็อพเพอร์ตี้ที่เกี่ยวข้องกับโทเค็นเพื่อการเข้าถึง แอปของนักพัฒนาซอฟต์แวร์ นักพัฒนาซอฟต์แวร์ และบริษัท คุณใช้นโยบาย AssignMessage หรือ JavaScript ไป เช่น เพื่ออ่านตัวแปรเหล่านี้และใช้ตัวแปรใดก็ตามตามที่จำเป็นในภายหลังในโฟลว์ ซึ่งตัวแปรเหล่านี้อาจเป็นประโยชน์สําหรับการแก้ไขข้อบกพร่องด้วย

ตัวแปรเฉพาะโทเค็น

ตัวแปร คำอธิบาย
organization_name ชื่อขององค์กรที่ใช้พร็อกซี
developer.id รหัสของนักพัฒนาแอปที่เชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียน
developer.app.name ชื่อของนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียน
client_id รหัสไคลเอ็นต์ของแอปไคลเอ็นต์ที่ลงทะเบียนไว้
grant_type ประเภทการให้สิทธิ์ที่เชื่อมโยงกับคำขอ
token_type ประเภทโทเค็นที่เชื่อมโยงกับคำขอ
access_token โทเค็นเพื่อการเข้าถึงที่กำลังได้รับการยืนยัน
accesstoken.{custom_attribute} แอตทริบิวต์ที่กำหนดเองที่มีชื่อในโทเค็นเพื่อการเข้าถึง
issued_at วันที่ที่ออกโทเค็นเพื่อการเข้าถึงซึ่งแสดงเป็นเวลา Unix Epoch ในหน่วยมิลลิวินาที
expires_in เวลาหมดอายุสำหรับโทเค็นเพื่อการเข้าถึง แสดงใน วินาที แม้ว่าองค์ประกอบ ExpiresIn จะตั้งค่าการหมดอายุเป็นมิลลิวินาที แต่ในการตอบสนองของโทเค็นและตัวแปรโฟลว์ ค่าจะถูกเรียกใช้เป็นวินาที
status สถานะของโทเค็นเพื่อการเข้าถึง (เช่น อนุมัติหรือเพิกถอน)
scope ขอบเขต (หากมี) ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง
apiproduct.<custom_attribute_name> แอตทริบิวต์ที่กำหนดเองที่มีชื่อของผลิตภัณฑ์ API ซึ่งเชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียนไว้
apiproduct.name ชื่อผลิตภัณฑ์ API ที่เชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียนไว้
revoke_reason

(Apigee แบบผสมเท่านั้น) ระบุสาเหตุที่โทเค็นเพื่อการเข้าถึงถูกเพิกถอน

ค่าอาจเป็น REVOKED_BY_APP, REVOKED_BY_ENDUSER, REVOKED_BY_APP_ENDUSER หรือ TOKEN_REVOKED

ตัวแปรเฉพาะของแอป

ตัวแปรเหล่านี้เกี่ยวข้องกับแอปนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็น

ตัวแปร คำอธิบาย
app.name
app.id
app.accessType
app.callbackUrl
app.status อนุมัติหรือเพิกถอน
app.scopes
app.appFamily
app.apiproducts
app.appParentStatus
app.appType ตัวอย่างเช่น: นักพัฒนาซอฟต์แวร์
app.appParentId
app.created_by
app.created_at
app.last_modified_at
app.last_modified_by
app.{custom_attributes} แอตทริบิวต์ที่กำหนดเองที่มีชื่อของแอปไคลเอ็นต์ที่ลงทะเบียนไว้

ตัวแปรเฉพาะสำหรับนักพัฒนาแอป

หาก app.appType คือ "Company" ระบบจะเติมข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "Developer" ระบบจะเติมข้อมูลแอตทริบิวต์นักพัฒนาแอป

ตัวแปร คำอธิบาย
ตัวแปรเฉพาะสำหรับนักพัฒนาแอป
developer.id
developer.userName
developer.firstName
developer.lastName
developer.email
developer.status ใช้งานอยู่หรือไม่ได้ใช้งาน
developer.apps
developer.created_by
developer.created_at
developer.last_modified_at
developer.last_modified_by
developer.{custom_attributes} แอตทริบิวต์ที่กำหนดเองที่มีชื่อของนักพัฒนาแอป

ตัวแปรเฉพาะบริษัท

หาก app.appType คือ "Company" ระบบจะเติมข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "Developer" ระบบจะเติมข้อมูลแอตทริบิวต์นักพัฒนาแอป

ตัวแปร คำอธิบาย
company.id
company.displayName
company.apps
company.appOwnerStatus
company.created_by
company.created_at
company.last_modified_at
company.last_modified_by
company.{custom_attributes} แอตทริบิวต์ที่กำหนดเองที่มีชื่อของบริษัท

การดำเนินการ GenerateAuthorizationCode

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อการดำเนินการ GenerateAuthorizationCode ดำเนินการสำเร็จ

คำนำหน้า: oauthv2authcode.{policy_name}.{variable_name}

เช่น oauthv2authcode.GenerateCodePolicy.code

ตัวแปร คำอธิบาย
code รหัสการให้สิทธิ์ที่สร้างขึ้นเมื่อนโยบายทำงาน
redirect_uri URI การเปลี่ยนเส้นทางที่เชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียน
scope ขอบเขต OAuth ที่ไม่บังคับที่ส่งผ่านในคำขอไคลเอ็นต์
client_id รหัสไคลเอ็นต์ที่ส่งในคำขอไคลเอ็นต์

การดำเนินการ GenerateAccessToken และ RefreshAccessToken

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

คำนำหน้า: oauthv2accesstoken.{policy_name}.{variable_name}

เช่น oauthv2accesstoken.GenerateTokenPolicy.access_token

ชื่อตัวแปร คำอธิบาย
access_token โทเค็นเพื่อการเข้าถึงที่สร้างขึ้น
client_id รหัสไคลเอ็นต์ของแอปนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็นนี้
expires_in ค่าวันหมดอายุของโทเค็น ดูรายละเอียดที่องค์ประกอบ <ExpiresIn> โปรดทราบว่าในการตอบสนอง expires_in จะแสดงเป็น seconds
scope รายการขอบเขตที่พร้อมใช้งานซึ่งกำหนดค่าไว้สำหรับโทเค็น โปรดดูหัวข้อการทํางานกับขอบเขต OAuth2
status approved หรือ revoked ก็ได้
token_type ตั้งค่าเป็น BearerToken
developer.email อีเมลของนักพัฒนาแอปที่ลงทะเบียน ซึ่งเป็นเจ้าของแอปของนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็น
organization_name องค์กรที่พร็อกซีดำเนินการ
api_product_list รายการผลิตภัณฑ์ที่เชื่อมโยงกับแอปของนักพัฒนาซอฟต์แวร์ที่เกี่ยวข้องของโทเค็น
refresh_count
refresh_token โทเค็นการรีเฟรชที่สร้างขึ้น โปรดทราบว่าระบบจะไม่สร้างโทเค็นการรีเฟรชสำหรับประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์
refresh_token_expires_in อายุการใช้งานของโทเค็นการรีเฟรชเป็นวินาที
refresh_token_issued_at ค่าเวลานี้คือการแสดงสตริงของจำนวนการประทับเวลา 32 บิตที่เกี่ยวข้อง ตัวอย่างเช่น "Wed, 21 Aug 2013 19:16:47 UTC" จะสอดคล้องกับค่าการประทับเวลา 1377112607413
refresh_token_status approved หรือ revoked ก็ได้

GenerateAccessTokenImplicitGrant

ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อการดำเนินการ GenerateAccessTokenImplicit ดำเนินการสำเร็จสำหรับโฟลว์ประเภทการให้สิทธิ์โดยนัย

คำนำหน้า: oauthv2accesstoken.{policy_name}.{variable_name}

เช่น oauthv2accesstoken.RefreshTokenPolicy.access_token

ตัวแปร คำอธิบาย
oauthv2accesstoken.access_token โทเค็นเพื่อการเข้าถึงที่สร้างขึ้นเมื่อนโยบายทำงาน
oauthv2accesstoken.{policy_name}.expires_in ค่าวันหมดอายุของโทเค็นเป็นวินาที ดูรายละเอียดได้ในองค์ประกอบ <ExpiresIn>

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

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

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

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

รหัสข้อผิดพลาด สถานะ HTTP สาเหตุ ส่งโดยการดำเนินการ
steps.oauth.v2.access_token_expired 401 โทเค็นเพื่อการเข้าถึงหมดอายุ

โปรดยืนยันการเข้าถึง
โทเค็นที่ระบุให้เป็นโมฆะ

steps.oauth.v2.access_token_not_approved 401 เพิกถอนโทเค็นเพื่อการเข้าถึงแล้ว VerifyAccessToken
steps.oauth.v2.apiresource_doesnot_exist 401 ทรัพยากรที่ขอไม่มีผลิตภัณฑ์ API ใดๆ ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง VerifyAccessToken
steps.oauth.v2.FailedToResolveAccessToken 500 นโยบายคาดว่าจะพบโทเค็นเพื่อการเข้าถึงในตัวแปรที่ระบุในองค์ประกอบ <AccessToken> แต่แก้ไขตัวแปรไม่ได้ GenerateAccessToken
steps.oauth.v2.FailedToResolveAuthorizationCode 500 นโยบายคาดว่าจะพบรหัสการให้สิทธิ์ในตัวแปรที่ระบุในองค์ประกอบ <Code> แต่แก้ไขตัวแปรไม่ได้ GenerateAuthorizationCode
steps.oauth.v2.FailedToResolveClientId 500 นโยบายคาดว่าจะพบ Client-ID ในตัวแปรที่ระบุในองค์ประกอบ <ClientId> แต่แก้ไขตัวแปรไม่ได้ GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.FailedToResolveRefreshToken 500 นโยบายคาดว่าจะพบโทเค็นการรีเฟรชในตัวแปรที่ระบุในองค์ประกอบ <RefreshToken> แต่แก้ไขตัวแปรไม่ได้ RefreshAccessToken
steps.oauth.v2.FailedToResolveToken 500 นโยบายคาดว่าจะพบโทเค็นในตัวแปรที่ระบุในองค์ประกอบ <Tokens> แต่แก้ไขตัวแปรไม่ได้

verifyToken
ทำให้โทเค็นไม่ถูกต้อง

steps.oauth.v2.InsufficientScope 403 โทเค็นเพื่อการเข้าถึงที่แสดงในคำขอมีขอบเขตที่ไม่ตรงกับขอบเขตที่ระบุไว้ในนโยบายโทเค็นเพื่อการเข้าถึง หากต้องการเรียนรู้เกี่ยวกับขอบเขต โปรดดูหัวข้อการทำงานกับขอบเขต OAuth2 VerifyAccessToken
steps.oauth.v2.invalid_access_token 401 โทเค็นเพื่อการเข้าถึงที่ส่งจากไคลเอ็นต์ไม่ถูกต้อง VerifyAccessToken
steps.oauth.v2.invalid_client 401

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

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

GenerateAccessToken
RefreshAccessToken
steps.oauth.v2.invalid_request 400 ชื่อข้อผิดพลาดนี้จะใช้กับข้อผิดพลาดประเภทต่างๆ โดยทั่วไปจะใช้สำหรับพารามิเตอร์ที่หายไปหรือไม่ถูกต้องซึ่งส่งไปในคำขอ หากตั้งค่า <GenerateResponse> เป็น false ให้ใช้ตัวแปรข้อผิดพลาด (ตามที่อธิบายไว้ด้านล่าง) เพื่อเรียกข้อมูลรายละเอียดเกี่ยวกับข้อผิดพลาด เช่น ชื่อและสาเหตุของข้อผิดพลาด GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken
steps.oauth.v2.InvalidAccessToken 401 ส่วนหัวของการให้สิทธิ์ไม่มีคำว่า "ผู้ถือ" ซึ่งเป็นสิ่งจำเป็น เช่น Authorization: Bearer your_access_token VerifyAccessToken
steps.oauth.v2.InvalidAPICallAsNo\
steps.oauth.v2.ApiProductMatchFound
401

พร็อกซี API ไม่ได้อยู่ในผลิตภัณฑ์ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง

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

และดูคำแนะนำเพิ่มเติมเกี่ยวกับสาเหตุของข้อผิดพลาดนี้ได้ในโพสต์ชุมชน Apigee นี้

VerifyAccessToken
steps.oauth.v2.InvalidClientIdentifier 500

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

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

GenerateAccessToken
RefreshAccessToken

steps.oauth.v2.InvalidParameter 500 นโยบายต้องระบุโทเค็นเพื่อการเข้าถึงหรือรหัสการให้สิทธิ์ แต่ไม่ใช่ทั้ง 2 อย่าง GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.InvalidTokenType 500 องค์ประกอบ <Tokens>/<Token> กำหนดให้คุณระบุประเภทโทเค็น (เช่น refreshtoken) หากไคลเอ็นต์ส่งประเภทที่ไม่ถูกต้อง ระบบจะแสดงข้อผิดพลาดนี้ verifyToken
ทำให้โทเค็นไม่ถูกต้อง
steps.oauth.v2.MissingParameter 500 ประเภทการตอบกลับคือ token แต่ไม่ได้ระบุประเภทการให้สิทธิ์ไว้ GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

ไคลเอ็นต์ระบุประเภทการให้สิทธิ์ที่นโยบายไม่รองรับ (ไม่ได้แสดงในองค์ประกอบ <SupportedGrantTypes>)

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

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

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

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

ชื่อข้อผิดพลาด สาเหตุ
InvalidValueForExpiresIn

สำหรับองค์ประกอบ <ExpiresIn> ค่าที่ถูกต้องจะเป็นจำนวนเต็มบวกและ -1

InvalidValueForRefreshTokenExpiresIn สำหรับองค์ประกอบ <RefreshTokenExpiresIn> ค่าที่ถูกต้องจะเป็นจำนวนเต็มบวกและ -1
InvalidGrantType มีการระบุประเภทการให้สิทธิ์ที่ไม่ถูกต้องในองค์ประกอบ <SupportedGrantTypes> ดูรายการประเภทที่ใช้ได้จากข้อมูลอ้างอิงนโยบาย
ExpiresInNotApplicableForOperation โปรดตรวจสอบว่าการดำเนินการที่ระบุในการสนับสนุนองค์ประกอบ <Operatings> จะหมดอายุ ตัวอย่างเช่น การดำเนินการ ConfirmToken จะไม่สามารถทำได้
RefreshTokenExpiresInNotApplicableForOperation โปรดตรวจสอบว่าการดำเนินการที่ระบุในเอลิเมนต์ <Operatings> รองรับการหมดอายุของโทเค็นการรีเฟรช ตัวอย่างเช่น การดำเนินการ ConfirmToken จะไม่สามารถทำได้
GrantTypesNotApplicableForOperation โปรดตรวจสอบว่าประเภทการให้สิทธิ์ที่ระบุใน <SupportedGrantTypes> ได้รับการสนับสนุนสำหรับ การดำเนินการที่ระบุ
OperationRequired

คุณต้องระบุการดำเนินการในนโยบายนี้โดยใช้องค์ประกอบ <Operation>

หมายเหตุ: หากองค์ประกอบ <Operation> ขาดหายไป UI จะแสดงข้อผิดพลาดในการตรวจสอบสคีมา

InvalidOperation

คุณต้องระบุการดำเนินการที่ถูกต้องในนโยบายนี้โดยใช้องค์ประกอบ <Operation>

หมายเหตุ: หากองค์ประกอบ <Operation> ไม่ถูกต้อง UI จะแสดงข้อผิดพลาดในการตรวจสอบสคีมา

TokenValueRequired คุณต้องระบุค่า <Token> ของโทเค็นในองค์ประกอบ <Tokens>

ตัวแปรของข้อผิดพลาด

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

ตัวแปร สถานที่ ตัวอย่าง
fault.name="fault_name" fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด fault.name = "invalid_request"
oauthV2.policy_name.failed policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด oauthV2.GenerateAccesstoken.fault.name = invalid_request

หมายเหตุ: สําหรับการดำเนินการ ConfirmAccessToken ชื่อข้อผิดพลาดจะมีคําต่อท้ายต่อไปนี้ keymanagement.service
เช่น keymanagement.service.invalid_access_token

oauthV2.policy_name.fault.cause policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด oauthV2.GenerateAccesstoken.cause = Required param : grant_type

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

ระบบจะส่งการตอบกลับเหล่านี้กลับไปยังไคลเอ็นต์หากองค์ประกอบ <GenerateResponse> เป็น true

หาก <GenerateResponse> เป็น true นโยบายจะแสดงผลข้อผิดพลาดในรูปแบบนี้สำหรับการดำเนินการที่สร้างโทเค็นและรหัส ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด OAuth HTTP

{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}

หาก <GenerateResponse> เป็น true นโยบายจะแสดงผลข้อผิดพลาดในรูปแบบนี้เพื่อใช้ในการยืนยันและตรวจสอบการดำเนินการ ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด OAuth HTTP

{  
   {  
      "fault":{  
         "faultstring":"Invalid Access Token",
         "detail":{  
            "errorcode":"keymanagement.service.invalid_access_token"
         }
      }
   }

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

<FaultRule name=OAuthV2 Faults">
    <Step>
        <Name>AM-InvalidClientResponse</Name>
        <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
    </Step>
    <Step>
        <Name>AM-InvalidTokenResponse</Name>
        <Condition>(fault.name = "invalid_access_token")</Condition>
    </Step>
    <Condition>(oauthV2.failed = true) </Condition>
</FaultRule>

สคีมานโยบาย

นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd) โปรดทราบว่าสคีมานโยบายมีอยู่ใน GitHub

การทำงานกับการกำหนดค่า OAuth เริ่มต้น

แต่ละองค์กร (แม้แต่องค์กรที่ทดลองใช้ฟรี) ใน Apigee Edge จะได้รับการจัดสรรปลายทางโทเค็น OAuth ปลายทางได้รับการกำหนดค่าล่วงหน้าด้วยนโยบายในพร็อกซี API ที่ชื่อว่า oauth คุณจะเริ่มใช้ปลายทางของโทเค็นได้ทันทีที่สร้างบัญชีใน Apigee Edge ได้ โปรดดูรายละเอียดที่หัวข้อการทำความเข้าใจปลายทาง OAuth

การลบโทเค็นเพื่อการเข้าถึงอย่างถาวร

โดยค่าเริ่มต้น ระบบจะลบโทเค็น OAuth2 ออกจากระบบ Apigee Edge อย่างถาวรในอีก 3 วัน (259200 วินาที) หลังจากที่ทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช (หากมี) หมดอายุ ในบางกรณี คุณอาจต้องเปลี่ยนค่าเริ่มต้นนี้ เช่น คุณอาจต้องการลดเวลาลบถาวรเพื่อประหยัดพื้นที่ในดิสก์หากมีการสร้างโทเค็นจำนวนมาก

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

กำลังอัปเดตการตั้งค่าการล้างข้อมูลสำหรับ Edge Private Cloud เวอร์ชัน 4.16.01 ขึ้นไป

หมายเหตุ: เฉพาะโทเค็นที่สร้างขึ้นหลังจากการตั้งค่าเหล่านี้เท่านั้นที่จะมีผล การตั้งค่านี้จะไม่มีผลกับโทเค็นที่สร้างขึ้นก่อนหน้านี้

กำลังอัปเดตการตั้งค่าการล้างข้อมูลสำหรับ Edge Private Cloud 4.15.07

หมายเหตุ: เฉพาะโทเค็นที่สร้างขึ้นหลังจากใช้การตั้งค่าเหล่านี้เท่านั้นที่จะมีผล การตั้งค่าจะไม่มีผลกับโทเค็นที่สร้างขึ้นก่อนหน้านี้

การทำงานที่ไม่เป็นไปตามข้อกำหนด RFC

นโยบาย OAuthV2 จะแสดงผลการตอบกลับโทเค็นที่มีพร็อพเพอร์ตี้บางอย่างที่ไม่เป็นไปตามซึ่งเป็นไปตาม RFC ตารางต่อไปนี้แสดงพร็อพเพอร์ตี้ที่ไม่เป็นไปตามนโยบาย ซึ่งแสดงผลโดยนโยบาย OAuthV2 และพร็อพเพอร์ตี้ที่สอดคล้องกัน

OAuthV2 แสดงผล: พร็อพเพอร์ตี้ที่เป็นไปตามข้อกำหนด RFC คือ
"token_type":"BearerToken" "token_type":"Bearer"
"expires_in":"3600" "expires_in":3600

(ค่าที่สอดคล้องกับข้อกำหนดคือตัวเลข ไม่ใช่สตริง)

การตอบกลับที่เป็นข้อผิดพลาดสำหรับโทเค็นการรีเฟรชที่หมดอายุเมื่อ grant_type = refresh_token มีลักษณะดังนี้

{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}

แต่การตอบกลับที่เป็นไปตามข้อกำหนดของ RFC มีดังนี้

{"error" : "invalid_grant", "error_description" :"refresh token expired"}

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