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

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

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

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

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

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

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

คุณเพิ่มส่วนหัวนี้ได้ด้วยนโยบาย 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 นาที จนกว่าแคชจะหมดอายุ
  • เอนทิตี Key Management Service (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 เรียกกลับไว้และไม่มี 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

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

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

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

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

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

โดยค่าเริ่มต้น ระบบ Apigee Edge จะล้างโทเค็น OAuth2 ออกจากระบบภายใน 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"}

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