คุณกําลังดูเอกสารประกอบของ 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> |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายรหัสข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงกลับมา และตัวแปรข้อผิดพลาดที่ 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 | นโยบายที่คาดว่าจะพบ Client-ID ในตัวแปรที่ระบุไว้ในส่วน
<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.invalid_request |
400 | ชื่อข้อผิดพลาดนี้ใช้สำหรับข้อผิดพลาดหลายประเภท ซึ่งมักจะมีไว้สำหรับข้อผิดพลาด
หรือส่งพารามิเตอร์ที่ไม่ถูกต้องในคำขอ หาก <GenerateResponse> คือ
ตั้งค่าเป็น false ให้ใช้ตัวแปรความผิดพลาด (อธิบายไว้ด้านล่าง) เพื่อดึงรายละเอียดเกี่ยวกับ
เช่น ชื่อและสาเหตุของข้อผิดพลาด |
GenerateAccessToken GenerateAuthorizationCode GenerateAccessTokenImplicitGrant RefreshAccessToken |
steps.oauth.v2.InvalidAccessToken |
401 | ส่วนหัวของการให้สิทธิ์ไม่มีคำว่า "Bearer" ซึ่งจำเป็นต้องมี สำหรับ
ตัวอย่าง: Authorization: Bearer your_access_token |
VerifyAccessToken |
steps.oauth.v2.InvalidAPICallAsNo\ |
401 |
พร็อกซี API ไม่อยู่ในผลิตภัณฑ์ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง เคล็ดลับ: ตรวจสอบว่าผลิตภัณฑ์ที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึง มีการกำหนดค่าอย่างถูกต้อง ตัวอย่างเช่น หากคุณใช้ไวลด์การ์ดในเส้นทางทรัพยากร โปรดตรวจสอบว่า มีการใช้ไวลด์การ์ดอย่างถูกต้อง โปรดดูรายละเอียดที่หัวข้อสร้างผลิตภัณฑ์ API ดูเพิ่มเติมที่ โพสต์ชุมชน Apigee สำหรับคำแนะนำเพิ่มเติมเกี่ยวกับสาเหตุของข้อผิดพลาดนี้ |
VerifyAccessToken |
steps.oauth.v2.InvalidClientIdentifier |
500 |
ระบบจะแสดงชื่อข้อผิดพลาดนี้เมื่อพร็อพเพอร์ตี้ |
GenerateAccessToken |
steps.oauth.v2.InvalidParameter |
500 | นโยบายต้องระบุโทเค็นเพื่อการเข้าถึงหรือรหัสการให้สิทธิ์ แต่ไม่ได้ระบุ ทั้ง 2 อย่าง | GenerateAuthorizationCode GenerateAccessTokenImplicitGrant |
steps.oauth.v2.InvalidTokenType |
500 | องค์ประกอบ <Tokens>/<Token> กำหนดให้คุณต้องระบุโทเค็น
ประเภท (เช่น refreshtoken ) หากลูกค้าส่งฟอร์มผิดประเภท
|
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 = "invalid_request" |
oauthV2.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด | oauthV2.GenerateAccesstoken.failed = true |
oauthV2.policy_name.fault.name |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นสาเหตุของข้อผิดพลาด | oauthV2.GenerateAccesstoken.fault.name = invalid_request
หมายเหตุ: สำหรับการดำเนินการ 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 HTTP
ข้อมูลอ้างอิงการตอบกลับ
{ { "fault":{ "faultstring":"Invalid Access Token", "detail":{ "errorcode":"keymanagement.service.invalid_access_token" } } }
ตัวอย่างกฎข้อผิดพลาด
<FaultRule name=OAuthV2 Faults"> <Step> <Name>AM-InvalidClientResponse</Name> <Condition>(fault.name = "invalid_client") OR (fault.name = "InvalidClientIdentifier")</Condition> </Step> <Step> <Name>AM-InvalidTokenResponse</Name> <Condition>(fault.name = "invalid_access_token")</Condition> </Step> <Condition>(oauthV2.failed = true) </Condition> </FaultRule>
สคีมานโยบาย
นโยบายแต่ละประเภทจะกำหนดโดยสคีมา XML (.xsd
) สคีมานโยบายมีให้ใช้งานเป็นข้อมูลอ้างอิงใน GitHub
การทำงานกับการกำหนดค่า OAuth เริ่มต้น
องค์กรแต่ละแห่ง (แม้แต่องค์กรช่วงทดลองใช้ฟรี) ใน Apigee Edge จะได้รับการจัดสรรปลายทางของโทเค็น OAuth ระบบกําหนดค่าปลายทางไว้ล่วงหน้าด้วยนโยบายในพร็อกซี API ที่เรียกว่า oauth คุณเริ่มใช้ปลายทางของโทเค็นได้ทันทีที่สร้างบัญชีบน Apigee Edge โปรดดูรายละเอียดที่หัวข้อการทำความเข้าใจปลายทาง OAuth
การล้างโทเค็นการเข้าถึง
โดยค่าเริ่มต้น ระบบจะลบโทเค็น OAuth2 ออกจากระบบ Apigee Edge อย่างถาวรภายใน 3 วัน (259200 วินาที) หลังจากที่โทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช (หากมี) หมดอายุ ในบางกรณี คุณอาจต้องเปลี่ยนค่าเริ่มต้นนี้ เช่น คุณอาจต้องการลดเวลาการลบข้อมูลเพื่อประหยัดพื้นที่ดิสก์หากมีการสร้างโทเค็นจำนวนมาก
หากใช้ Edge 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" : "invalid_request", "Error" :"Refresh Token expired"}
อย่างไรก็ตาม การตอบสนองที่เป็นไปตามข้อกำหนด RFC มีดังนี้
{"error" : "invalid_grant", "error_description" :"refresh token expired"}