นโยบาย OAuthV2

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

อะไร

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

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

ลองฟัง

VerifyAccessToken

VerifyAccessToken

การกําหนดค่านโยบาย OAuthV2 นี้ (ที่มีการดำเนินการ VerifyAccessToken) จะยืนยันว่าโทเค็นการเข้าถึงที่ส่งไปยัง 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>

หมายเหตุ: ระบบรองรับเฉพาะโทเค็น Bearer ของ 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 "ไม่ได้รับสิทธิ์" แม้ว่านโยบายจะระบุพารามิเตอร์การเข้าสู่ระบบที่ถูกต้องแล้วก็ตาม หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าส่วนหัวคำขอการให้สิทธิ์

ส่วนหัวการอนุญาตต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี 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 เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

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

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

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

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

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

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

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

ไม่มี

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

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

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

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

โดยค่าเริ่มต้น VerifyAccessToken จะคาดหวังว่าระบบจะส่งโทเค็นการเข้าถึงในส่วนหัว 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>

โดยค่าเริ่มต้น VerifyAccessToken จะคาดหวังว่าระบบจะส่งโทเค็นการเข้าถึงในส่วนหัวการให้สิทธิ์เป็นโทเค็น Bearer เช่น

-H "Authorization: Bearer Rft3dqrs56Blirls56a"

ปัจจุบัน Bearer เป็นคำนำหน้าเพียงคำเดียวที่รองรับ

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

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>

<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 ในนโยบายการสร้างโทเค็นการเข้าถึง และแอตทริบิวต์ที่กำหนดเองเป็นเพียงส่วนหนึ่งของข้อมูลเมตาของโทเค็นการเข้าถึง

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

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

  • รีเซ็ตแอตทริบิวต์ที่กำหนดเองในนโยบายโทเค็นการรีเฟรชอย่างชัดเจน และตั้งค่าการแสดงผลเป็น 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>

ในหลายกรณี แอปไคลเอ็นต์ต้องส่งรหัสไคลเอ็นต์ไปยังเซิร์ฟเวอร์การให้สิทธิ์ องค์ประกอบนี้ระบุว่า Apigee ควรมองหารหัสไคลเอ็นต์ในตัวแปรโฟลว์ 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 นาทีจนกว่าขีดจํากัดแคชจะหมดอายุ
  • เอนทิตี Key Management Service (KMS) (แอป นักพัฒนาซอฟต์แวร์ ผลิตภัณฑ์ API)
  • แอตทริบิวต์ที่กำหนดเองในโทเค็น OAuth และเอนทิตี KMS

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

<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 ของบุคคลที่สาม

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

เท็จ

การแสดงผล:

ไม่บังคับ

ประเภท: บูลีน
ค่าที่ใช้ได้มีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์:
  • 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 จะแสดงเป็นวินาทีในคำตอบ

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

เท็จ

การแสดงผล:

ไม่บังคับ

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

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

<GenerateErrorResponse enabled='true'/>

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

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

เท็จ

การแสดงผล:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ใช้ได้มีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์:
  • โดยนัย
  • รหัสผ่าน
  • 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-urlencoded ที่ระบุไว้ในเนื้อหาคำขอ)

การแสดงผล:

ไม่บังคับ

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

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

<Operation>GenerateAuthorizationCode</Operation>

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

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

หากไม่ได้ระบุ <Operation> ไว้ Edge จะแสดงรายการ <SupportedGrantTypes> เฉพาะการดำเนินการกับประเภทการให้เงินสนับสนุนเหล่านั้นเท่านั้นที่จะสำเร็จ กล่าวคือ คุณจะละ <Operation> ได้ หากระบุ <GrantType> ในรายการ <SupportedGrantTypes> หากไม่ได้ระบุทั้ง <Operation> และ <SupportedGrantTypes> ประเภทการให้สิทธิ์เริ่มต้นจะเป็น authorization_code กล่าวคือ คำขอประเภทการให้สิทธิ์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-urlencoded และระบุไว้ในเนื้อหาคำขอ)

การแสดงผล:

ไม่บังคับ

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

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

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

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

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

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

  • (ต้องระบุ) หากมีการลงทะเบียน URL การเรียกกลับกับแอปของนักพัฒนาแอปที่เชื่อมโยงกับคีย์ไคลเอ็นต์ของคําขอ และหากมี redirect_uri ในคําขอ ทั้งสองต้องตรงกันทุกประการ หากไม่ตรงกัน ระบบจะแสดงข้อผิดพลาด ดูข้อมูลเกี่ยวกับการลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์ใน Edge และระบุ URL ของ Callback ได้ที่ลงทะเบียนแอปและจัดการคีย์ 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-urlencoded และระบุไว้ในเนื้อหาคำขอ)

การแสดงผล:

ไม่บังคับ

ประเภท: สตริง
ค่าที่ใช้ได้มีดังนี้ ตัวแปรโฟลว์ทั้งหมดที่เข้าถึงได้ในนโยบายระหว่างรันไทม์
ใช้กับประเภทการให้สิทธิ์:
  • 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-urlencoded ที่ระบุไว้ในเนื้อหาคำขอ)

การตรวจหาบุคคล:

ไม่บังคับ

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

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

<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>

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

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

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

<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

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

63072000000 ms (2 ปี) (มีผลตั้งแต่วันที่ 5 ส.ค. 2024)

การแสดงผล:

