คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
OAuthV2 เป็นนโยบายแบบหลายด้านสำหรับดำเนินการประเภทการให้สิทธิ์ OAuth 2.0 นี่คือนโยบายหลักที่ใช้เพื่อกำหนดค่าปลายทาง OAuth 2.0 บน Apigee Edge
เคล็ดลับ: หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ OAuth ใน Apigee Edge โปรดดูหน้าแรกของ OAuth โดยจะมีลิงก์ไปยังแหล่งข้อมูล ตัวอย่าง วิดีโอ และอื่นๆ ดูตัวอย่าง OAuth ขั้นสูงใน GitHub เพื่อดูการสาธิตวิธีใช้นโยบายนี้ในแอปพลิเคชันที่ใช้งานได้
ตัวอย่าง
VerifyAccessToken
VerifyAccessToken
การกำหนดค่านโยบาย OAuthV2 นี้ (ที่มีการดำเนินการ ConfirmAccessToken) จะยืนยันว่าโทเค็นเพื่อการเข้าถึงที่ส่งไปยัง Apigee Edge ถูกต้อง เมื่อมีการเรียกใช้การดำเนินการนโยบายนี้ Edge จะหาโทเค็นเพื่อการเข้าถึงที่ถูกต้องในคำขอ หากโทเค็นเพื่อการเข้าถึงถูกต้อง ระบบจะอนุญาตให้คำขอดำเนินการต่อ หากไม่ถูกต้อง ระบบจะหยุดการประมวลผลทั้งหมดและแสดงข้อผิดพลาดในการตอบกลับ
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2"> <DisplayName>OAuth v2.0 2</DisplayName> <Operation>VerifyAccessToken</Operation> <AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer --> </OAuthV2>
หมายเหตุ: รองรับเฉพาะโทเค็นสำหรับผู้ถือ OAuth 2.0 เท่านั้น ไม่รองรับโทเค็นรหัสการตรวจสอบสิทธิ์ข้อความ (MAC)
เช่น
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
โดยค่าเริ่มต้น Edge จะยอมรับโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization
ที่มีคำนำหน้า Bearer
คุณจะเปลี่ยนค่าเริ่มต้นนี้ได้ด้วยองค์ประกอบ <AccessToken>
GenerateAccessToken
การสร้างโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างที่แสดงวิธีขอโทเค็นเพื่อการเข้าถึงสำหรับการให้สิทธิ์แต่ละประเภทที่รองรับได้ที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์ หัวข้อนี้มีตัวอย่างของการดำเนินการเหล่านี้:
GenerateAuthorizationCode
สร้างรหัสการให้สิทธิ์
ดูตัวอย่างแสดงวิธีขอรหัสการให้สิทธิ์ได้ที่การขอรหัสการให้สิทธิ์
RefreshAccessToken
รีเฟรชโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างแสดงวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรชได้ที่การรีเฟรชโทเค็นเพื่อการเข้าถึง
โทเค็นขั้นตอนการตอบกลับ
สร้างโทเค็นเพื่อการเข้าถึงในขั้นตอนการตอบกลับ
บางครั้งคุณอาจต้องสร้างโทเค็นเพื่อการเข้าถึงในขั้นตอนการตอบกลับ ตัวอย่างเช่น คุณอาจทำเช่นนี้เพื่อตอบสนองต่อการตรวจสอบที่กำหนดเองบางรายการที่ดำเนินการในบริการแบ็กเอนด์ ในตัวอย่างนี้ กรณีการใช้งานต้องมีทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช ซึ่งจะตัดสินประเภทการให้สิทธิ์โดยนัย ในกรณีนี้ เราจะใช้ประเภทการให้สิทธิ์รหัสผ่านในการสร้างโทเค็น คุณจะเห็นได้ว่าเคล็ดลับในการดำเนินการนี้คือการส่งในส่วนหัวของคำขอการให้สิทธิ์ด้วยนโยบาย JavaScript
เรามาดูนโยบายตัวอย่างกันก่อน
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
หากคุณวางนโยบายนี้ไว้ในขั้นตอนการตอบสนอง นโยบายจะล้มเหลวโดยมีข้อผิดพลาด 401 UnAuthorized แม้ว่าจะระบุพารามิเตอร์การเข้าสู่ระบบที่ถูกต้องในนโยบายก็ตาม คุณต้องตั้งค่าส่วนหัวของคำขอการให้สิทธิ์เพื่อแก้ไขปัญหานี้
ส่วนหัวการให้สิทธิ์ต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี client_id:client_secret ที่เข้ารหัส Base64
คุณจะเพิ่มส่วนหัวนี้ด้วยนโยบาย JavaScript ที่วางไว้ก่อนนโยบาย OAuthV2 ได้ แบบนี้ ตัวแปร "local_clientid" และ "local_secret" ต้องมีการตั้งค่าก่อนหน้านี้และมีให้ใช้งานในขั้นตอนดังนี้
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
ดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน" เพิ่มเติม
การอ้างอิงองค์ประกอบ
ข้อมูลอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย OAuthV2
นโยบายตัวอย่างที่แสดงด้านล่างเป็นการกำหนดค่าที่เป็นไปได้หลายแบบ ตัวอย่างนี้แสดงนโยบาย OAuthV2 ที่กำหนดค่าไว้สำหรับการดำเนินการ GenerateAccessToken ซึ่งมีองค์ประกอบที่จำเป็นและไม่บังคับ ดูรายละเอียดได้จากคำอธิบายองค์ประกอบในส่วนนี้
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
แอตทริบิวต์ <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <AccessToken>
<AccessToken>request.header.access_token</AccessToken>
โดยค่าเริ่มต้น ConfirmAccessToken ต้องการให้ส่งโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization
คุณเปลี่ยนค่าเริ่มต้นดังกล่าวได้โดยใช้องค์ประกอบนี้ ตัวอย่างเช่น request.queryparam.access_token
บ่งบอกว่าโทเค็นเพื่อการเข้าถึงควรแสดงอยู่ในพารามิเตอร์การค้นหาชื่อ access_token
<AccessToken>request.header.access_token</AccessToken>
curl https://myorg-myenv.apigee.net/oauth2/validate -H "access_token:Rft3dqrs56Blirls56a"ตัวอย่างที่ระบุ
<AccessToken>request.queryparam.access_token</AccessToken>
:
curl "https://myorg-myenv.apigee.net/oauth2/validate?access_token:Rft3dqrs56Blirls56a"
ค่าเริ่มต้น: |
ไม่มีข้อมูล |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ใช้กับการดำเนินการ |
|
องค์ประกอบ <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
โดยค่าเริ่มต้น ConfirmAccessToken กำหนดให้ส่งโทเค็นเพื่อการเข้าถึงในส่วนหัวการให้สิทธิ์เป็นโทเค็นสำหรับผู้ถือ เช่น
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
ปัจจุบันระบบรองรับคำนำหน้าเพียงชื่อเดียว
ค่าเริ่มต้น: |
Bearer |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ |
Bearer |
ใช้กับการดำเนินการ |
|
องค์ประกอบ <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 อย่าง
ค่าเริ่มต้น: |
ไม่มีข้อมูล |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ |
ตัวแปรโฟลว์ทั้งหมดที่นโยบายเข้าถึงได้ขณะรันไทม์ |
ใช้กับประเภทการให้สิทธิ์ |
|
<แอตทริบิวต์/แอตทริบิวต์>
<Attributes> <Attribute name="attr_name1" ref="flow.variable" display="true|false">value1</Attribute> <Attribute name="attr_name2" ref="flow.variable" display="true|false">value2</Attribute> </Attributes>
ใช้องค์ประกอบนี้เพื่อเพิ่มแอตทริบิวต์ที่กำหนดเองไปยังโทเค็นเพื่อการเข้าถึงหรือรหัสการให้สิทธิ์ เช่น คุณอาจต้องการฝังรหัสผู้ใช้หรือตัวระบุเซสชันในโทเค็นเพื่อการเข้าถึงที่ดึงข้อมูลและตรวจสอบได้ในรันไทม์
องค์ประกอบนี้ช่วยให้คุณระบุค่าในตัวแปรโฟลว์หรือจากสตริงตรงตัวได้ หากคุณระบุทั้งตัวแปรและสตริง ระบบจะใช้ค่าที่ระบุในตัวแปรโฟลว์ หากแก้ไขตัวแปรไม่ได้ สตริงจะเป็นค่าเริ่มต้น
ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้องค์ประกอบนี้ได้ที่การปรับแต่งโทเค็นและรหัสการให้สิทธิ์
การแสดงหรือซ่อนแอตทริบิวต์ที่กำหนดเองในการตอบสนอง
โปรดทราบว่าหากคุณตั้งค่าองค์ประกอบ GenerateResponse ของนโยบายนี้เป็น true ระบบจะแสดงผลการแทน JSON แบบเต็มของโทเค็นในการตอบสนอง รวมถึง แอตทริบิวต์ที่กำหนดเองใดๆ ที่คุณตั้งค่าไว้ ในบางกรณี คุณอาจต้องซ่อนแอตทริบิวต์ที่กำหนดเองบางรายการหรือทั้งหมดในการตอบกลับเพื่อไม่ให้แอปไคลเอ็นต์เห็น
โดยค่าเริ่มต้น แอตทริบิวต์ที่กำหนดเองจะปรากฏในการตอบกลับ หากต้องการซ่อน ให้ตั้งค่าพารามิเตอร์ display เป็น false เช่น
<Attributes> <Attribute name="employee_id" ref="employee.id" display="false"/> <Attribute name="employee_name" ref="employee.name" display="false"/> </Attributes>
ค่าของแอตทริบิวต์ display
ไม่คงอยู่ สมมติว่าคุณสร้างโทเค็นเพื่อการเข้าถึงที่มีแอตทริบิวต์ที่กำหนดเองที่คุณต้องการซ่อนในการตอบกลับที่สร้างขึ้น การตั้งค่า display=false
จะทำให้บรรลุเป้าหมายนั้น อย่างไรก็ตาม หากมีการสร้างโทเค็นเพื่อการเข้าถึงใหม่ในภายหลังโดยใช้โทเค็นการรีเฟรช แอตทริบิวต์ที่กำหนดเองเดิมจากโทเค็นเพื่อการเข้าถึงจะแสดงในการตอบสนองของโทเค็นการรีเฟรช เนื่องจาก Edge จำไม่ได้ว่าแอตทริบิวต์ display
เดิมตั้งไว้เป็น false
ในนโยบายการสร้างโทเค็นเพื่อการเข้าถึง ดังนั้นแอตทริบิวต์ที่กำหนดเองเป็นเพียงส่วนหนึ่งของข้อมูลเมตาของโทเค็นเพื่อการเข้าถึง
คุณจะเห็นลักษณะการทำงานเดียวกันนี้หากเพิ่มแอตทริบิวต์ที่กำหนดเองลงในรหัสการให้สิทธิ์ กล่าวคือ เมื่อสร้างโทเค็นเพื่อการเข้าถึงโดยใช้โค้ดนั้น แอตทริบิวต์ที่กำหนดเองเหล่านั้นจะแสดงขึ้นในการตอบกลับโทเค็นเพื่อการเข้าถึง อย่างไรก็ตาม นี่อาจไม่ใช่ลักษณะการทำงานที่คุณตั้งใจไว้
หากต้องการซ่อนแอตทริบิวต์ที่กำหนดเองในกรณีเหล่านี้ คุณมีตัวเลือกต่อไปนี้
- รีเซ็ตแอตทริบิวต์ที่กำหนดเองอย่างชัดแจ้งในนโยบายโทเค็นการรีเฟรช และตั้งค่าการแสดงผลเป็น "เท็จ" ในกรณีนี้ คุณอาจต้องดึงค่าที่กำหนดเองดั้งเดิมจากโทเค็นเพื่อการเข้าถึงเดิมโดยใช้นโยบาย GetOAuthV2Info
- ใช้นโยบาย JavaScript สำหรับการประมวลผลภายหลังเพื่อดึงแอตทริบิวต์ที่กำหนดเองที่คุณไม่ต้องการเห็นในการตอบกลับด้วยตนเอง
โปรดดูที่การปรับแต่งโทเค็นและรหัสการให้สิทธิ์
ค่าเริ่มต้น: |
|
สถานที่ตั้ง: |
ไม่บังคับ |
ค่าที่ถูกต้องมีดังนี้ |
|
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <ClientId>
<ClientId>request.formparam.client_id</ClientId>
ในหลายกรณี แอปไคลเอ็นต์จะต้องส่งรหัสไคลเอ็นต์ไปยังเซิร์ฟเวอร์การให้สิทธิ์ องค์ประกอบนี้ช่วยให้คุณระบุตำแหน่งที่ Edge ควรค้นหารหัสไคลเอ็นต์ได้ ตำแหน่งที่ถูกต้องที่เดียวที่คุณตั้งค่าได้คือตำแหน่งเริ่มต้น ซึ่งก็คือตัวแปรโฟลว์ request.formparam.client_id
ไม่รองรับการตั้งค่า ClientId
เป็นตัวแปรอื่น
โปรดดูที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
ค่าเริ่มต้น: |
request.formparam.client_id (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรโฟลว์: request.formparam.client_id |
ใช้กับประเภทการให้สิทธิ์ |
ที่ใช้ร่วมกับการดำเนินการ 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
จะกำหนดค่าเริ่มต้น
วิธีตั้งค่าพร็อพเพอร์ตี้นี้
- เปิดไฟล์
message-processor.properties
ในตัวแก้ไข หากไม่มีไฟล์ ให้สร้างขึ้นมาโดยทำดังนี้vi /opt/apigee/customer/application/message-processor.properties
- ตั้งค่าพร็อพเพอร์ตี้ตามต้องการ ดังนี้
conf_keymanagement_oauth_auth_code_expiry_time_in_millis=3600000
- ตรวจสอบว่าผู้ใช้ "apigee" เป็นเจ้าของไฟล์พร็อพเพอร์ตี้:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- รีสตาร์ทเครื่องมือประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
ค่าเริ่มต้น: |
หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นที่กำหนดค่าที่ระดับระบบ |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | จำนวนเต็ม |
ค่าที่ถูกต้องมีดังนี้ |
|
ใช้กับประเภทการให้สิทธิ์ |
ใช้กับการดำเนินการ GenerateAuthorizationCode ด้วย |
อีลิเมนต์ <ExternalAccessToken>
<ExternalAccessToken>request.queryparam.external_access_token</ExternalAccessToken>
บอกให้ Apigee Edge ทราบว่าจะค้นหาโทเค็นเพื่อการเข้าถึงภายนอกได้จากที่ใด (โทเค็นเพื่อการเข้าถึงที่ไม่ได้สร้างโดย Apigee Edge)
ตัวแปร request.queryparam.external_access_token
บ่งบอกว่าโทเค็นเพื่อการเข้าถึงภายนอกควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?external_access_token=12345678
เช่น หากต้องการกำหนดให้โทเค็นเพื่อการเข้าถึงภายนอกอยู่ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_access_token
ดูการใช้โทเค็น OAuth ของบุคคลที่สาม
อีลิเมนต์ <ExternalAuthorization>
<ExternalAuthorization>true</ExternalAuthorization>
หากองค์ประกอบนี้เป็นเท็จหรือไม่มีอยู่ Edge จะตรวจสอบ client_id และ client_secret ตามปกติกับที่เก็บการให้สิทธิ์ Apigee Edge ใช้องค์ประกอบนี้เมื่อคุณต้องการทำงานกับโทเค็น OAuth ของบุคคลที่สาม โปรดดูรายละเอียดเกี่ยวกับการใช้องค์ประกอบนี้ที่การใช้โทเค็น OAuth ของบุคคลที่สาม
ค่าเริ่มต้น: |
false |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | บูลีน |
ค่าที่ถูกต้องมีดังนี้ | จริงหรือเท็จ |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <ExternalAuthorizationCode>
<ExternalAuthorizationCode>request.queryparam.external_auth_code</ExternalAuthorizationCode>
บอกให้ Apigee Edge ทราบตำแหน่งที่จะค้นหารหัสการให้สิทธิ์ภายนอก (รหัสการให้สิทธิ์ที่ไม่ได้สร้างโดย Apigee Edge)
ตัวแปร request.queryparam.external_auth_code
บ่งบอกว่าควรมีการแสดงรหัสการให้สิทธิ์ภายนอกเป็นพารามิเตอร์การค้นหา เช่น ?external_auth_code=12345678
เช่น หากต้องการกำหนดให้ใช้รหัสการให้สิทธิ์ภายนอกในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_auth_code
ดูการใช้โทเค็น OAuth ของบุคคลที่สาม
องค์ประกอบ <ExternalRefreshToken>
<ExternalRefreshToken>request.queryparam.external_refresh_token</ExternalRefreshToken>
บอกให้ Apigee Edge ทราบว่าจะค้นหาโทเค็นการรีเฟรชภายนอกได้จากที่ใด (Apigee Edge ไม่ได้สร้างโทเค็นการรีเฟรช)
ตัวแปร request.queryparam.external_refresh_token
บ่งบอกว่าโทเค็นการรีเฟรชภายนอกควรแสดงเป็นพารามิเตอร์การค้นหา เช่น ?external_refresh_token=12345678
เช่น หากต้องการกำหนดให้ใช้โทเค็นการรีเฟรชภายนอกในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.external_refresh_token
ดูการใช้โทเค็น OAuth ของบุคคลที่สาม
องค์ประกอบ <GenerateResponse>
<GenerateResponse enabled='true'/>
หากตั้งค่าเป็น true
นโยบายจะสร้างและแสดงผลการตอบกลับ เช่น สำหรับ GenerateAccessToken คำตอบอาจมีลักษณะดังนี้
{ "issued_at" : "1467841035013", "scope" : "read", "application_name" : "e31b8d06-d538-4f6b-9fe3-8796c11dc930", "refresh_token_issued_at" : "1467841035013", "status" : "approved", "refresh_token_status" : "approved", "api_product_list" : "[Product1, nhl_product]", "expires_in" : "1799", "developer.email" : "edward@slalom.org", "token_type" : "BearerToken", "refresh_token" : "rVSmm3QaNa0xBVFbUISz1NZI15akvgLJ", "client_id" : "Adfsdvoc7KX5Gezz9le745UEql5dDmj", "access_token" : "AnoHsh2oZ6EFWF4h0KrA0gC5og3a", "organization_name" : "cerruti", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
หากเป็น false
จะไม่มีการส่งการตอบกลับ แต่ระบบจะเติมชุดตัวแปรโฟลว์ด้วยค่าที่เกี่ยวข้องกับฟังก์ชันของนโยบาย ตัวอย่างเช่น ระบบจะป้อนข้อมูลตัวแปรโฟลว์ชื่อ oauthv2authcode.OAuthV2-GenerateAuthorizationCode.code
ด้วยรหัสการให้สิทธิ์ที่สร้างขึ้นใหม่ โปรดทราบว่า expires_in จะแสดงเป็นหน่วยวินาทีในการตอบสนอง
ค่าเริ่มต้น: |
false |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | string |
ค่าที่ถูกต้องมีดังนี้ | จริงหรือเท็จ |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
หากตั้งค่าเป็น true
นโยบายจะสร้างและแสดงผลการตอบกลับหากแอตทริบิวต์ ContinueOnError ตั้งค่าเป็น "จริง" หากเป็น false
(ค่าเริ่มต้น) ระบบจะไม่ส่งคำตอบ แต่ระบบจะป้อนข้อมูลชุดตัวแปรโฟลว์ด้วยค่าที่เกี่ยวข้องกับฟังก์ชันของนโยบาย
ค่าเริ่มต้น: |
false |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | string |
ค่าที่ถูกต้องมีดังนี้ | จริงหรือเท็จ |
ใช้กับประเภทการให้สิทธิ์ |
|
<GrantType>
<GrantType>request.queryparam.grant_type</GrantType>
บอกนโยบายว่าจะหาพารามิเตอร์ประเภทการให้สิทธิ์ที่ส่งในคำขอได้ที่ใด ตามข้อกำหนดของ OAuth 2.0 คุณต้องระบุประเภทการให้สิทธิ์สำหรับคำขอสำหรับโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์ ตัวแปรอาจเป็นส่วนหัว พารามิเตอร์การค้นหา หรือพารามิเตอร์ของฟอร์ม (ค่าเริ่มต้น)
ตัวอย่างเช่น request.queryparam.grant_type
ระบุว่ารหัสผ่านควรแสดงเป็นพารามิเตอร์การค้นหา เช่น ?grant_type=password
หากต้องการกำหนดประเภทการให้สิทธิ์ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.grant_type
โปรดดูที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
ค่าเริ่มต้น: |
request.formparam.grant_type (x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | string |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรตามที่อธิบายไว้ข้างต้น |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <การดำเนินการ>
<Operation>GenerateAuthorizationCode</Operation>
การดำเนินการ OAuth 2.0 ที่นโยบายดำเนินการ
ค่าเริ่มต้น: |
หากไม่ได้ระบุ |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ |
|
องค์ประกอบ <PassWord>
<PassWord>request.queryparam.password</PassWord>
องค์ประกอบนี้ใช้กับ ประเภทการให้สิทธิ์รหัสผ่านเท่านั้น เมื่อใช้ประเภทการให้สิทธิ์รหัสผ่าน ข้อมูลเข้าสู่ระบบของผู้ใช้ (รหัสผ่านและชื่อผู้ใช้) จะต้องพร้อมใช้งานในนโยบาย OAuthV2 องค์ประกอบ <PassWord>
และ <UserName>
จะใช้เพื่อระบุตัวแปรที่ Edge สามารถค้นหาค่าเหล่านี้ได้ หากไม่ได้ระบุองค์ประกอบเหล่านี้ นโยบายคาดว่าจะพบค่า (โดยค่าเริ่มต้น) ในพารามิเตอร์แบบฟอร์มที่ชื่อ username
และ password
หากไม่พบค่า แสดงว่านโยบายจะแสดงข้อผิดพลาด คุณใช้องค์ประกอบ <PassWord>
และ <UserName>
เพื่ออ้างอิงตัวแปรโฟลว์ใดก็ได้ที่มีข้อมูลเข้าสู่ระบบ
เช่น คุณส่งผ่านรหัสผ่านในคำขอโทเค็นโดยใช้พารามิเตอร์การค้นหาได้ แล้วตั้งค่าองค์ประกอบดังนี้ <PassWord>request.queryparam.password</PassWord>
.
หากต้องการกำหนดให้ใช้รหัสผ่านในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.password
นโยบาย OAuthV2 ไม่ได้ดำเนินการใดๆ กับค่าข้อมูลเข้าสู่ระบบเหล่านี้ แต่ Edge เพียงยืนยันว่ามีค่าเหล่านี้อยู่ นักพัฒนาซอฟต์แวร์ API จะเรียกคืนคำขอค่าและส่งไปยังผู้ให้บริการข้อมูลประจำตัวก่อนที่นโยบายการสร้างโทเค็นจะดำเนินการ
ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม
ค่าเริ่มต้น: |
request.formparam.password (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรโฟลว์ที่ใช้ได้สำหรับนโยบายขณะรันไทม์ |
ใช้กับประเภทการให้สิทธิ์ | รหัสผ่าน |
องค์ประกอบ <RedirectUri>
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
ระบุตำแหน่งที่ Edge ควรมองหาพารามิเตอร์ redirect_uri
ในคำขอ
เกี่ยวกับ URI การเปลี่ยนเส้นทาง
URI การเปลี่ยนเส้นทางจะใช้กับรหัสการให้สิทธิ์และประเภทการให้สิทธิ์โดยนัย URI การเปลี่ยนเส้นทางจะบอกเซิร์ฟเวอร์การให้สิทธิ์ (Edge) ตำแหน่งที่ต้องส่งรหัสการให้สิทธิ์ (สำหรับประเภทการให้สิทธิ์รหัสการให้สิทธิ์) หรือโทเค็นเพื่อการเข้าถึง (สำหรับประเภทการให้สิทธิ์โดยนัย) คุณควรเข้าใจว่าเมื่อใดต้องใช้พารามิเตอร์นี้ พารามิเตอร์นี้ไม่บังคับ และใช้งานอย่างไร
-
(จำเป็น) หาก URL เรียกกลับลงทะเบียนกับแอปของนักพัฒนาซอฟต์แวร์ซึ่งเชื่อมโยงกับคีย์ไคลเอ็นต์ของคำขอ และหากมี
redirect_uri
ในคำขอ ทั้ง 2 รายการจะต้องตรงกัน หากไม่ตรงกัน ระบบจะแสดงผลข้อผิดพลาด ดูข้อมูลเกี่ยวกับการลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์ใน Edge และการระบุ URL เรียกกลับได้ที่ลงทะเบียนแอปและจัดการคีย์ API - (ไม่บังคับ) หากลงทะเบียน URL เรียกกลับไว้และไม่มี
redirect_uri
ในคำขอ Edge จะเปลี่ยนเส้นทางไปยัง URL เรียกกลับที่ลงทะเบียนไว้ - (ต้องระบุ) หาก URL เรียกกลับไม่ได้ลงทะเบียนไว้ คุณต้องระบุ
redirect_uri
โปรดทราบว่าในกรณีนี้ Edge จะยอมรับ URL ใดก็ได้ กรณีนี้อาจก่อให้เกิดปัญหาด้านความปลอดภัย ดังนั้นจึงควรใช้กับแอปไคลเอ็นต์ที่เชื่อถือได้เท่านั้น หากแอปไคลเอ็นต์ไม่น่าเชื่อถือ แนวทางปฏิบัติแนะนำคือต้องมีการลงทะเบียน URL เรียกกลับเสมอ
คุณจะส่งพารามิเตอร์นี้ในพารามิเตอร์การค้นหาหรือในส่วนหัวก็ได้ ตัวแปร request.queryparam.redirect_uri
บ่งบอกว่า RedirectUri ควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?redirect_uri=login.myapp.com
เช่น หากต้องการกำหนดให้ RedirectUri อยู่ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.redirect_uri
ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม
ค่าเริ่มต้น: |
request.formparam.redirect_uri (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรโฟลว์ทั้งหมดที่เข้าถึงได้ในนโยบายขณะรันไทม์ |
ใช้กับประเภทการให้สิทธิ์ |
ใช้กับการดำเนินการ GenerateAuthorizationCode ด้วย |
องค์ประกอบ <RefreshToken>
<RefreshToken>request.queryparam.refreshtoken</RefreshToken>
เมื่อขอโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรช คุณต้องระบุโทเค็นการรีเฟรชในคำขอ องค์ประกอบนี้ช่วยให้คุณระบุตำแหน่งที่ Edge ควรมองหาโทเค็นการรีเฟรชได้ เช่น อาจส่งเป็นพารามิเตอร์การค้นหา ส่วนหัว HTTP หรือพารามิเตอร์ของฟอร์ม (ค่าเริ่มต้น) ก็ได้
ตัวแปร request.queryparam.refreshtoken
ระบุว่าโทเค็นการรีเฟรชควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?refresh_token=login.myapp.com
เช่น หากต้องการกำหนดให้ RefreshToken ในส่วนหัว HTTP ให้กำหนดค่านี้เป็น request.header.refresh_token
ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม
ค่าเริ่มต้น: |
request.formparam.refresh_token (ไฟล์ x-www-form-urlencrypted และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรโฟลว์ทั้งหมดที่เข้าถึงได้ในนโยบายขณะรันไทม์ |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <RefreshTokenEXPIRIn>
<RefreshTokenExpiresIn>1000</RefreshTokenExpiresIn>
บังคับใช้เวลาหมดอายุของโทเค็นการรีเฟรชในหน่วยมิลลิวินาที ค่าเวลาหมดอายุเป็นค่าที่ระบบสร้างขึ้นบวกกับค่า <RefreshTokenExpiresIn>
หากตั้งค่า <RefreshTokenExpiresIn>
เป็น -1 โทเค็นการรีเฟรชจะหมดอายุตามวันหมดอายุของโทเค็นการรีเฟรช OAuth สูงสุด หากไม่ได้ระบุ <RefreshTokenExpiresIn>
วันหมดอายุจะเป็นแบบไม่จำกัดโดยค่าเริ่มต้น
นอกจากนี้ ยังกำหนดเวลาหมดอายุระหว่างรันไทม์ได้โดยใช้ค่าเริ่มต้นที่เป็นฮาร์ดโค้ด หรือโดยการอ้างอิงตัวแปรโฟลว์ เช่น จัดเก็บค่าการหมดอายุของโทเค็นในแมปค่าคีย์ เรียกข้อมูลค่า กําหนดให้กับตัวแปร และอ้างอิงค่าในนโยบาย เช่น kvm.oauth.expires_in
stanza ต่อไปนี้จะระบุตัวแปรโฟลว์และค่าเริ่มต้นด้วย โปรดทราบว่าค่าตัวแปรของโฟลว์มีความสำคัญเหนือกว่าค่าเริ่มต้นที่ระบุ
<RefreshTokenExpiresIn ref="kvm.oauth.expires_in"> 3600000 <!--default value in milliseconds--> </RefreshTokenExpiresIn>
Private Cloud: สำหรับการติดตั้ง Edge สำหรับ Private Cloud พร็อพเพอร์ตี้ conf_keymanagement_oauth_refresh_token_expiry_time_in_millis
จะกำหนดค่าเริ่มต้น
วิธีตั้งค่าพร็อพเพอร์ตี้นี้
- เปิดไฟล์
message-processor.properties
ในตัวแก้ไข หากไม่มีไฟล์ ให้สร้างขึ้นมาโดยทำดังนี้vi /opt/apigee/customer/application/message-processor.properties
- ตั้งค่าพร็อพเพอร์ตี้ตามต้องการ ดังนี้
conf_keymanagement_oauth_refresh_token_expiry_time_in_millis=3600000
- ตรวจสอบว่าผู้ใช้ "apigee" เป็นเจ้าของไฟล์พร็อพเพอร์ตี้:
chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
- รีสตาร์ทเครื่องมือประมวลผลข้อความ
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
ค่าเริ่มต้น: |
หากไม่ได้ระบุ ระบบจะใช้ค่าเริ่มต้นที่กำหนดค่าที่ระดับระบบ |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | จำนวนเต็ม |
ค่าที่ถูกต้องมีดังนี้ |
|
ใช้กับประเภทการให้สิทธิ์ |
|
"refresh_token_expires_in" : "0"
องค์ประกอบ <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 (สำหรับประเภทการให้สิทธิ์โดยนัย) |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <ReuseรีเฟรชToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
เมื่อตั้งค่าเป็น true
ระบบจะใช้โทเค็นการรีเฟรชที่มีอยู่ซ้ำจนกว่าจะหมดอายุ หากเป็น false
Apigee Edge จะออกโทเค็นการรีเฟรชใหม่เมื่อมีโทเค็นการรีเฟรชที่ถูกต้อง
ค่าเริ่มต้น: |
|
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | boolean |
ค่าที่ถูกต้องมีดังนี้ |
|
ใช้กับประเภทการให้สิทธิ์: |
|
องค์ประกอบ <Scope>
<Scope>request.queryparam.scope</Scope>
หากองค์ประกอบนี้อยู่ในนโยบาย GenerateAccessToken หรือ GenerateAuthorizationCode ระบบจะใช้องค์ประกอบดังกล่าวเพื่อระบุขอบเขตที่จะให้สิทธิ์โทเค็นหรือโค้ด ปกติแล้วค่าเหล่านี้จะส่งผ่านไปให้กับนโยบายในคำขอจากแอปไคลเอ็นต์ คุณกำหนดค่าองค์ประกอบให้นำตัวแปรโฟลว์ได้ ซึ่งมีตัวเลือกในการเลือกวิธีส่งขอบเขตในคำขอ ในตัวอย่างต่อไปนี้ request.queryparam.scope
บ่งชี้ว่าขอบเขตควรแสดงอยู่ในพารามิเตอร์การค้นหา เช่น ?scope=READ
เช่น หากต้องการระบุขอบเขตในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.scope
หากองค์ประกอบนี้ปรากฏในนโยบาย "VerifyAccessToken" ระบบจะใช้องค์ประกอบดังกล่าวเพื่อระบุขอบเขตที่นโยบายควรบังคับใช้ ในนโยบายประเภทนี้ ค่าต้องเป็นชื่อขอบเขต "ฮาร์ดโค้ด" - คุณใช้ตัวแปรไม่ได้ เช่น
<Scope>A B</Scope>
โปรดดูหัวข้อการทำงานกับขอบเขต OAuth2 และการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
ค่าเริ่มต้น: |
ไม่มีขอบเขต |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ |
หากใช้กับนโยบาย Generate* ตัวแปรขั้นตอน หากใช้กับ ConfirmAccessToken ซึ่งเป็นรายการชื่อขอบเขต (สตริง) ที่คั่นด้วยการเว้นวรรค |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <State>
<State>request.queryparam.state</State>
ในกรณีที่แอปไคลเอ็นต์ต้องส่งข้อมูลสถานะไปยังเซิร์ฟเวอร์การให้สิทธิ์ องค์ประกอบนี้ให้คุณระบุตำแหน่งที่ Edge ควรค้นหาค่าสถานะได้ เช่น อาจส่งพารามิเตอร์การค้นหาเป็นพารามิเตอร์การค้นหาหรือส่งในส่วนหัว HTTP โดยทั่วไปค่าสถานะจะใช้เป็นมาตรการรักษาความปลอดภัยเพื่อป้องกันการโจมตี CSRF
ตัวอย่างเช่น request.queryparam.state
บ่งชี้ว่าสถานะควรเป็นพารามิเตอร์การค้นหา เช่น ?state=HjoiuKJH32
เช่น หากต้องการกำหนดสถานะในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.state
ดูเพิ่มเติมที่การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
ค่าเริ่มต้น: |
ไม่มีสถานะ |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | ตัวแปรโฟลว์ทั้งหมดที่นโยบายเข้าถึงได้ขณะรันไทม์ |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <StoreToken>
<StoreToken>true</StoreToken>
ตั้งค่าองค์ประกอบนี้เป็น true
เมื่อองค์ประกอบ <ExternalAuthorization>
คือ true
องค์ประกอบ <StoreToken>
จะบอกให้ Apigee Edge จัดเก็บโทเค็นเพื่อการเข้าถึงภายนอก มิฉะนั้น จะไม่สามารถคงอยู่ได้
ค่าเริ่มต้น: |
false |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | บูลีน |
ค่าที่ถูกต้องมีดังนี้ | จริงหรือเท็จ |
ใช้กับประเภทการให้สิทธิ์ |
|
องค์ประกอบ <SupportedGrantTypes>/<GrantType>
<SupportedGrantTypes> <GrantType>authorization_code</GrantType> <GrantType>client_credentials</GrantType> <GrantType>implicit</GrantType> <GrantType>password</GrantType> </SupportedGrantTypes>
ระบุประเภทการให้สิทธิ์ที่ปลายทางโทเค็น OAuth รองรับใน Apigee Edge ปลายทางอาจรองรับการให้สิทธิ์หลายประเภท (กล่าวคือ คุณสามารถกำหนดค่าปลายทางเดียวให้แจกจ่ายโทเค็นเพื่อการเข้าถึงสำหรับการให้สิทธิ์หลายประเภทได้) ดูข้อมูลเพิ่มเติมเกี่ยวกับปลายทางได้ที่การทำความเข้าใจปลายทาง OAuth ระบบจะส่งประเภทการให้สิทธิ์ไปในคำขอโทเค็นในพารามิเตอร์ grant_type
หากไม่มีการระบุประเภทการให้สิทธิ์ที่รองรับ การให้สิทธิ์ประเภทที่อนุญาตมีเพียง authorization_code
และ implicit
โปรดดูองค์ประกอบ <GrantType> (ซึ่งเป็นองค์ประกอบระดับสูงกว่าที่ใช้ในการระบุตําแหน่งที่ Apigee Edge ควรค้นหาพารามิเตอร์ grant_type
ที่ส่งผ่านในคำขอไคลเอ็นต์) Edge จะตรวจสอบว่าค่าของพารามิเตอร์ grant_type
ตรงกับการให้สิทธิ์ในประเภทที่รองรับ)
ค่าเริ่มต้น: |
รหัสการให้สิทธิ์และโดยนัย |
สถานที่ตั้ง: |
ต้องระบุ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ |
|
องค์ประกอบ <Tokens>/<Token>
ใช้กับการดำเนินการ InspectToken และในระหว่าง คุณก็สามารถใช้โทเค็นได้ ดูการอนุมัติและการเพิกถอนโทเค็นเพื่อการเข้าถึง องค์ประกอบ <Token> ระบุตัวแปรโฟลว์ที่กำหนดแหล่งที่มาของโทเค็นที่จะเพิกถอน หากนักพัฒนาซอฟต์แวร์จะต้องส่งโทเค็นเพื่อการเข้าถึงเป็นพารามิเตอร์การค้นหาชื่อ access_token
เช่น ให้ใช้ request.queryparam.access_token
อีลิเมนต์ <UserName>
<UserName>request.queryparam.user_name</UserName>
องค์ประกอบนี้ใช้กับ ประเภทการให้สิทธิ์รหัสผ่านเท่านั้น เมื่อใช้ประเภทการให้สิทธิ์รหัสผ่าน ข้อมูลเข้าสู่ระบบของผู้ใช้ (รหัสผ่านและชื่อผู้ใช้) จะต้องพร้อมใช้งานในนโยบาย OAuthV2 องค์ประกอบ <PassWord>
และ <UserName>
จะใช้เพื่อระบุตัวแปรที่ Edge สามารถค้นหาค่าเหล่านี้ได้ หากไม่ได้ระบุองค์ประกอบเหล่านี้ นโยบายคาดว่าจะพบค่า (โดยค่าเริ่มต้น) ในพารามิเตอร์แบบฟอร์มที่ชื่อ username
และ password
หากไม่พบค่า แสดงว่านโยบายจะแสดงข้อผิดพลาด คุณใช้องค์ประกอบ <PassWord>
และ <UserName>
เพื่ออ้างอิงตัวแปรโฟลว์ใดก็ได้ที่มีข้อมูลเข้าสู่ระบบ
เช่น คุณส่งชื่อผู้ใช้ในพารามิเตอร์การค้นหาแล้วตั้งค่าองค์ประกอบ <UserName>
ได้โดยทำดังนี้
<UserName>request.queryparam.username</UserName>
.
หากต้องการ
ระบุชื่อผู้ใช้ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.username
นโยบาย OAuthV2 ไม่ได้ดำเนินการใดๆ กับค่าข้อมูลเข้าสู่ระบบเหล่านี้ แต่ Edge เพียงยืนยันว่ามีค่าเหล่านี้อยู่ นักพัฒนาซอฟต์แวร์ API จะเรียกคืนคำขอค่าและส่งไปยังผู้ให้บริการข้อมูลประจำตัวก่อนที่นโยบายการสร้างโทเค็นจะดำเนินการ
ดูการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์เพิ่มเติม
ค่าเริ่มต้น: |
request.formparam.username (x-www-form-urlencoded และระบุไว้ในเนื้อหาของคำขอ) |
สถานที่ตั้ง: |
ไม่บังคับ |
ประเภท: | สตริง |
ค่าที่ถูกต้องมีดังนี้ | การตั้งค่าตัวแปรใดก็ได้ |
ใช้กับประเภทการให้สิทธิ์ | รหัสผ่าน |
กำลังยืนยันโทเค็นเพื่อการเข้าถึง
เมื่อตั้งค่าปลายทางของโทเค็นสำหรับพร็อกซี API แล้ว ระบบจะแนบนโยบาย OAuthV2 ที่เกี่ยวข้องซึ่งระบุการดำเนินการ VerifyAccessToken
กับโฟลว์ที่แสดงทรัพยากรที่มีการป้องกัน
เช่น นโยบายต่อไปนี้จะบังคับใช้การยืนยันโทเค็นเพื่อการเข้าถึงเพื่อให้แน่ใจว่าคำขอทั้งหมดที่ส่งไปยัง API ได้รับอนุญาต
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
นโยบายจะแนบไปกับทรัพยากร API เพื่อปกป้อง หากต้องการตรวจสอบว่าคำขอทั้งหมดที่ส่งไปยัง API ได้รับการยืนยันแล้ว ให้แนบนโยบายไปกับ PreFlow คำขอ ProxyEndpoint ดังนี้
<PreFlow> <Request> <Step><Name>VerifyOAuthAccessToken</Name></Step> </Request> </PreFlow>
คุณใช้องค์ประกอบที่ไม่บังคับต่อไปนี้เพื่อลบล้างการตั้งค่าเริ่มต้นสำหรับการดำเนินการ ConfirmAccessToken ได้
ชื่อ | คำอธิบาย |
---|---|
ขอบเขต |
รายการขอบเขตที่คั่นด้วยช่องว่าง การยืนยันจะสำเร็จหากมีขอบเขตที่ระบุอย่างน้อย 1 รายการในโทเค็นเพื่อการเข้าถึง ตัวอย่างเช่น นโยบายต่อไปนี้จะตรวจสอบโทเค็นเพื่อการเข้าถึงเพื่อให้แน่ใจว่ามีขอบเขตที่ระบุอย่างน้อย 1 รายการ หากมี READ หรือ WRITE อยู่ การยืนยันจะสำเร็จ <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
AccessToken | ตัวแปรที่ควรระบุโทเค็นเพื่อการเข้าถึง เช่น request.queryparam.accesstoken โดยค่าเริ่มต้น โทเค็นเพื่อการเข้าถึงควรแสดงโดยแอปในส่วนหัว HTTP การให้สิทธิ์ตามข้อมูลจำเพาะของ OAuth 2.0 ใช้การตั้งค่านี้หากโทเค็นเพื่อการเข้าถึงจะปรากฏในตำแหน่งที่ไม่ใช่แบบมาตรฐาน เช่น พารามิเตอร์การค้นหา หรือส่วนหัว HTTP ที่มีชื่ออื่นที่ไม่ใช่การให้สิทธิ์ |
โปรดดูที่การยืนยันโทเค็นเพื่อการเข้าถึงและการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
การระบุตำแหน่งที่ตั้งตัวแปรของคำขอ
สำหรับการให้สิทธิ์แต่ละประเภท นโยบายจะคาดเดาเกี่ยวกับสถานที่ตั้งหรือข้อมูลที่ต้องระบุในข้อความคำขอ สมมติฐานเหล่านี้อิงตามข้อกําหนดของ OAuth 2.0 หากแอปจำเป็นต้องเบี่ยงเบนจากข้อกำหนด OAuth 2.0 คุณอาจระบุตำแหน่งที่คาดไว้สำหรับแต่ละพารามิเตอร์ได้ เช่น เมื่อจัดการรหัสการให้สิทธิ์ คุณจะระบุตำแหน่งของรหัสการให้สิทธิ์, รหัสไคลเอ็นต์, URI การเปลี่ยนเส้นทาง และขอบเขตได้ โดยระบุเป็นส่วนหัว HTTP, พารามิเตอร์การค้นหา หรือพารามิเตอร์แบบฟอร์ม
ตัวอย่างด้านล่างแสดงวิธีระบุตำแหน่งของพารามิเตอร์รหัสการให้สิทธิ์ที่จำเป็นเป็นส่วนหัว HTTP
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
หรือในกรณีที่จำเป็นต่อการสนับสนุนฐานแอปไคลเอ็นต์ คุณอาจผสมผสานส่วนหัวและพารามิเตอร์การค้นหาเข้าด้วยกันได้ ดังนี้
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
กำหนดค่าตำแหน่งได้เพียง 1 ตำแหน่งต่อพารามิเตอร์เท่านั้น
ตัวแปรโฟลว์
ระบบจะป้อนข้อมูลตัวแปรโฟลว์ที่กำหนดในตารางนี้เมื่อดำเนินการนโยบาย OAuth ที่เกี่ยวข้อง จึงพร้อมใช้งานสำหรับนโยบายหรือแอปพลิเคชันอื่นๆ ที่ดำเนินการในโฟลว์พร็อกซี API
การดำเนินการ ConfirmAccessToken
การดำเนินการ โปรดยืนยันว่าAccessToken ดำเนินการอยู่ ระบบจะป้อนข้อมูลตัวแปรโฟลว์จำนวนมากในบริบทการดำเนินการของพร็อกซี ตัวแปรเหล่านี้จะให้พร็อพเพอร์ตี้ที่เกี่ยวข้องกับโทเค็นเพื่อการเข้าถึง แอปของนักพัฒนาซอฟต์แวร์ นักพัฒนาซอฟต์แวร์ และบริษัท คุณใช้นโยบาย AssignMessage หรือ JavaScript ไป เช่น เพื่ออ่านตัวแปรเหล่านี้และใช้ตัวแปรใดก็ตามตามที่จำเป็นในภายหลังในโฟลว์ ซึ่งตัวแปรเหล่านี้อาจเป็นประโยชน์สําหรับการแก้ไขข้อบกพร่องด้วย
proxy.pathsuffix
) คุณไม่จำเป็นต้องตั้งค่าตัวแปร flow.resource.name อย่างชัดแจ้ง
ในกรณีที่ไม่ได้กำหนดค่าผลิตภัณฑ์ API ด้วยสภาพแวดล้อมและพร็อกซี API ที่ถูกต้อง คุณต้องตั้งค่า flow.resource.name
อย่างชัดแจ้งเพื่อป้อนข้อมูลตัวแปรผลิตภัณฑ์ API ในขั้นตอน โปรดดูรายละเอียดเกี่ยวกับการกำหนดค่าผลิตภัณฑ์ได้ที่การใช้ Edge Management API เพื่อเผยแพร่ API
ตัวแปรเฉพาะโทเค็น
ตัวแปร | คำอธิบาย |
---|---|
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 แบบผสมเท่านั้น) ระบุสาเหตุที่โทเค็นเพื่อการเข้าถึงถูกเพิกถอน ค่าอาจเป็น |
ตัวแปรเฉพาะของแอป
ตัวแปรเหล่านี้เกี่ยวข้องกับแอปนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็น
ตัวแปร | คำอธิบาย |
---|---|
app.name |
|
app.id |
|
app.accessType |
|
app.callbackUrl |
|
app.status |
อนุมัติหรือเพิกถอน |
app.scopes |
|
app.appFamily |
|
app.apiproducts |
|
app.appParentStatus |
|
app.appType |
ตัวอย่างเช่น: นักพัฒนาซอฟต์แวร์ |
app.appParentId |
|
app.created_by |
|
app.created_at |
|
app.last_modified_at |
|
app.last_modified_by |
|
app.{custom_attributes} |
แอตทริบิวต์ที่กำหนดเองที่มีชื่อของแอปไคลเอ็นต์ที่ลงทะเบียนไว้ |
ตัวแปรเฉพาะสำหรับนักพัฒนาแอป
หาก app.appType คือ "Company" ระบบจะเติมข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "Developer" ระบบจะเติมข้อมูลแอตทริบิวต์นักพัฒนาแอป
ตัวแปร | คำอธิบาย |
---|---|
ตัวแปรเฉพาะสำหรับนักพัฒนาแอป | |
developer.id |
|
developer.userName |
|
developer.firstName |
|
developer.lastName |
|
developer.email |
|
developer.status |
ใช้งานอยู่หรือไม่ได้ใช้งาน |
developer.apps |
|
developer.created_by |
|
developer.created_at |
|
developer.last_modified_at |
|
developer.last_modified_by |
|
developer.{custom_attributes} |
แอตทริบิวต์ที่กำหนดเองที่มีชื่อของนักพัฒนาแอป |
ตัวแปรเฉพาะบริษัท
หาก app.appType คือ "Company" ระบบจะเติมข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "Developer" ระบบจะเติมข้อมูลแอตทริบิวต์นักพัฒนาแอป
ตัวแปร | คำอธิบาย |
---|---|
company.id |
|
company.displayName |
|
company.apps |
|
company.appOwnerStatus |
|
company.created_by |
|
company.created_at |
|
company.last_modified_at |
|
company.last_modified_by |
|
company.{custom_attributes} |
แอตทริบิวต์ที่กำหนดเองที่มีชื่อของบริษัท |
การดำเนินการ GenerateAuthorizationCode
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อการดำเนินการ GenerateAuthorizationCode ดำเนินการสำเร็จ
คำนำหน้า: oauthv2authcode.{policy_name}.{variable_name}
เช่น oauthv2authcode.GenerateCodePolicy.code
ตัวแปร | คำอธิบาย |
---|---|
code |
รหัสการให้สิทธิ์ที่สร้างขึ้นเมื่อนโยบายทำงาน |
redirect_uri |
URI การเปลี่ยนเส้นทางที่เชื่อมโยงกับแอปไคลเอ็นต์ที่ลงทะเบียน |
scope |
ขอบเขต OAuth ที่ไม่บังคับที่ส่งผ่านในคำขอไคลเอ็นต์ |
client_id |
รหัสไคลเอ็นต์ที่ส่งในคำขอไคลเอ็นต์ |
การดำเนินการ GenerateAccessToken และ RefreshAccessToken
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อการดำเนินการ GenerateAccessToken และ RefreshAccessToken ดำเนินการสำเร็จ โปรดทราบว่าตัวแปรโทเค็นการรีเฟรชจะไม่มีผลกับโฟลว์ประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์
คำนำหน้า: oauthv2accesstoken.{policy_name}.{variable_name}
เช่น oauthv2accesstoken.GenerateTokenPolicy.access_token
ชื่อตัวแปร | คำอธิบาย |
---|---|
access_token |
โทเค็นเพื่อการเข้าถึงที่สร้างขึ้น |
client_id |
รหัสไคลเอ็นต์ของแอปนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็นนี้ |
expires_in |
ค่าวันหมดอายุของโทเค็น ดูรายละเอียดที่องค์ประกอบ <ExpiresIn> โปรดทราบว่าในการตอบสนอง expires_in จะแสดงเป็น seconds |
scope |
รายการขอบเขตที่พร้อมใช้งานซึ่งกำหนดค่าไว้สำหรับโทเค็น โปรดดูหัวข้อการทํางานกับขอบเขต OAuth2 |
status |
approved หรือ revoked ก็ได้ |
token_type |
ตั้งค่าเป็น BearerToken |
developer.email |
อีเมลของนักพัฒนาแอปที่ลงทะเบียน ซึ่งเป็นเจ้าของแอปของนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับโทเค็น |
organization_name |
องค์กรที่พร็อกซีดำเนินการ |
api_product_list |
รายการผลิตภัณฑ์ที่เชื่อมโยงกับแอปของนักพัฒนาซอฟต์แวร์ที่เกี่ยวข้องของโทเค็น |
refresh_count |
|
refresh_token |
โทเค็นการรีเฟรชที่สร้างขึ้น โปรดทราบว่าระบบจะไม่สร้างโทเค็นการรีเฟรชสำหรับประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์ |
refresh_token_expires_in |
อายุการใช้งานของโทเค็นการรีเฟรชเป็นวินาที |
refresh_token_issued_at |
ค่าเวลานี้คือการแสดงสตริงของจำนวนการประทับเวลา 32 บิตที่เกี่ยวข้อง ตัวอย่างเช่น "Wed, 21 Aug 2013 19:16:47 UTC" จะสอดคล้องกับค่าการประทับเวลา 1377112607413 |
refresh_token_status |
approved หรือ revoked ก็ได้ |
GenerateAccessTokenImplicitGrant
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อการดำเนินการ GenerateAccessTokenImplicit ดำเนินการสำเร็จสำหรับโฟลว์ประเภทการให้สิทธิ์โดยนัย
คำนำหน้า: oauthv2accesstoken.{policy_name}.{variable_name}
เช่น oauthv2accesstoken.RefreshTokenPolicy.access_token
ตัวแปร | คำอธิบาย |
---|---|
oauthv2accesstoken.access_token |
โทเค็นเพื่อการเข้าถึงที่สร้างขึ้นเมื่อนโยบายทำงาน |
oauthv2accesstoken.{policy_name}.expires_in |
ค่าวันหมดอายุของโทเค็นเป็นวินาที ดูรายละเอียดได้ในองค์ประกอบ <ExpiresIn> |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กําหนดเมื่อนโยบายนี้ทําให้เกิดข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | ส่งโดยการดำเนินการ |
---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | โทเค็นเพื่อการเข้าถึงหมดอายุ |
โปรดยืนยันการเข้าถึง |
steps.oauth.v2.access_token_not_approved |
401 | เพิกถอนโทเค็นเพื่อการเข้าถึงแล้ว | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | ทรัพยากรที่ขอไม่มีผลิตภัณฑ์ API ใดๆ ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | นโยบายคาดว่าจะพบโทเค็นเพื่อการเข้าถึงในตัวแปรที่ระบุในองค์ประกอบ <AccessToken> แต่แก้ไขตัวแปรไม่ได้ |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | นโยบายคาดว่าจะพบรหัสการให้สิทธิ์ในตัวแปรที่ระบุในองค์ประกอบ <Code> แต่แก้ไขตัวแปรไม่ได้ |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | นโยบายคาดว่าจะพบ Client-ID ในตัวแปรที่ระบุในองค์ประกอบ <ClientId> แต่แก้ไขตัวแปรไม่ได้ |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | นโยบายคาดว่าจะพบโทเค็นการรีเฟรชในตัวแปรที่ระบุในองค์ประกอบ <RefreshToken> แต่แก้ไขตัวแปรไม่ได้ |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | นโยบายคาดว่าจะพบโทเค็นในตัวแปรที่ระบุในองค์ประกอบ <Tokens> แต่แก้ไขตัวแปรไม่ได้ |
verifyToken |
steps.oauth.v2.InsufficientScope |
403 | โทเค็นเพื่อการเข้าถึงที่แสดงในคำขอมีขอบเขตที่ไม่ตรงกับขอบเขตที่ระบุไว้ในนโยบายโทเค็นเพื่อการเข้าถึง หากต้องการเรียนรู้เกี่ยวกับขอบเขต โปรดดูหัวข้อการทำงานกับขอบเขต OAuth2 | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | โทเค็นเพื่อการเข้าถึงที่ส่งจากไคลเอ็นต์ไม่ถูกต้อง | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
ระบบจะแสดงชื่อข้อผิดพลาดนี้เมื่อตั้งค่าพร็อพเพอร์ตี้ หมายเหตุ: ขอแนะนำให้คุณเปลี่ยนเงื่อนไขของกฎข้อผิดพลาดที่มีอยู่ให้ตรวจจับทั้งชื่อ |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.invalid_request |
400 | ชื่อข้อผิดพลาดนี้จะใช้กับข้อผิดพลาดประเภทต่างๆ โดยทั่วไปจะใช้สำหรับพารามิเตอร์ที่หายไปหรือไม่ถูกต้องซึ่งส่งไปในคำขอ หากตั้งค่า <GenerateResponse> เป็น false ให้ใช้ตัวแปรข้อผิดพลาด (ตามที่อธิบายไว้ด้านล่าง) เพื่อเรียกข้อมูลรายละเอียดเกี่ยวกับข้อผิดพลาด เช่น ชื่อและสาเหตุของข้อผิดพลาด |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | ส่วนหัวของการให้สิทธิ์ไม่มีคำว่า "ผู้ถือ" ซึ่งเป็นสิ่งจำเป็น เช่น Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNo\ |
401 |
พร็อกซี API ไม่ได้อยู่ในผลิตภัณฑ์ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง เคล็ดลับ: ตรวจสอบว่าผลิตภัณฑ์ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึงมีการกำหนดค่าอย่างถูกต้อง เช่น หากคุณใช้ไวลด์การ์ดในเส้นทางทรัพยากร ให้ตรวจสอบว่าได้ใช้ไวลด์การ์ดอย่างถูกต้อง โปรดดูรายละเอียดที่สร้างผลิตภัณฑ์ API และดูคำแนะนำเพิ่มเติมเกี่ยวกับสาเหตุของข้อผิดพลาดนี้ได้ในโพสต์ชุมชน Apigee นี้ |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
ระบบจะแสดงชื่อข้อผิดพลาดนี้เมื่อตั้งค่าพร็อพเพอร์ตี้ |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | นโยบายต้องระบุโทเค็นเพื่อการเข้าถึงหรือรหัสการให้สิทธิ์ แต่ไม่ใช่ทั้ง 2 อย่าง | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | องค์ประกอบ <Tokens>/<Token> กำหนดให้คุณระบุประเภทโทเค็น (เช่น refreshtoken ) หากไคลเอ็นต์ส่งประเภทที่ไม่ถูกต้อง ระบบจะแสดงข้อผิดพลาดนี้ |
verifyToken ทำให้โทเค็นไม่ถูกต้อง |
steps.oauth.v2.MissingParameter |
500 | ประเภทการตอบกลับคือ token แต่ไม่ได้ระบุประเภทการให้สิทธิ์ไว้ |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
ไคลเอ็นต์ระบุประเภทการให้สิทธิ์ที่นโยบายไม่รองรับ (ไม่ได้แสดงในองค์ประกอบ <SupportedGrantTypes>) หมายเหตุ: ขณะนี้มีข้อบกพร่องที่ทำให้เกิดข้อผิดพลาดในประเภทการให้สิทธิ์ที่ไม่รองรับ หากเกิดข้อผิดพลาดเกี่ยวกับประเภทการให้สิทธิ์ที่ไม่รองรับ พร็อกซีจะไม่ป้อนโฟลว์ข้อผิดพลาดตามที่คาดไว้ |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | สาเหตุ |
---|---|
InvalidValueForExpiresIn |
สำหรับองค์ประกอบ |
InvalidValueForRefreshTokenExpiresIn |
สำหรับองค์ประกอบ <RefreshTokenExpiresIn> ค่าที่ถูกต้องจะเป็นจำนวนเต็มบวกและ -1 |
InvalidGrantType |
มีการระบุประเภทการให้สิทธิ์ที่ไม่ถูกต้องในองค์ประกอบ <SupportedGrantTypes> ดูรายการประเภทที่ใช้ได้จากข้อมูลอ้างอิงนโยบาย |
ExpiresInNotApplicableForOperation |
โปรดตรวจสอบว่าการดำเนินการที่ระบุในการสนับสนุนองค์ประกอบ <Operatings> จะหมดอายุ ตัวอย่างเช่น การดำเนินการ ConfirmToken จะไม่สามารถทำได้ |
RefreshTokenExpiresInNotApplicableForOperation |
โปรดตรวจสอบว่าการดำเนินการที่ระบุในเอลิเมนต์ <Operatings> รองรับการหมดอายุของโทเค็นการรีเฟรช ตัวอย่างเช่น การดำเนินการ ConfirmToken จะไม่สามารถทำได้ |
GrantTypesNotApplicableForOperation |
โปรดตรวจสอบว่าประเภทการให้สิทธิ์ที่ระบุใน <SupportedGrantTypes> ได้รับการสนับสนุนสำหรับ การดำเนินการที่ระบุ |
OperationRequired |
คุณต้องระบุการดำเนินการในนโยบายนี้โดยใช้องค์ประกอบ หมายเหตุ: หากองค์ประกอบ |
InvalidOperation |
คุณต้องระบุการดำเนินการที่ถูกต้องในนโยบายนี้โดยใช้องค์ประกอบ หมายเหตุ: หากองค์ประกอบ |
TokenValueRequired |
คุณต้องระบุค่า <Token> ของโทเค็นในองค์ประกอบ <Tokens> |
ตัวแปรของข้อผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาดขณะรันไทม์
<GenerateResponse>
เป็น false
หาก <GenerateResponse>
คือ true
นโยบายจะแสดงการตอบกลับไปยังไคลเอ็นต์ทันทีหากเกิดข้อผิดพลาด ระบบจะข้ามขั้นตอนข้อผิดพลาดและจะไม่มีการป้อนข้อมูลตัวแปรเหล่านี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด | fault.name = "invalid_request" |
oauthV2.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด | oauthV2.GenerateAccesstoken.fault.name = invalid_request
หมายเหตุ: สําหรับการดำเนินการ ConfirmAccessToken ชื่อข้อผิดพลาดจะมีคําต่อท้ายต่อไปนี้ |
oauthV2.policy_name.fault.cause |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
ตัวอย่างการตอบกลับข้อผิดพลาด
ระบบจะส่งการตอบกลับเหล่านี้กลับไปยังไคลเอ็นต์หากองค์ประกอบ <GenerateResponse>
เป็น true
errorcode
ของการตอบสนองข้อผิดพลาด อย่าใช้ข้อความใน faultstring
เพราะอาจเปลี่ยนแปลงได้หาก <GenerateResponse>
เป็น true นโยบายจะแสดงผลข้อผิดพลาดในรูปแบบนี้สำหรับการดำเนินการที่สร้างโทเค็นและรหัส ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด OAuth HTTP
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
หาก <GenerateResponse>
เป็น true นโยบายจะแสดงผลข้อผิดพลาดในรูปแบบนี้เพื่อใช้ในการยืนยันและตรวจสอบการดำเนินการ ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด OAuth HTTP
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
ตัวอย่างกฎข้อผิดพลาด
<FaultRule name=OAuthV2 Faults"> <Step> <Name>AM-InvalidClientResponse</Name> <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition> </Step> <Step> <Name>AM-InvalidTokenResponse</Name> <Condition>(fault.name = "invalid_access_token")</Condition> </Step> <Condition>(oauthV2.failed = true) </Condition> </FaultRule>
สคีมานโยบาย
นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd
) โปรดทราบว่าสคีมานโยบายมีอยู่ใน GitHub
การทำงานกับการกำหนดค่า OAuth เริ่มต้น
แต่ละองค์กร (แม้แต่องค์กรที่ทดลองใช้ฟรี) ใน Apigee Edge จะได้รับการจัดสรรปลายทางโทเค็น OAuth ปลายทางได้รับการกำหนดค่าล่วงหน้าด้วยนโยบายในพร็อกซี API ที่ชื่อว่า oauth คุณจะเริ่มใช้ปลายทางของโทเค็นได้ทันทีที่สร้างบัญชีใน Apigee Edge ได้ โปรดดูรายละเอียดที่หัวข้อการทำความเข้าใจปลายทาง OAuth
การลบโทเค็นเพื่อการเข้าถึงอย่างถาวร
โดยค่าเริ่มต้น ระบบจะลบโทเค็น OAuth2 ออกจากระบบ Apigee Edge อย่างถาวรในอีก 3 วัน (259200 วินาที) หลังจากที่ทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช (หากมี) หมดอายุ ในบางกรณี คุณอาจต้องเปลี่ยนค่าเริ่มต้นนี้ เช่น คุณอาจต้องการลดเวลาลบถาวรเพื่อประหยัดพื้นที่ในดิสก์หากมีการสร้างโทเค็นจำนวนมาก
หากคุณใช้ Edge สำหรับ Private Cloud คุณจะเปลี่ยนค่าเริ่มต้นนี้ได้โดยการตั้งค่าพร็อพเพอร์ตี้ขององค์กรตามที่อธิบายไว้ในส่วนนี้ (การลบโทเค็นที่หมดอายุอย่างถาวรเป็นเวลา 3 วันจะมีผลกับ Edge สำหรับ Private Cloud เวอร์ชัน 4.19.01 ขึ้นไป สำหรับเวอร์ชันก่อนหน้า ช่วงเวลาการล้างข้อมูลเริ่มต้นคือ 180 วัน)
กำลังอัปเดตการตั้งค่าการล้างข้อมูลสำหรับ Edge Private Cloud เวอร์ชัน 4.16.01 ขึ้นไป
หมายเหตุ: เฉพาะโทเค็นที่สร้างขึ้นหลังจากการตั้งค่าเหล่านี้เท่านั้นที่จะมีผล การตั้งค่านี้จะไม่มีผลกับโทเค็นที่สร้างขึ้นก่อนหน้านี้
- เปิดไฟล์นี้เพื่อแก้ไข:
/opt/apigee/customer/application/message-processor.properties
- เพิ่มพร็อพเพอร์ตี้ต่อไปนี้เพื่อกำหนดจำนวนวินาทีที่จะรอก่อนระบบลบโทเค็นอย่างถาวรหลังจากหมดอายุ:
conf_keymanagement_oauth.access.token.purge.after.seconds=<number of seconds>
- รีสตาร์ทโปรแกรมประมวลผลข้อความ ตัวอย่างเช่น
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
<ExpiresIn>
และ <RefreshTokenExpiresIn>
กำลังอัปเดตการตั้งค่าการล้างข้อมูลสำหรับ Edge Private Cloud 4.15.07
หมายเหตุ: เฉพาะโทเค็นที่สร้างขึ้นหลังจากใช้การตั้งค่าเหล่านี้เท่านั้นที่จะมีผล การตั้งค่าจะไม่มีผลกับโทเค็นที่สร้างขึ้นก่อนหน้านี้
-
ตั้งค่าเชิงบวกสำหรับแอตทริบิวต์
<ExpiresIn>
และ<RefreshTokenExpiresIn>
ในนโยบาย OAuthV2 ค่าจะอยู่ในหน่วยมิลลิวินาที เช่น<ExpiresIn>1000</ExpiresIn> <RefreshTokenExpiresIn>10000</RefreshTokenExpiresIn>
-
ทำให้พร็อกซีใช้งานได้อีกครั้ง
-
ใช้ API นี้เพื่ออัปเดตพร็อพเพอร์ตี้การล้างข้อมูลโทเค็นสำหรับองค์กร
POST https://<host-name>/v1/organizations/<org-name>
เพย์โหลด:
<Organization name="AutomationOrganization"> <Description>Desc</Description> <Properties> <Property name="keymanagement.oauth20.access.token.purge">true</Property> <Property name="keymanagement.oauth20.access.token.purge.after.seconds">120</Property> </Properties> </Organization>
-
รีสตาร์ทโปรแกรมประมวลผลข้อความ เช่น
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
API นี้ตั้งค่าพร็อพเพอร์ตี้การล้างข้อมูลโทเค็นเป็น "จริง" สำหรับองค์กรที่ชื่อว่า AutomationOrganization ในกรณีนี้ ระบบจะลบโทเค็นเพื่อการเข้าถึงออกจากฐานข้อมูลอย่างถาวรหลังจากโทเค็นและโทเค็นการรีเฟรชหมดอายุ 120 วินาที
การทำงานที่ไม่เป็นไปตามข้อกำหนด RFC
นโยบาย OAuthV2 จะแสดงผลการตอบกลับโทเค็นที่มีพร็อพเพอร์ตี้บางอย่างที่ไม่เป็นไปตามซึ่งเป็นไปตาม RFC ตารางต่อไปนี้แสดงพร็อพเพอร์ตี้ที่ไม่เป็นไปตามนโยบาย ซึ่งแสดงผลโดยนโยบาย OAuthV2 และพร็อพเพอร์ตี้ที่สอดคล้องกัน
OAuthV2 แสดงผล: | พร็อพเพอร์ตี้ที่เป็นไปตามข้อกำหนด RFC คือ |
---|---|
"token_type":"BearerToken" |
"token_type":"Bearer"
|
"expires_in":"3600" |
"expires_in":3600
(ค่าที่สอดคล้องกับข้อกำหนดคือตัวเลข ไม่ใช่สตริง) |
การตอบกลับที่เป็นข้อผิดพลาดสำหรับโทเค็นการรีเฟรชที่หมดอายุเมื่อ grant_type = refresh_token
มีลักษณะดังนี้
{"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}
แต่การตอบกลับที่เป็นไปตามข้อกำหนดของ RFC มีดังนี้
{"error" : "invalid_grant", "error_description" :"refresh token expired"}