คุณกําลังดูเอกสารประกอบของ 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>
หมายเหตุ: ระบบรองรับเฉพาะโทเค็น Bearer ของ 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 "ไม่ได้รับสิทธิ์" แม้ว่านโยบายจะระบุพารามิเตอร์การเข้าสู่ระบบที่ถูกต้องแล้วก็ตาม หากต้องการแก้ไขปัญหานี้ คุณต้องตั้งค่าส่วนหัวคำขอการให้สิทธิ์
ส่วนหัวการอนุญาตต้องมีรูปแบบการเข้าถึงพื้นฐานที่มี 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 แบบเต็มของโทเค็นในการตอบกลับ รวมถึงแอตทริบิวต์ที่กําหนดเองที่คุณตั้งไว้ ในบางกรณี คุณอาจต้องการซ่อนแอตทริบิวต์ที่กำหนดเองบางส่วนหรือทั้งหมดในการตอบกลับเพื่อไม่ให้แอปไคลเอ็นต์มองเห็น
โดยค่าเริ่มต้น แอตทริบิวต์ที่กำหนดเองจะปรากฏในการตอบกลับ หากต้องการซ่อน ให้ตั้งค่าพารามิเตอร์ display เป็น false เช่น
<Attributes> <Attribute name="employee_id" ref="employee.id" display="false"/> <Attribute name="employee_name" ref="employee.name" display="false"/> </Attributes>
ระบบจะไม่เก็บค่าของแอตทริบิวต์ display
สมมติว่าคุณสร้างโทเค็นการเข้าถึงที่มีแอตทริบิวต์ที่กำหนดเองซึ่งคุณต้องการซ่อนในการตอบกลับที่สร้างขึ้น การตั้งค่า display=false
จะช่วยให้บรรลุเป้าหมายดังกล่าว อย่างไรก็ตาม หากมีการสร้างโทเค็นการเข้าถึงใหม่ในภายหลังโดยใช้โทเค็นการรีเฟรช แอตทริบิวต์ที่กำหนดเองเดิมจากโทเค็นการเข้าถึงจะแสดงในการตอบกลับโทเค็นการรีเฟรช เนื่องจาก Edge ไม่ได้จดจำไว้ว่าแอตทริบิวต์ display
เดิมตั้งค่าเป็น false
ในนโยบายการสร้างโทเค็นการเข้าถึง และแอตทริบิวต์ที่กำหนดเองเป็นเพียงส่วนหนึ่งของข้อมูลเมตาของโทเค็นการเข้าถึง
คุณจะเห็นลักษณะการทำงานเดียวกันนี้หากเพิ่มแอตทริบิวต์ที่กำหนดเองลงในรหัสการให้สิทธิ์ เมื่อสร้างโทเค็นการเข้าถึงโดยใช้รหัสดังกล่าว แอตทริบิวต์ที่กำหนดเองเหล่านั้นจะแสดงในการตอบกลับของโทเค็นการเข้าถึง โปรดทราบว่านี่อาจไม่ใช่ลักษณะการทำงานที่คุณตั้งใจไว้
หากต้องการซ่อนแอตทริบิวต์ที่กำหนดเองในกรณีเหล่านี้ คุณมีตัวเลือกต่อไปนี้
- รีเซ็ตแอตทริบิวต์ที่กำหนดเองในนโยบายโทเค็นการรีเฟรชอย่างชัดเจน และตั้งค่าการแสดงผลเป็น 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
บทต่อไปนี้จะระบุตัวแปรการไหลและค่าเริ่มต้นด้วย โปรดทราบว่าค่าตัวแปรของโฟลว์จะมีลำดับความสำคัญเหนือกว่าค่าเริ่มต้นที่ระบุ
<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
ในคําขอ ทั้งสองต้องตรงกันทุกประการ หากไม่ตรงกัน ระบบจะแสดงข้อผิดพลาด ดูข้อมูลเกี่ยวกับการลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์ใน Edge และระบุ URL ของ Callback ได้ที่ลงทะเบียนแอปและจัดการคีย์ 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
ข้อความต่อไปนี้จะระบุตัวแปรโฟลว์และค่าเริ่มต้นด้วย โปรดทราบว่าค่าตัวแปรของโฟลว์จะมีความสำคัญเหนือกว่าค่าเริ่มต้นที่ระบุ
<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 ms (2 ปี) (มีผลตั้งแต่วันที่ 5 ส.ค. 2024) |
การแสดงผล: |
ไม่บังคับ |
ประเภท: | จำนวนเต็ม |
ค่าที่ใช้ได้มีดังนี้ |
|
ใช้กับประเภทการให้สิทธิ์: |
|
องค์ประกอบ <ResponseType>
<ResponseType>request.queryparam.response_type</ResponseType>
องค์ประกอบนี้จะแจ้งให้ Edge ทราบว่าแอปไคลเอ็นต์ขอการให้สิทธิ์ประเภทใด โดยจะใช้กับรหัสการให้สิทธิ์และขั้นตอนการให้สิทธิ์ประเภทโดยนัยเท่านั้น
โดยค่าเริ่มต้น Edge จะค้นหาค่าประเภทคำตอบในพารามิเตอร์ response_type
query
หากต้องการลบล้างลักษณะการทํางานเริ่มต้นนี้ ให้ใช้องค์ประกอบ <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>
<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 ที่จะได้รับการปกป้อง โปรดแนบนโยบายไปกับ PreFlow ของคำขอ ProxyEndpoint เพื่อให้มั่นใจว่าคำขอทั้งหมดไปยัง API ได้รับการยืนยันแล้ว ดังนี้
<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 Authorization ตามข้อกำหนด OAuth 2.0 โปรดใช้การตั้งค่านี้หากคาดว่าโทเค็นเพื่อการเข้าถึงจะแสดงในตำแหน่งที่ไม่ใช่ตำแหน่งมาตรฐาน เช่น พารามิเตอร์การค้นหา หรือส่วนหัว HTTP ที่มีชื่ออื่นนอกเหนือจากการให้สิทธิ์ |
ดูข้อมูลเพิ่มเติมได้ที่การยืนยันโทเค็นการเข้าถึงและการขอโทเค็นการเข้าถึงและรหัสการให้สิทธิ์
การระบุตําแหน่งตัวแปรคําขอ
สำหรับการให้สิทธิ์แต่ละประเภท นโยบายจะกำหนดตำแหน่งหรือข้อมูลที่จำเป็นในข้อความคำขอ สมมติฐานเหล่านี้อิงตามข้อกำหนด OAuth 2.0 หากแอปของคุณจำเป็นต้องเบี่ยงเบนจากข้อกำหนด OAuth 2.0 คุณสามารถระบุตำแหน่งที่คาดไว้สำหรับพารามิเตอร์แต่ละรายการได้ เช่น เมื่อจัดการรหัสการให้สิทธิ์ คุณสามารถระบุตำแหน่งของรหัสการให้สิทธิ์ รหัสไคลเอ็นต์ URI การเปลี่ยนเส้นทาง และขอบเขต ซึ่งสามารถระบุได้ว่าเป็นหัว HTTP, พารามิเตอร์การค้นหา หรือพารามิเตอร์แบบฟอร์ม
ตัวอย่างด้านล่างแสดงวิธีระบุตําแหน่งพารามิเตอร์รหัสการให้สิทธิ์ที่จําเป็นเป็นส่วนหัว HTTP
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.header.client_id</ClientId> <RedirectUri>request.header.redirect_uri</RedirectUri> <Scope>request.header.scope</Scope> ...
หรือหากจําเป็นต้องรองรับฐานแอปไคลเอ็นต์ ให้ผสมผสานส่วนหัวและพารามิเตอร์การค้นหาดังนี้
... <GrantType>request.header.grant_type</GrantType> <Code>request.header.code</Code> <ClientId>request.queryparam.client_id</ClientId> <RedirectUri>request.queryparam.redirect_uri</RedirectUri> <Scope>request.queryparam.scope</Scope> ...
สามารถกำหนดค่าสถานที่ตั้งได้เพียง 1 แห่งต่อพารามิเตอร์
ตัวแปรโฟลว์
ระบบจะป้อนข้อมูลตัวแปรของขั้นตอนที่กําหนดไว้ในตารางนี้เมื่อมีการเรียกใช้นโยบาย OAuth ที่เกี่ยวข้อง และตัวแปรดังกล่าวจึงพร้อมใช้งานสําหรับนโยบายหรือแอปพลิเคชันอื่นๆ ที่ดําเนินการในขั้นตอนของพร็อกซี API
การดำเนินการ 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 เป็น "บริษัท" ระบบจะป้อนข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "นักพัฒนาแอป" ระบบจะป้อนข้อมูลแอตทริบิวต์นักพัฒนาแอป
ตัวแปร | คำอธิบาย |
---|---|
ตัวแปรเฉพาะนักพัฒนาแอป | |
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 เป็น "บริษัท" ระบบจะป้อนข้อมูลแอตทริบิวต์บริษัท และหาก app.appType เป็น "นักพัฒนาแอป" ระบบจะป้อนข้อมูลแอตทริบิวต์นักพัฒนาแอป
ตัวแปร | คำอธิบาย |
---|---|
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> |
ข้อมูลอ้างอิงข้อผิดพลาด
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Thrown by operations |
---|---|---|---|
steps.oauth.v2.access_token_expired |
401 | The access token is expired. |
VerifyAccessToken |
steps.oauth.v2.access_token_not_approved |
401 | The access token was revoked. | VerifyAccessToken |
steps.oauth.v2.apiresource_doesnot_exist |
401 | The requested resource does not exist any of the API products associated with the access token. | VerifyAccessToken |
steps.oauth.v2.FailedToResolveAccessToken |
500 | The policy expected to find an access token in a variable specified in the
<AccessToken> element, but the variable could not be resolved. |
GenerateAccessToken |
steps.oauth.v2.FailedToResolveAuthorizationCode |
500 | The policy expected to find an authorization code in a variable specified in the
<Code> element, but the variable could not be resolved. |
GenerateAuthorizationCode |
steps.oauth.v2.FailedToResolveClientId |
500 | The policy expected to find the Client ID in a variable specified in the
<ClientId> element, but the variable could not be resolved. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.FailedToResolveRefreshToken |
500 | The policy expected to find a refresh token in a variable specified in the
<RefreshToken> element, but the variable could not be resolved. |
RefreshAccessToken |
steps.oauth.v2.FailedToResolveToken |
500 | The policy expected to find a token in a variable specified in the
<Tokens> element, but the variable could not be resolved. |
ValidateToken |
steps.oauth.v2.InsufficientScope |
403 | The access token presented in the request has a scope that does not match the scope specified in the verify access token policy. To learn about scope, see Working with OAuth2 scopes. | VerifyAccessToken |
steps.oauth.v2.invalid_access_token |
401 | The access token sent from the client is invalid. | VerifyAccessToken |
steps.oauth.v2.invalid_client |
401 |
This error name is returned when the Note: It is recommended that you change existing fault rule
conditions to catch both the |
GenerateAccessToken RefreshAccessToken |
steps.oauth.v2.InvalidRequest |
400 | This error name is used for multiple different kinds of errors, typically for missing
or incorrect parameters sent in the request. If <GenerateResponse> is
set to false , use fault variables (described below) to retrieve details about
the error, such as the fault name and cause. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | The authorization header does not have the word "Bearer", which is required. For
example: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNoApiProductMatchFound |
401 |
The API proxy is not in the Product associated with the access token. Tips: Be sure that the product associated with the access token is configured correctly. For example, if you use wildcards in resource paths, be sure the wildcards are being used correctly. See Create API products for details. See also this Apigee Community post for more guidance on causes for this error. |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
This error name is returned when the |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | The policy must specify either an access token or an authorization code, but not both. | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | The <Tokens>/<Token> element requires you to specify the token
type (for example, refreshtoken ). If the client passes the wrong type, this
error is thrown. |
ValidateToken InvalidateToken |
steps.oauth.v2.MissingParameter |
500 | The response type is token , but no grant types are specified. |
GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.UnSupportedGrantType |
500 |
The client specified a grant type that is unsupported by the policy (not listed in the <SupportedGrantTypes> element). Note: There is currently a bug where unsupported grant type errors are not thrown correctly. If an unsupported grant type error occurs, the proxy does not enter the Error Flow, as expected. |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause |
---|---|
InvalidValueForExpiresIn |
For the |
InvalidValueForRefreshTokenExpiresIn |
For the <RefreshTokenExpiresIn> element, valid values are positive
integers and -1 . |
InvalidGrantType |
An invalid grant type is specified in the <SupportedGrantTypes>
element. See the policy reference for a list of valid types. |
ExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support expiration. For example, the VerifyToken operation does not. |
RefreshTokenExpiresInNotApplicableForOperation |
Be sure that the operations specified in the <Operations> element support refresh token expiration. For example, the VerifyToken operation does not. |
GrantTypesNotApplicableForOperation |
Be sure that the grant types specified in <SupportedGrantTypes> are supported for the specified operation. |
OperationRequired |
You must specify an operation in this policy using the Note: If the |
InvalidOperation |
You must specify a valid operation in this policy using the
Note: If the |
TokenValueRequired |
You must specify a token <Token> value in the
<Tokens> element. |
Fault variables
These variables are set when this policy triggers an error at runtime.
<GenerateResponse>
is set to
false
. If <GenerateResponse>
is
true
, the policy returns a response to the client immediately if an error occurs --
the error flow is skipped and these variables are not populated. For more information, see
What you need to
know about policy errors.Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name = "InvalidRequest" |
oauthV2.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.fault.name = InvalidRequest
Note: For the VerifyAccessToken operation, the fault name includes this suffix: |
oauthV2.policy_name.fault.cause |
policy_name is the user-specified name of the policy that threw the fault. | oauthV2.GenerateAccesstoken.cause = Required param : grant_type |
Example error response
These responses are sent back to the client if the <GenerateResponse>
element is true.
errorcode
part of the error response. Do not rely on the text in the
faultstring
, because it could change.If <GenerateResponse>
is true, the policy returns errors
in this format for operations that generate tokens and codes. For a complete list, see see
OAuth HTTP error
response reference.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
If <GenerateResponse>
is true, the policy returns errors
in this format for verify and validate operations. For a complete list, see see OAuth HTTP error
response reference.
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
Example fault rule
<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 นี้จะตั้งค่าพร็อพเพอร์ตี้การล้างข้อมูลโทเค็นเป็น "จริง" สําหรับองค์กรที่ชื่อ 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"}