คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
อะไร
OAuthV2 เป็นนโยบายหลายแง่มุมสำหรับการดำเนินการประเภทการให้สิทธิ์ OAuth 2.0 นี่คือนโยบายหลักที่ใช้กำหนดค่าปลายทาง OAuth 2.0 ใน Apigee Edge
เคล็ดลับ: หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ OAuth ใน Apigee Edge โปรดดูหน้าแรกของ OAuth โดยมีลิงก์ ไปยังแหล่งข้อมูล ตัวอย่าง วิดีโอ และอื่นๆ ดูตัวอย่าง OAuth ขั้นสูงใน GitHub เพื่อดูตัวอย่างที่ดีเกี่ยวกับวิธีใช้นโยบายนี้ในแอปพลิเคชันที่ใช้งานได้
ตัวอย่าง
VerifyAccessToken
VerifyAccessToken
การกำหนดค่านโยบาย OAuthV2 นี้ (ที่มีการดำเนินการ VerifyAccessToken) จะยืนยันว่าโทเค็นเพื่อการเข้าถึงที่ส่งไปยัง Apigee Edge นั้นถูกต้อง เมื่อมีการเรียกใช้การดำเนินการตามนโยบายนี้ Edge จะค้นหาโทเค็นเพื่อการเข้าถึงที่ถูกต้องในคำขอ หากโทเค็นเพื่อการเข้าถึงถูกต้อง ระบบจะอนุญาตให้คำขอ ดำเนินการต่อ หากไม่ถูกต้อง การประมวลผลทั้งหมดจะหยุดลงและระบบจะแสดงข้อผิดพลาดใน การตอบกลับ
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
<DisplayName>OAuth v2.0 2</DisplayName>
<Operation>VerifyAccessToken</Operation>
<AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>หมายเหตุ: ระบบรองรับเฉพาะโทเค็นผู้ถือ OAuth 2.0 ไม่รองรับโทเค็นรหัสการตรวจสอบสิทธิ์ของข้อความ (MAC)
เช่น
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
โดยค่าเริ่มต้น Edge จะยอมรับโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization ที่มี
คำนำหน้า Bearer คุณเปลี่ยนค่าเริ่มต้นนี้ได้ด้วยองค์ประกอบ <AccessToken>
GenerateAccessToken
การสร้างโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างที่แสดงวิธีขอโทเค็นเพื่อการเข้าถึงสำหรับประเภทการให้สิทธิ์ที่รองรับแต่ละประเภทได้ที่ การขอโทเค็นเพื่อการเข้าถึงและ รหัสการให้สิทธิ์ หัวข้อนี้มีตัวอย่างการดำเนินการต่อไปนี้
GenerateAuthorizationCode
สร้างรหัสการให้สิทธิ์
ดูตัวอย่างที่แสดงวิธีขอรหัสการให้สิทธิ์ได้ที่การขอรหัสการให้สิทธิ์
RefreshAccessToken
รีเฟรชโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างที่แสดงวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรชได้ที่รีเฟรชโทเค็นเพื่อการเข้าถึง
โทเค็นโฟลว์การตอบกลับ
สร้างโทเค็นเพื่อการเข้าถึงในโฟลว์การตอบกลับ
ในบางครั้ง คุณอาจต้องสร้างโทเค็นเพื่อการเข้าถึงในขั้นตอนการตอบกลับ ตัวอย่างเช่น คุณ อาจทำเช่นนี้เพื่อตอบสนองต่อการตรวจสอบที่กำหนดเองบางอย่างที่ทำในบริการแบ็กเอนด์ ในตัวอย่างนี้ Use Case กำหนดให้ต้องใช้ทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช ซึ่งทำให้ไม่สามารถใช้การให้สิทธิ์โดยนัย ได้ ในกรณีนี้ เราจะใช้ประเภทการให้สิทธิ์รหัสผ่านเพื่อสร้างโทเค็น ดังที่คุณจะเห็น เคล็ดลับในการทำให้สิ่งนี้ใช้งานได้คือการส่งส่วนหัวของคำขอการให้สิทธิ์พร้อมนโยบาย JavaScript
ก่อนอื่น มาดูนโยบายตัวอย่างกัน
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
หากคุณใส่นโยบายนี้ในขั้นตอนการตอบกลับ ระบบจะแสดงข้อผิดพลาด 401 UnAuthorized แม้ว่าจะระบุพารามิเตอร์การเข้าสู่ระบบที่ถูกต้องในนโยบายก็ตาม หากต้องการแก้ปัญหานี้ คุณต้องตั้งค่าส่วนหัวคำขอการให้สิทธิ์
ส่วนหัวการให้สิทธิ์ต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี client_id:client_secret ที่เข้ารหัส Base64
คุณเพิ่มส่วนหัวนี้ได้ด้วยนโยบาย JavaScript ที่วางไว้ก่อนนโยบาย OAuthV2 เช่นนี้ ต้องตั้งค่าตัวแปร "local_clientid" และ "local_secret" ไว้ก่อนหน้านี้และพร้อมใช้งานในโฟลว์
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
ดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน" ด้วย
ข้อมูลอ้างอิงขององค์ประกอบ
การอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย OAuthV2
นโยบายตัวอย่างที่แสดงด้านล่างนี้เป็นการกำหนดค่าที่เป็นไปได้แบบหนึ่งในหลายๆ แบบ ตัวอย่างนี้แสดงนโยบาย OAuthV2 ที่กำหนดค่าไว้สำหรับการดำเนินการ GenerateAccessToken ซึ่งประกอบด้วยองค์ประกอบที่จำเป็นและ ไม่บังคับ ดูรายละเอียดได้ที่คำอธิบายองค์ประกอบในส่วนนี้
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
แอตทริบิวต์ <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <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"
|
ค่าเริ่มต้น: |
ไม่มี |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ใช้กับตัวดำเนินการต่อไปนี้ |
|
องค์ประกอบ <AccessTokenPrefix>
<AccessTokenPrefix>Bearer</AccessTokenPrefix>
โดยค่าเริ่มต้น VerifyAccessToken จะคาดหวังให้ส่งโทเค็นเพื่อการเข้าถึงในส่วนหัวการให้สิทธิ์ เป็นโทเค็น Bearer เช่น
-H "Authorization: Bearer Rft3dqrs56Blirls56a"
ปัจจุบันระบบรองรับเฉพาะคำนำหน้า Bearer
|
ค่าเริ่มต้น: |
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>
<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 หลังการประมวลผลเพื่อดึงแอตทริบิวต์ที่กำหนดเองซึ่งคุณไม่ต้องการให้แสดงในคำตอบด้วยตนเอง
ดูการปรับแต่งโทเค็นและรหัสการให้สิทธิ์เพิ่มเติม
|
ค่าเริ่มต้น: |
|
|
การแสดงตน: |
ไม่บังคับ |
| ค่าที่ใช้ได้ |
|
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <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 |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
นอกจากนี้ยังใช้กับดำเนินการ 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 ของบุคคลที่สาม
|
ค่าเริ่มต้น: |
เท็จ |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | บูลีน |
| ค่าที่ใช้ได้ | จริงหรือเท็จ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <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 จะแสดงเป็นวินาทีใน
การตอบกลับ
|
ค่าเริ่มต้น: |
เท็จ |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | จริงหรือเท็จ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <GenerateErrorResponse>
<GenerateErrorResponse enabled='true'/>
หากตั้งค่าเป็น true นโยบายจะสร้างและแสดงผลการตอบกลับหากตั้งค่าแอตทริบิวต์
ContinueOnError เป็น "จริง" หากเป็น false (ค่าเริ่มต้น) ระบบจะไม่ส่งการตอบกลับ แต่ระบบจะป้อนข้อมูลชุดตัวแปรโฟลว์ด้วยค่าที่เกี่ยวข้องกับฟังก์ชันของนโยบายแทน
|
ค่าเริ่มต้น: |
เท็จ |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | จริงหรือเท็จ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
<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 และระบุในเนื้อหาคำขอ) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | ตัวแปรตามที่อธิบายไว้ข้างต้น |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <Operation>
<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-urlencoded และระบุในคำขอ เนื้อหา) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | ตัวแปรโฟลว์ใดๆ ที่นโยบายใช้ได้ในขณะรันไทม์ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ | รหัสผ่าน |
องค์ประกอบ <RedirectUri>
<RedirectUri>request.queryparam.redirect_uri</RedirectUri>
ระบุตำแหน่งที่ Edge ควรค้นหาพารามิเตอร์ redirect_uri ในคำขอ
เกี่ยวกับ URI การเปลี่ยนเส้นทาง
URI การเปลี่ยนเส้นทางใช้กับรหัสการให้สิทธิ์และประเภทการให้สิทธิ์โดยนัย URI เปลี่ยนเส้นทาง จะบอกเซิร์ฟเวอร์การให้สิทธิ์ (Edge) ว่าจะส่งรหัสการให้สิทธิ์ (สำหรับประเภทการให้สิทธิ์รหัสการให้สิทธิ์ ) หรือโทเค็นเพื่อการเข้าถึง (สำหรับประเภทการให้สิทธิ์โดยนัย) ไปที่ใด คุณควรทราบว่าเมื่อใดที่ต้องระบุพารามิเตอร์นี้ เมื่อใดที่ระบุหรือไม่ระบุก็ได้ และวิธีใช้พารามิเตอร์นี้
-
(ต้องระบุ) หากมีการลงทะเบียน URL เรียกกลับกับแอปของนักพัฒนาซอฟต์แวร์ที่เชื่อมโยงกับ คีย์ไคลเอ็นต์ของคำขอ และหากมี
redirect_uriในคำขอ ทั้ง 2 รายการจะต้องตรงกันทุกประการ หากไม่ตรงกัน ระบบจะแสดงผลข้อผิดพลาด ดูข้อมูล เกี่ยวกับการลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์ใน Edge และการระบุ URL เรียกกลับได้ที่ลงทะเบียนแอปและจัดการคีย์ API - (ไม่บังคับ) หากลงทะเบียน URL ของ Callback และไม่มี
redirect_uriในคำขอ Edge จะเปลี่ยนเส้นทางไปยัง URL ของ Callback ที่ลงทะเบียนไว้ - (ต้องระบุ) หากไม่ได้ลงทะเบียน URL เรียกกลับ ก็จะต้องระบุ
redirect_uriโปรดทราบว่าในกรณีนี้ Edge จะยอมรับ URL ใดก็ได้ กรณีนี้อาจทำให้เกิดปัญหาด้านความปลอดภัย จึงควรใช้กับแอปไคลเอ็นต์ที่เชื่อถือได้เท่านั้น หากไม่เชื่อถือแอปไคลเอ็นต์ แนวทางปฏิบัติแนะนำคือการกำหนดให้ลงทะเบียน URL เรียกกลับเสมอ
คุณส่งพารามิเตอร์นี้ได้ในพารามิเตอร์การค้นหาหรือในส่วนหัว ตัวแปร request.queryparam.redirect_uri ระบุว่าควรมี RedirectUri
เป็นพารามิเตอร์การค้นหา เช่น ?redirect_uri=login.myapp.com หากต้องการกำหนดให้มี RedirectUri ในส่วนหัว HTTP
เช่น ให้ตั้งค่านี้เป็น request.header.redirect_uri ดูการขอโทเค็นเพื่อเข้าถึงและรหัสการให้สิทธิ์ด้วย
|
ค่าเริ่มต้น: |
request.formparam.redirect_uri (x-www-form-urlencoded และระบุในเนื้อหาคำขอ) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | ตัวแปรโฟลว์ที่เข้าถึงได้ในนโยบายที่รันไทม์ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
ใช้กับดำเนินการ 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 และระบุในคำขอ เนื้อหา) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | ตัวแปรโฟลว์ที่เข้าถึงได้ในนโยบายที่รันไทม์ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <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
วิธีตั้งค่าพร็อพเพอร์ตี้นี้
- เปิดไฟล์
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
|
ค่าเริ่มต้น: |
63072000000 มิลลิวินาที (2 ปี) (มีผลตั้งแต่วันที่ 5 ส.ค. 2024) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | จำนวนเต็ม |
| ค่าที่ใช้ได้ |
|
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <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
(สำหรับประเภทการให้สิทธิ์โดยนัย) |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <ReuseRefreshToken>
<ReuseRefreshToken>true</ReuseRefreshToken>
เมื่อตั้งค่าเป็น true ระบบจะนำโทเค็นการรีเฟรชที่มีอยู่มาใช้ซ้ำจนกว่าจะหมดอายุ หาก
false Apigee Edge จะออกโทเค็นการรีเฟรชใหม่เมื่อมีการส่งโทเค็นการรีเฟรชที่ถูกต้อง
|
ค่าเริ่มต้น: |
|
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | บูลีน |
| ค่าที่ใช้ได้ |
|
| ใช้กับประเภทการให้สิทธิ์: |
|
องค์ประกอบ <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 รายการชื่อขอบเขต (สตริง) ที่คั่นด้วยช่องว่าง |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
องค์ประกอบ <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
จัดเก็บโทเค็นเพื่อการเข้าถึงภายนอก ไม่เช่นนั้น ระบบจะไม่บันทึก
|
ค่าเริ่มต้น: |
เท็จ |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | บูลีน |
| ค่าที่ใช้ได้ | จริงหรือเท็จ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
|
<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 |
|
การแสดงตน: |
ต้องระบุ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ |
|
องค์ประกอบ <Tokens>/<Token>
ใช้กับดำเนินการ ValidateToken และ InvalidateToken ดูเพิ่มเติมที่การอนุมัติและ
เพิกถอนโทเค็นการเข้าถึง องค์ประกอบ <Token> ระบุตัวแปรโฟลว์ที่กำหนด
แหล่งที่มาของโทเค็นที่จะเพิกถอน หากนักพัฒนาแอปต้องส่งโทเค็นการเข้าถึงเป็น
พารามิเตอร์การค้นหาชื่อ access_token เช่น
ให้ใช้ request.queryparam.access_token
องค์ประกอบ <UserName>
<UserName>request.queryparam.user_name</UserName>
องค์ประกอบนี้ใช้กับ ประเภทการให้สิทธิ์รหัสผ่านเท่านั้น เมื่อใช้
ประเภทการให้สิทธิ์รหัสผ่าน คุณต้องระบุข้อมูลเข้าสู่ระบบของผู้ใช้ (รหัสผ่านและชื่อผู้ใช้) ให้กับ
นโยบาย OAuthV2 องค์ประกอบ <PassWord> และ <UserName> ใช้เพื่อระบุตัวแปรที่ Edge สามารถค้นหาค่าเหล่านี้ได้ หากไม่ได้ระบุองค์ประกอบเหล่านี้
นโยบายจะคาดหวังให้พบค่า (โดยค่าเริ่มต้น) ในพารามิเตอร์แบบฟอร์มที่ชื่อ username
และ password หากไม่พบค่า นโยบายจะแสดงข้อผิดพลาด คุณใช้องค์ประกอบ <PassWord> และ <UserName> เพื่ออ้างอิงตัวแปรโฟลว์ที่มีข้อมูลเข้าสู่ระบบได้
เช่น คุณสามารถส่งชื่อผู้ใช้ในพารามิเตอร์การค้นหาและตั้งค่าองค์ประกอบ <UserName> ดังนี้
<UserName>request.queryparam.username</UserName>.หากต้องการกำหนดให้มีชื่อผู้ใช้ในส่วนหัว HTTP ให้ตั้งค่านี้เป็น request.header.username
นโยบาย OAuthV2 จะไม่ทำอย่างอื่นกับค่าข้อมูลเข้าสู่ระบบเหล่านี้ Edge เพียงแค่ ยืนยันว่ามีค่าดังกล่าวอยู่ นักพัฒนา API มีหน้าที่ดึงค่าคำขอและ ส่งไปยังผู้ให้บริการข้อมูลประจำตัวก่อนที่นโยบายการสร้างโทเค็นจะดำเนินการ
ดูเพิ่มเติมที่การขอโทเค็นเพื่อเข้าถึง และรหัสการให้สิทธิ์
|
ค่าเริ่มต้น: |
request.formparam.username (x-www-form-urlencoded และระบุในเนื้อหาคำขอ) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | การตั้งค่าตัวแปร |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ | รหัสผ่าน |
การยืนยันโทเค็นเพื่อการเข้าถึง
เมื่อตั้งค่าปลายทางโทเค็นสำหรับพร็อกซี API แล้ว ระบบจะแนบนโยบาย OAuthV2 ที่เกี่ยวข้องซึ่งระบุการดำเนินการ VerifyAccessToken เข้ากับโฟลว์ที่แสดงทรัพยากรที่ป้องกัน
ตัวอย่างเช่น หากต้องการตรวจสอบว่าคำขอทั้งหมดที่ส่งไปยัง API ได้รับอนุญาตแล้ว นโยบายต่อไปนี้ จะบังคับใช้การยืนยันโทเค็นเพื่อการเข้าถึง
<OAuthV2 name="VerifyOAuthAccessToken"> <Operation>VerifyAccessToken</Operation> </OAuthV2>
ระบบจะแนบนโยบายไว้กับทรัพยากร API ที่จะได้รับการปกป้อง หากต้องการตรวจสอบว่าคำขอทั้งหมดไปยัง API ได้รับการยืนยันแล้ว ให้แนบนโยบายกับ PreFlow ของคำขอ ProxyEndpoint ดังนี้
<PreFlow>
<Request>
<Step><Name>VerifyOAuthAccessToken</Name></Step>
</Request>
</PreFlow>คุณใช้องค์ประกอบที่ไม่บังคับต่อไปนี้เพื่อลบล้างการตั้งค่าเริ่มต้นสำหรับการดำเนินการ VerifyAccessToken ได้
| ชื่อ | คำอธิบาย |
|---|---|
| ขอบเขต |
รายการขอบเขตที่คั่นด้วยช่องว่าง การยืนยันจะสำเร็จหากมีขอบเขตอย่างน้อย 1 รายการ ที่ระบุไว้ในโทเค็นเพื่อการเข้าถึง ตัวอย่างเช่น นโยบายต่อไปนี้จะ ตรวจสอบโทเค็นเพื่อการเข้าถึงเพื่อยืนยันว่ามีขอบเขตอย่างน้อย 1 รายการที่ระบุไว้ หากมี READ หรือ WRITE การยืนยันจะ สำเร็จ <OAuthV2 name="ValidateOauthScopePolicy"> <Operation>VerifyAccessToken</Operation> <Scope>READ WRITE</Scope> </OAuthV2> |
| AccessToken | ตัวแปรที่คาดว่าโทเค็นเพื่อการเข้าถึงจะอยู่ เช่น
request.queryparam.accesstoken โดยค่าเริ่มต้น ระบบคาดหวังว่าแอปจะแสดงโทเค็นเพื่อการเข้าถึงในส่วนหัว HTTP ของการให้สิทธิ์ตามข้อกำหนด OAuth 2.0 ใช้การตั้งค่านี้หากคาดว่าจะแสดงโทเค็นเพื่อการเข้าถึงในตำแหน่งที่ไม่เป็นไปตามมาตรฐาน เช่น
พารามิเตอร์การค้นหา หรือส่วนหัว HTTP ที่มีชื่ออื่นที่ไม่ใช่ Authorization |
ดูเพิ่มเติมที่การยืนยันโทเค็นเพื่อเข้าถึงและการขอโทเค็นเพื่อเข้าถึง และรหัสการให้สิทธิ์
การระบุตำแหน่งตัวแปรคำขอ
สำหรับสิทธิ์แต่ละประเภท นโยบายจะตั้งสมมติฐานเกี่ยวกับตำแหน่งหรือข้อมูลที่จำเป็น ในข้อความคำขอ สมมติฐานเหล่านี้อิงตามข้อกำหนด OAuth 2.0 หากแอปของคุณ ต้องเบี่ยงเบนจากข้อกำหนด OAuth 2.0 คุณจะระบุตำแหน่งที่คาดไว้สำหรับ พารามิเตอร์แต่ละรายการได้ เช่น เมื่อจัดการรหัสการให้สิทธิ์ คุณสามารถระบุตำแหน่งของ รหัสการให้สิทธิ์, รหัสไคลเอ็นต์, URI การเปลี่ยนเส้นทาง และขอบเขต คุณระบุค่าเหล่านี้ได้เป็น ส่วนหัว HTTP, พารามิเตอร์การค้นหา หรือพารามิเตอร์แบบฟอร์ม
ตัวอย่างด้านล่างแสดงวิธีระบุตำแหน่งของพารามิเตอร์รหัสการให้สิทธิ์ที่จำเป็น เป็นส่วนหัว HTTP
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
หรือหากจำเป็นต้องรองรับฐานแอปไคลเอ็นต์ คุณสามารถผสมและจับคู่ส่วนหัวและพารามิเตอร์การค้นหาได้
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
กำหนดค่าตำแหน่งได้เพียง 1 แห่งต่อพารามิเตอร์
ตัวแปร Flow
ระบบจะป้อนข้อมูลตัวแปรโฟลว์ที่กำหนดไว้ในตารางนี้เมื่อมีการดำเนินการตามนโยบาย OAuth ที่เกี่ยวข้อง และตัวแปรดังกล่าวจะพร้อมใช้งานสำหรับนโยบายหรือแอปพลิเคชันอื่นๆ ที่ดำเนินการในพร็อกซี API โฟลว์
การดำเนินการ VerifyAccessToken
การดำเนินการ VerifyAccessToken จะทำงาน และตัวแปรโฟลว์จำนวนมากจะได้รับการป้อนข้อมูล ในบริบทการดำเนินการของพร็อกซี ตัวแปรเหล่านี้จะให้คุณสมบัติที่เกี่ยวข้องกับโทเค็นเพื่อการเข้าถึง แอปของนักพัฒนาซอฟต์แวร์ นักพัฒนาซอฟต์แวร์ และบริษัท คุณสามารถใช้นโยบาย AssignMessage หรือ JavaScript เช่น เพื่ออ่านตัวแปรเหล่านี้และใช้ตามต้องการในภายหลังในโฟลว์ ตัวแปรเหล่านี้ยังเป็นประโยชน์ในการแก้ไขข้อบกพร่องด้วย
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 Hybrid เท่านั้น) ระบุสาเหตุที่เพิกถอนโทเค็นเพื่อการเข้าถึง ค่าอาจเป็น |
ตัวแปรเฉพาะแอป
ตัวแปรเหล่านี้เกี่ยวข้องกับแอปของนักพัฒนาแอปที่เชื่อมโยงกับโทเค็น
| ตัวแปร | คำอธิบาย |
|---|---|
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 |
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 |
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.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 |
ระบบจะแสดงชื่อข้อผิดพลาดนี้เมื่อตั้งค่าพร็อพเพอร์ตี้ |
GenerateAccessToken |
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 |
สำหรับองค์ประกอบ |
InvalidValueForRefreshTokenExpiresIn |
สำหรับองค์ประกอบ <RefreshTokenExpiresIn> ค่าที่ถูกต้องคือจำนวนเต็มบวกและ -1 |
InvalidGrantType |
มีการระบุประเภทการให้สิทธิ์ที่ไม่ถูกต้องในองค์ประกอบ <SupportedGrantTypes>
ดูรายการประเภทที่ใช้ได้ที่ข้อมูลอ้างอิงนโยบาย |
ExpiresInNotApplicableForOperation |
ตรวจสอบว่าการดำเนินการที่ระบุไว้ในองค์ประกอบ <Operations> รองรับการหมดอายุ เช่น การดำเนินการ VerifyToken จะไม่ดำเนินการ |
RefreshTokenExpiresInNotApplicableForOperation |
ตรวจสอบว่าการดำเนินการที่ระบุไว้ในองค์ประกอบ <Operations> รองรับการหมดอายุของโทเค็นรีเฟรช เช่น การดำเนินการ VerifyToken จะไม่ดำเนินการ |
GrantTypesNotApplicableForOperation |
ตรวจสอบว่าระบบรองรับประเภทการให้สิทธิ์ที่ระบุใน <SupportedGrantTypes> สำหรับการดำเนินการที่ระบุ |
OperationRequired |
คุณต้องระบุการดำเนินการในนโยบายนี้โดยใช้องค์ประกอบ หมายเหตุ: หากไม่มีองค์ประกอบ |
InvalidOperation |
คุณต้องระบุการดำเนินการที่ถูกต้องในนโยบายนี้โดยใช้องค์ประกอบ หมายเหตุ: หากองค์ประกอบ |
TokenValueRequired |
คุณต้องระบุค่าโทเค็น <Token> ในองค์ประกอบ <Tokens> |
ตัวแปรข้อบกพร่อง
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาดที่รันไทม์
<GenerateResponse> เป็น false หาก <GenerateResponse> เป็น true นโยบายจะแสดงผลลัพธ์ไปยังไคลเอ็นต์ทันทีหากเกิดข้อผิดพลาด ระบบจะข้ามขั้นตอนข้อผิดพลาดและจะไม่ป้อนข้อมูลตัวแปรเหล่านี้ ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดด้านนโยบาย| ตัวแปร | สถานที่ | ตัวอย่าง |
|---|---|---|
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 ชื่อข้อบกพร่องจะมีส่วนต่อท้าย |
oauthV2.policy_name.fault.cause |
policy_name คือชื่อนโยบายที่ผู้ใช้ระบุซึ่งทำให้เกิดข้อผิดพลาด | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
ตัวอย่างการตอบกลับข้อผิดพลาด
ระบบจะส่งการตอบกลับเหล่านี้กลับไปยังไคลเอ็นต์หากองค์ประกอบ <GenerateResponse>
เป็น true
errorcode ของการตอบกลับข้อผิดพลาด อย่ายึดถือข้อความใน faultstring เนื่องจากอาจมีการเปลี่ยนแปลงหาก <GenerateResponse> เป็น true นโยบายจะแสดงข้อผิดพลาดในรูปแบบนี้สําหรับการดำเนินการที่สร้างโทเค็นและรหัส ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด HTTP ของ OAuth
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}หาก <GenerateResponse> เป็น true นโยบายจะแสดงข้อผิดพลาดในรูปแบบนี้สําหรับการยืนยันและตรวจสอบการดำเนินการ ดูรายการทั้งหมดได้ที่ข้อมูลอ้างอิงการตอบกลับข้อผิดพลาด HTTP ของ OAuth
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
ตัวอย่างกฎข้อบกพร่อง
<FaultRule name=OAuthV2 Faults">
<Step>
<Name>AM-InvalidClientResponse</Name>
<Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition>
</Step>
<Step>
<Name>AM-InvalidTokenResponse</Name>
<Condition>(fault.name = "invalid_access_token")</Condition>
</Step>
<Condition>(oauthV2.failed = true) </Condition>
</FaultRule>สคีมานโยบาย
นโยบายแต่ละประเภทกำหนดโดยสคีมา XML (.xsd) คุณสามารถดูสคีมา
นโยบายได้ใน GitHub
การทำงานกับการกำหนดค่า OAuth เริ่มต้น
องค์กรแต่ละแห่ง (แม้แต่องค์กรที่ใช้ช่วงทดลองใช้ฟรี) ใน Apigee Edge จะได้รับการจัดสรรปลายทางโทเค็น OAuth ปลายทางได้รับการกำหนดค่าล่วงหน้าด้วยนโยบายในพร็อกซี API ที่ชื่อ oauth คุณเริ่มใช้ปลายทางโทเค็นได้ทันทีที่สร้างบัญชีใน Apigee Edge โปรดดูรายละเอียดที่หัวข้อทำความเข้าใจปลายทาง OAuth
การล้างโทเค็นเพื่อการเข้าถึง
โดยค่าเริ่มต้น ระบบจะล้างโทเค็น OAuth2 ออกจากระบบ Apigee Edge 3 วัน (259200 วินาที) หลังจากที่ทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช (หากมี) หมดอายุ ในบางกรณี คุณอาจต้องการเปลี่ยนค่าเริ่มต้นนี้ ตัวอย่างเช่น คุณอาจต้องการลดเวลาการล้างข้อมูลเพื่อ ประหยัดพื้นที่ดิสก์หากมีการสร้างโทเค็นจำนวนมาก
หากใช้ Edge for Private Cloud คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้โดยการตั้งค่าพร็อพเพอร์ตี้ขององค์กรตามที่อธิบายไว้ในส่วนนี้ (การล้างข้อมูลโทเค็นที่หมดอายุ 3 วัน มีผลกับ Edge สำหรับ Private Cloud เวอร์ชัน 4.19.01 ขึ้นไป สำหรับเวอร์ชันก่อนหน้า ช่วงการลบเริ่มต้นคือ 180 วัน)
การอัปเดตการตั้งค่าการล้างข้อมูลสำหรับ Edge Private Cloud เวอร์ชัน 4.16.01 ขึ้นไป
หมายเหตุ: เฉพาะโทเค็นที่สร้างหลังจากใช้การตั้งค่าเหล่านี้แล้วเท่านั้นที่จะได้รับผลกระทบ การตั้งค่าจะไม่มีผลกับโทเค็นที่สร้างก่อนหน้านี้
- เปิดไฟล์นี้เพื่อแก้ไข
/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 นี้จะตั้งค่าพร็อพเพอร์ตี้การล้างข้อมูลโทเค็นเป็น true สำหรับองค์กรที่ชื่อ 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" : "InvalidRequest", "Error" :"Refresh Token expired"}อย่างไรก็ตาม การตอบกลับที่สอดคล้องกับ RFC คือ
{"error" : "invalid_grant", "error_description" :"refresh token expired"}