ไม่บังคับ

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

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

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

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

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

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

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

การแสดงผล:

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

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

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

<ReuseRefreshToken>true</ReuseRefreshToken>

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

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

false

การแสดงผล:

ไม่บังคับ

ประเภท: บูลีน
ค่าที่ใช้ได้มีดังนี้

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* จะเป็นตัวแปรโฟลว์

หากใช้กับ VerifyAccessToken ให้ระบุรายการชื่อขอบเขต (สตริง) คั่นด้วยเว้นวรรค

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

องค์ประกอบ <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 จัดเก็บโทเค็นการเข้าถึงภายนอก ไม่เช่นนั้นระบบจะไม่เก็บข้อมูลไว้

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

เท็จ

การแสดงผล:

ไม่บังคับ

ประเภท: บูลีน
ค่าที่ใช้ได้มีดังนี้ จริงหรือเท็จ
ใช้กับประเภทการให้สิทธิ์:
  • 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 ตรงกับประเภทการให้สิทธิ์ที่รองรับ)

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

authorization _code และ implicit

การแสดงผล:

ต้องระบุ

ประเภท: สตริง
ค่าที่ใช้ได้มีดังนี้
  • client_credentials
  • authorization_code
  • รหัสผ่าน
  • โดยนัย

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

ใช้กับการดำเนินการ ValidateToken และ InvalidateToken ดูข้อมูลเพิ่มเติมได้ที่การอนุมัติและการเพิกถอนโทเค็นการเข้าถึง องค์ประกอบ <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 ที่จะได้รับการปกป้อง โปรดแนบนโยบายไปกับ PreFlow ของคำขอ ProxyEndpoint เพื่อให้มั่นใจว่าคำขอทั้งหมดไปยัง API ได้รับการยืนยันแล้ว ดังนี้

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

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

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

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

<OAuthV2 name="ValidateOauthScopePolicy">
  <Operation>VerifyAccessToken</Operation>
  <Scope>READ WRITE</Scope>
</OAuthV2>
AccessToken ตัวแปรที่คาดว่าจะมีโทเค็นการเข้าถึงอยู่ เช่น request.queryparam.accesstoken โดยค่าเริ่มต้น แอปควรแสดงโทเค็นการเข้าถึงในส่วนหัว HTTP Authorization ตามข้อกำหนด 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

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

การดำเนินการ VerifyAccessToken จะเริ่มทำงาน ระบบจะป้อนข้อมูลตัวแปรโฟลว์จำนวนมากในบริบทการเรียกใช้ของพร็อกซี ตัวแปรเหล่านี้จะให้พร็อพเพอร์ตี้ที่เกี่ยวข้องกับโทเค็นการเข้าถึง แอปของนักพัฒนาแอป นักพัฒนาแอป และบริษัท คุณสามารถใช้นโยบาย 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 Hybrid เท่านั้น) ระบุสาเหตุที่เพิกถอนโทเค็นการเข้าถึง

ค่าอาจเป็น 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 เป็น "บริษัท" ระบบจะป้อนข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "นักพัฒนาแอป" ระบบจะป้อนข้อมูลแอตทริบิวต์นักพัฒนาแอป

ตัวแปร คำอธิบาย
ตัวแปรเฉพาะนักพัฒนาแอป
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 เป็น "บริษัท" ระบบจะป้อนข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "นักพัฒนาแอป" ระบบจะป้อนข้อมูลแอตทริบิวต์นักพัฒนาแอป

ตัวแปร คำอธิบาย
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 จะแสดงเป็นวินาที
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 โทเค็นเพื่อการเข้าถึงหมดอายุแล้ว

VerifyAccessToken
InvalidateToken

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> องค์ประกอบ แต่หาตัวแปรไม่ได้

ValidateToken
InvalidateToken

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 ส่วนหัวของการให้สิทธิ์ไม่มีคำว่า "Bearer" ซึ่งจำเป็นต้องมี สำหรับ ตัวอย่าง: 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) หากลูกค้าส่งฟอร์มผิดประเภท ValidateToken
InvalidateToken
steps.oauth.v2.MissingParameter 500 ประเภทการตอบกลับคือ token แต่ไม่ได้ระบุประเภทการให้สิทธิ์ GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
steps.oauth.v2.UnSupportedGrantType 500

ลูกค้าระบุประเภทการให้สิทธิ์ที่นโยบายไม่รองรับ (ไม่มีระบุไว้ใน &lt;SupportedGrantTypes&gt; )

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

GenerateAccessToken
GenerateAuthorizationCode
GenerateAccessTokenImplicitGrant
RefreshAccessToken

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

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

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

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

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

หมายเหตุ: สำหรับการดำเนินการ VerifyAccessToken ชื่อข้อบกพร่องจะมีคำต่อท้ายนี้: 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 นโยบายจะแสดงข้อผิดพลาด ในรูปแบบนี้สำหรับการดำเนินการที่สร้างโทเค็นและรหัส ดูรายการทั้งหมดได้ที่ ข้อผิดพลาด HTTP ของ OAuth ข้อมูลอ้างอิงการตอบกลับ

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

หาก <GenerateResponse> เป็น true นโยบายจะแสดงข้อผิดพลาด ในรูปแบบนี้เพื่อยืนยันและตรวจสอบการดำเนินการ ดูรายการทั้งหมดได้ที่ข้อผิดพลาด HTTP 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 for 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"}

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