คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
อะไร
OAuthV2 เป็นนโยบายที่มีหลายแง่มุมสำหรับการดำเนินการประเภทการให้สิทธิ์ OAuth 2.0 นี่คือนโยบายหลักที่ใช้กำหนดค่าปลายทาง OAuth 2.0 ใน Apigee Edge
เคล็ดลับ: หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับ OAuth ใน Apigee Edge โปรดดู หน้าแรกของ OAuth โดยมีลิงก์ ไปยังแหล่งข้อมูล ตัวอย่าง วิดีโอ และอื่นๆ ดูตัวอย่าง OAuth ขั้นสูงใน GitHub เพื่อดูตัวอย่างที่ดีเกี่ยวกับวิธีใช้นโยบายนี้ในแอปพลิเคชันที่ใช้งานได้
ตัวอย่าง
VerifyAccessToken
VerifyAccessToken
การกำหนดค่านโยบาย OAuthV2 นี้ (ที่มีการดำเนินการ VerifyAccessToken) จะยืนยันว่าโทเค็นเพื่อการเข้าถึงที่ส่งไปยัง Apigee Edge นั้นถูกต้อง เมื่อมีการเรียกใช้การดำเนินการตามนโยบายนี้ Edge จะค้นหาโทเค็นการเข้าถึงที่ถูกต้องในคำขอ หากโทเค็นเพื่อการเข้าถึงถูกต้อง ระบบจะอนุญาตให้คำขอ ดำเนินการต่อ หากไม่ถูกต้อง การประมวลผลทั้งหมดจะหยุดลงและระบบจะแสดงข้อผิดพลาดใน การตอบกลับ
<OAuthV2 async="false" continueOnError="false" enabled="true" name="OAuth-v20-2">
<DisplayName>OAuth v2.0 2</DisplayName>
<Operation>VerifyAccessToken</Operation>
<AccessTokenPrefix>Bearer</AccessTokenPrefix> <!-- Optional, default is Bearer -->
</OAuthV2>หมายเหตุ: ระบบรองรับเฉพาะโทเค็นผู้ถือ OAuth 2.0 ไม่รองรับโทเค็นรหัสการตรวจสอบสิทธิ์ของข้อความ (MAC)
เช่น
$ curl -H "Authorization: Bearer ylSkZIjbdWybfsUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
โดยค่าเริ่มต้น Edge จะยอมรับโทเค็นเพื่อการเข้าถึงในส่วนหัว Authorization ที่มี
คำนำหน้า Bearer คุณเปลี่ยนค่าเริ่มต้นนี้ได้ด้วยองค์ประกอบ <AccessToken>
GenerateAccessToken
การสร้างโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างที่แสดงวิธีขอโทเค็นเพื่อการเข้าถึงสำหรับประเภทการให้สิทธิ์ที่รองรับแต่ละประเภทได้ที่ การขอโทเค็นเพื่อการเข้าถึงและ รหัสการให้สิทธิ์ หัวข้อนี้มีตัวอย่างการดำเนินการต่อไปนี้
GenerateAuthorizationCode
สร้างรหัสการให้สิทธิ์
ดูตัวอย่างที่แสดงวิธีขอรหัสการให้สิทธิ์ได้ที่การขอรหัสการให้สิทธิ์
RefreshAccessToken
รีเฟรชโทเค็นเพื่อการเข้าถึง
ดูตัวอย่างที่แสดงวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรชได้ที่รีเฟรชโทเค็นเพื่อการเข้าถึง
โทเค็นโฟลว์การตอบกลับ
สร้างโทเค็นเพื่อการเข้าถึงในโฟลว์การตอบกลับ
ในบางครั้ง คุณอาจต้องสร้างโทเค็นเพื่อการเข้าถึงในโฟลว์การตอบกลับ ตัวอย่างเช่น คุณ อาจทำเช่นนี้เพื่อตอบสนองต่อการตรวจสอบที่กำหนดเองบางอย่างที่ทำในบริการแบ็กเอนด์ ในตัวอย่างนี้ กรณีการใช้งานต้องใช้ทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช ซึ่งไม่รวมถึงการให้สิทธิ์โดยนัย ประเภท ในกรณีนี้ เราจะใช้ประเภทการให้สิทธิ์รหัสผ่านเพื่อสร้างโทเค็น ดังที่คุณจะเห็น เคล็ดลับในการทำให้การดำเนินการนี้สำเร็จคือการส่งส่วนหัวของคำขอการให้สิทธิ์พร้อมนโยบาย JavaScript
ก่อนอื่น มาดูนโยบายตัวอย่างกัน
<OAuthV2 enabled="true" continueOnError="false" async="false" name="generateAccessToken"> <Operation>GenerateAccessToken</Operation> <AppEndUser>Doe</AppEndUser> <UserName>jdoe</UserName> <PassWord>jdoe</PassWord> <GrantType>grant_type</GrantType> <ClientId>a_valid_client_id</ClientId> <SupportedGrantTypes> <GrantType>password</GrantType> </SupportedGrantTypes> </OAuthV2>
หากคุณใส่นโยบายนี้ในโฟลว์การตอบกลับ ระบบจะแสดงข้อผิดพลาด 401 UnAuthorized แม้ว่าจะระบุพารามิเตอร์การเข้าสู่ระบบที่ถูกต้องในนโยบายก็ตาม หากต้องการแก้ปัญหานี้ คุณต้องตั้งค่าส่วนหัวของคำขอการให้สิทธิ์
ส่วนหัวการให้สิทธิ์ต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี Base64-encoded client_id:client_secret
คุณเพิ่มส่วนหัวนี้ได้ด้วยนโยบาย JavaScript ที่วางไว้ก่อนนโยบาย OAuthV2 เช่น ต้องตั้งค่าตัวแปร "local_clientid" และ "local_secret" ไว้ก่อนหน้านี้และพร้อมใช้งานในโฟลว์
var client_id = context.getVariable("local_clientid"); var client_secret = context.getVariable("local_secret"); context.setVariable("request.header.Authorization","Basic "+CryptoJS.enc.Base64.stringify(CryptoJS.enc.Latin1 .parse(client_id + ':' + client_secret)));
ดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน" ด้วย
การอ้างอิงองค์ประกอบ
การอ้างอิงนโยบายจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย OAuthV2
นโยบายตัวอย่างที่แสดงด้านล่างนี้เป็นการกำหนดค่าที่เป็นไปได้แบบหนึ่งในหลายๆ แบบ ตัวอย่างนี้แสดงนโยบาย OAuthV2 ที่กำหนดค่าไว้สำหรับการดำเนินการ GenerateAccessToken ซึ่งประกอบด้วยองค์ประกอบที่จำเป็นและ ไม่บังคับ ดูรายละเอียดได้ที่คำอธิบายองค์ประกอบในส่วนนี้
<OAuthV2 name="GenerateAccessToken"> <!-- This policy generates an OAuth 2.0 access token using the client_credentials grant type --> <Operation>GenerateAccessToken</Operation> <!-- This is in millseconds, so expire in an hour --> <ExpiresIn>3600000</ExpiresIn> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
แอตทริบิวต์ <OAuthV2>
<OAuthV2 async="false" continueOnError="false" enabled="true" name="MyOAuthPolicy">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
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 นาที จนกว่าแคชจะหมดอายุ
- เอนทิตี Key Management Service (KMS) (แอป นักพัฒนาซอฟต์แวร์ ผลิตภัณฑ์ API)
- แอตทริบิวต์ที่กำหนดเองในโทเค็น OAuth และเอนทิตี KMS
Stanza ต่อไปนี้จะระบุตัวแปรโฟลว์และค่าเริ่มต้นด้วย โปรดทราบว่าค่าตัวแปร โฟลว์จะมีความสำคัญเหนือกว่าค่าเริ่มต้นที่ระบุ
<ExpiresIn ref="kvm.oauth.expires_in">
3600000 <!--default value in milliseconds-->
</ExpiresIn>Edge ไม่รองรับวิธีบังคับให้โทเค็นหมดอายุหลังจากที่สร้างแล้ว หากคุณต้องการบังคับให้โทเค็นหมดอายุ (เช่น ตามเงื่อนไข) วิธีแก้ปัญหาที่เป็นไปได้จะอธิบายไว้ใน โพสต์ชุมชน Apigee นี้
โดยค่าเริ่มต้น ระบบ Apigee Edge จะลบโทเค็นเพื่อการเข้าถึงที่หมดอายุแล้วโดยอัตโนมัติ 3 วันหลังจากหมดอายุ ดูการลบโทเค็นการเข้าถึงด้วย
Private Cloud: สำหรับการติดตั้ง Edge สำหรับ Private Cloud พร็อพเพอร์ตี้ conf_keymanagement_oauth_auth_code_expiry_time_in_millis จะตั้งค่าเริ่มต้น
วิธีตั้งค่าพร็อพเพอร์ตี้นี้
- เปิดไฟล์
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 เรียกกลับไว้และไม่มี
redirect_uriในคำขอ Edge จะเปลี่ยนเส้นทางไปยัง URL เรียกกลับที่ลงทะเบียนไว้ - (ต้องระบุ) หากไม่ได้ลงทะเบียน URL เรียกกลับ ก็จะต้องระบุ
redirect_uriโปรดทราบว่าในกรณีนี้ Edge จะยอมรับ URL ใดก็ได้ กรณีนี้อาจทำให้เกิดปัญหาด้านความปลอดภัย จึงควรใช้กับแอปไคลเอ็นต์ที่เชื่อถือได้เท่านั้น หากไม่เชื่อถือแอปไคลเอ็นต์ แนวทางปฏิบัติแนะนำคือการกำหนดให้ลงทะเบียน URL เรียกกลับเสมอ
คุณส่งพารามิเตอร์นี้ในพารามิเตอร์การค้นหาหรือในส่วนหัวได้ ตัวแปร request.queryparam.redirect_uri ระบุว่าควรมี RedirectUri
เป็นพารามิเตอร์การค้นหา เช่น ?redirect_uri=login.myapp.com หากต้องการกำหนดให้มี RedirectUri ในส่วนหัว HTTP
เช่น ให้ตั้งค่านี้เป็น request.header.redirect_uri ดูการขอโทเค็นเพื่อเข้าถึงและรหัสการให้สิทธิ์ด้วย
|
ค่าเริ่มต้น: |
request.formparam.redirect_uri (x-www-form-urlencoded และระบุในเนื้อหาคำขอ) |
|
การแสดงตน: |
ไม่บังคับ |
| ประเภท: | สตริง |
| ค่าที่ใช้ได้ | ตัวแปรโฟลว์ใดก็ตามที่เข้าถึงได้ในนโยบายที่รันไทม์ |
| ใช้กับประเภทการให้สิทธิ์ต่อไปนี้ |
ใช้กับดำเนินการ 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 |
ดูเพิ่มเติมที่การยืนยันโทเค็นเพื่อการเข้าถึงและการขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์
การระบุตำแหน่งตัวแปรคำขอ
สำหรับ Grant แต่ละประเภท นโยบายจะกำหนดสมมติฐานเกี่ยวกับตำแหน่งหรือข้อมูลที่จำเป็น ในข้อความคำขอ สมมติฐานเหล่านี้อิงตามข้อกำหนด OAuth 2.0 หากแอปของคุณ ต้องเบี่ยงเบนจากข้อกำหนด OAuth 2.0 คุณจะระบุตำแหน่งที่คาดไว้สำหรับ พารามิเตอร์แต่ละรายการได้ เช่น เมื่อจัดการรหัสการให้สิทธิ์ คุณสามารถระบุตำแหน่งของ รหัสการให้สิทธิ์, รหัสไคลเอ็นต์, URI การเปลี่ยนเส้นทาง และขอบเขต โดยระบุเป็นส่วนหัว HTTP, พารามิเตอร์การค้นหา หรือพารามิเตอร์แบบฟอร์มได้
ตัวอย่างด้านล่างแสดงวิธีระบุตำแหน่งของพารามิเตอร์รหัสการให้สิทธิ์ที่จำเป็น เป็นส่วนหัว HTTP
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
หรือหากจำเป็นต้องรองรับฐานแอปไคลเอ็นต์ คุณสามารถผสมและจับคู่ส่วนหัวและพารามิเตอร์การค้นหาได้โดยทำดังนี้
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
กำหนดค่าสถานที่ตั้งได้เพียง 1 แห่งต่อพารามิเตอร์
ตัวแปรโฟลว์
ระบบจะป้อนข้อมูลตัวแปรโฟลว์ที่กำหนดไว้ในตารางนี้เมื่อมีการดำเนินการตามนโยบาย OAuth ที่เกี่ยวข้อง และตัวแปรดังกล่าวจะพร้อมใช้งานสำหรับนโยบายหรือแอปพลิเคชันอื่นๆ ที่ดำเนินการในพร็อกซี API โฟลว์
การดำเนินการ VerifyAccessToken
การดำเนินการ VerifyAccessToken จะทำงาน และตัวแปรโฟลว์จำนวนมากจะได้รับการป้อนข้อมูล ในบริบทการดำเนินการของพร็อกซี ตัวแปรเหล่านี้จะให้คุณสมบัติที่เกี่ยวข้องกับโทเค็นเพื่อการเข้าถึง แอปของนักพัฒนาแอป นักพัฒนาแอป และบริษัท คุณสามารถใช้นโยบาย AssignMessage หรือ JavaScript เช่น เพื่ออ่านตัวแปรเหล่านี้และใช้ตามต้องการในภายหลังในโฟลว์ ตัวแปรเหล่านี้ยังเป็นประโยชน์ในการแก้ไขข้อบกพร่องด้วย
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
การล้างโทเค็นเพื่อการเข้าถึง
โดยค่าเริ่มต้น ระบบ Apigee Edge จะล้างโทเค็น OAuth2 ออกจากระบบภายใน 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"}