นโยบาย 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>

หมายเหตุ: ระบบรองรับเฉพาะโทเค็นผู้ถือ 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

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

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

โทเค็นโฟลว์การตอบกลับ

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

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

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

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

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

เท็จ

การแสดงตน:

ไม่บังคับ

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

  • (ไม่บังคับ) หากลงทะเบียน URL ของ Callback และไม่มี redirect_uri ในคำขอ Edge จะเปลี่ยนเส้นทางไปยัง URL ของ Callback ที่ลงทะเบียนไว้
  • (ต้องระบุ) หากไม่ได้ลงทะเบียน 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

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

<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 มิลลิวินาที (2 ปี) (มีผลตั้งแต่วันที่ 5 ส.ค. 2024)

การแสดงตน:

ไม่บังคับ

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

องค์ประกอบ <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> element

<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 ที่จะได้รับการปกป้อง หากต้องการตรวจสอบว่าคำขอทั้งหมดไปยัง API ได้รับการยืนยันแล้ว ให้แนบนโยบายกับ PreFlow ของคำขอ ProxyEndpoint ดังนี้

<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 ของการให้สิทธิ์ตามข้อกำหนด OAuth 2.0 ใช้การตั้งค่านี้หากคาดว่าจะแสดงโทเค็นเพื่อการเข้าถึงในตำแหน่งที่ไม่เป็นไปตามมาตรฐาน เช่น พารามิเตอร์การค้นหา หรือส่วนหัว HTTP ที่มีชื่ออื่นที่ไม่ใช่ Authorization

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

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

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

ตัวแปร Flow

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

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

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

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 = "InvalidRequest"
oauthV2.policy_name.failed policy_name คือชื่อนโยบายที่ผู้ใช้ระบุซึ่งทำให้เกิดข้อผิดพลาด oauthV2.GenerateAccesstoken.failed = true
oauthV2.policy_name.fault.name policy_name คือชื่อนโยบายที่ผู้ใช้ระบุซึ่งทำให้เกิดข้อผิดพลาด oauthV2.GenerateAccesstoken.fault.name = InvalidRequest

หมายเหตุ: สําหรับการดําเนินการ 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 ของ OAuth

{  
   {  
      "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" : "InvalidRequest", "Error" :"Refresh Token expired"}

อย่างไรก็ตาม การตอบกลับที่สอดคล้องกับ RFC คือ

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

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