คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ในหัวข้อนี้ เราจะพูดถึงวิธีนำเข้าโทเค็นเพื่อการเข้าถึง โทเค็นเพื่อการรีเฟรช หรือรหัสการให้สิทธิ์ที่สร้างขึ้นภายนอกไปยังที่เก็บโทเค็นของ Edge คุณสามารถใช้เทคนิคนี้ได้หากต้องการ กำหนดค่า Apigee Edge เพื่อตรวจสอบโทเค็นที่สร้างขึ้นภายนอก Apigee Edge
ในกรณีปกติ Apigee Edge จะสร้างและจัดเก็บโทเค็น OAuth แล้วส่งคืนโทเค็นดังกล่าวไปยัง แอปพลิเคชันที่เรียก จากนั้นแอปที่เรียกจะส่งโทเค็นนั้นกลับไปยัง Apigee Edge เมื่อส่งคำขอรับ บริการ และ Apigee Edge จะตรวจสอบว่าโทเค็นถูกต้องหรือไม่ผ่านนโยบาย OAuthV2 ที่มี Operation = VerifyAccessToken หัวข้อนี้อธิบายวิธีกำหนดค่า Apigee Edge เพื่อจัดเก็บ โทเค็น OAuth ที่สร้างขึ้นที่อื่น โดยยังคงส่วนการตรวจสอบโทเค็นไว้เหมือนเดิม ราวกับว่าโทเค็นนั้นสร้างขึ้นโดย Edge
ตัวอย่าง
หากต้องการดูตัวอย่างการทำงานที่แสดงเทคนิค ที่อธิบายไว้ในหัวข้อนี้ โปรดดูตัวอย่างการจัดการโทเค็นที่มอบสิทธิ์ของ Apigee
นี่คืออะไร
สมมติว่าคุณมีระบบการให้สิทธิ์อยู่แล้ว และต้องการใช้ค่าโทเค็นหรือค่ารหัสที่ระบบนั้นสร้างขึ้นแทนค่าโทเค็นหรือค่ารหัส OAuth2 ที่ Edge สร้างขึ้น จากนั้นคุณจะส่งคำขอพร็อกซี API ที่ปลอดภัยด้วยโทเค็นหรือรหัสที่แทนที่ และ Edge จะตรวจสอบโทเค็นหรือรหัสเหล่านั้นราวกับว่าสร้างขึ้นโดย Edge
ข้อมูลเบื้องต้น
ในกรณีปกติ Apigee Edge จะสร้างโทเค็นโดยสร้างสตริงตัวอักษรและ ตัวเลขแบบสุ่ม Apigee Edge จะเชื่อมโยงข้อมูลอื่นๆ กับโทเค็นนั้น เช่น เวลาที่ออกโทเค็น วันที่หมดอายุ รายการผลิตภัณฑ์ API ที่โทเค็นใช้ได้ และขอบเขต ระบบจะส่งคืนข้อมูลทั้งหมดนี้ ในคำตอบที่สร้างขึ้นโดยอัตโนมัติโดยนโยบาย OAuthV2 ที่กำหนดค่าด้วย Operation = GenerateAccessToken คำตอบจะมีลักษณะดังนี้
{ "issued_at": "1469735625687", "application_name": "06947a86-919e-4ca3-ac72-036723b18231", "scope": "urn://example.com/read", "status": "approved", "api_product_list": "[implicit-test]", "api_product_list_json": ["implicit-test"], "expires_in": "1799", //--in seconds "developer.email": "joe@weathersample.com", "token_type": "BearerToken", "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk", "access_token": "zBC90HhCGmGlaMBWeZAai2s3za5j", "organization_name": "wwitman", "refresh_token_expires_in": "0", //--in seconds "refresh_count": "0" }
ค่าของแอตทริบิวต์ access_token เป็นคีย์การค้นหาข้อมูลคำตอบสำหรับ
ข้อมูลคำตอบ แอปสามารถส่งคำขอไปยังพร็อกซี API ที่โฮสต์ใน Edge,
โดยส่งโทเค็นผู้ถือ zBC90HhCGmGlaMBWeZAai2s3za5j และ Edge จะค้นหาโทเค็น ดึงข้อมูลทั้งหมด
และใช้ข้อมูลนั้นเพื่อพิจารณาว่าโทเค็นถูกต้องหรือไม่สำหรับพร็อกซี API ที่ขอ ผ่านนโยบาย OAuthV2
ที่มี Operation = VerifyAccessToken
ซึ่งเรียกว่า การตรวจสอบโทเค็น ข้อมูลทั้งหมดข้างต้นประกอบกันเป็นโทเค็น ค่า
access_token เป็นเพียงวิธีค้นหาข้อมูลนั้น
ในทางกลับกัน การทำตามขั้นตอนที่อธิบายไว้ที่นี่จะช่วยให้คุณกำหนดค่า Edge เพื่อจัดเก็บโทเค็น เพื่อให้ค่า access_token เป็นค่าที่สร้างขึ้นโดยบริการภายนอก ข้อมูลเมตาอื่นๆ ทั้งหมดอาจเหมือนกัน เช่น สมมติว่าคุณมีระบบ ภายนอก Apigee Edge ที่สร้างโทเค็นในรูปแบบ "TOKEN-<16 random numbers>" ในกรณีนี้ ข้อมูลเมตาโทเค็นแบบเต็มที่ Apigee Edge จัดเก็บไว้อาจมีลักษณะดังนี้
{ "issued_at": "1469735625687", "application_name": "06947a86-919e-4ca3-ac72-036723b18231", "scope": "urn://example.com/read", "status": "approved", "api_product_list": "[implicit-test]", "api_product_list_json": ["implicit-test"], "expires_in": "1799", //--in seconds "developer.email": "joe@weathersample.com", "token_type": "BearerToken", "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk", "access_token": "TOKEN-1092837373654221", "organization_name": "wwitman", "refresh_token_expires_in": "0", //--in seconds "refresh_count": "0" }
ในกรณีนี้ แอปสามารถส่งคำขอไปยังพร็อกซี API ที่โฮสต์ใน Edge โดยส่งโทเค็นผู้ถือ
TOKEN-1092837373654221 และ Edge จะตรวจสอบโทเค็นดังกล่าวได้ผ่านนโยบาย OAuthV2 ที่มี Operation =
VerifyAccessToken คุณสามารถใช้รูปแบบการนำเข้าที่คล้ายกันกับ
รหัสการให้สิทธิ์และโทเค็นเพื่อการรีเฟรช
มาพูดถึงการตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ กัน
ข้อกำหนดเบื้องต้นอย่างหนึ่งในการสร้างโทเค็นคือการตรวจสอบไคลเอ็นต์ที่ส่งคำขอ โดยค่าเริ่มต้น นโยบาย OAuthV2/GenerateAccessToken ใน Apigee Edge จะตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์โดยนัย โดยปกติแล้วในคำขอโทเค็น OAuthV2 ระบบจะส่ง client_id และ client_secret ในส่วนหัวการให้สิทธิ์ ซึ่งเข้ารหัสผ่านการให้สิทธิ์พื้นฐานของ HTTP (เชื่อมต่อด้วยเครื่องหมายทวิภาค แล้วเข้ารหัส base64) นโยบาย OAuthV2/GenerateAccessToken ใน Apigee Edge จะถอดรหัสส่วนหัวนั้นและ ค้นหา client_id รวมถึงตรวจสอบว่า client_secret ที่ส่งมานั้นถูกต้องสำหรับ client_id นั้น วิธีนี้ใช้ได้หาก Apigee Edge ทราบข้อมูลเข้าสู่ระบบ กล่าวคือ มี แอปของนักพัฒนาแอปที่จัดเก็บไว้ใน Apigee Edge ซึ่งมีข้อมูลเข้าสู่ระบบ และข้อมูลเข้าสู่ระบบนั้นมี client_id และ client_secret ที่ระบุ
ในกรณีที่ Apigee Edge ไม่ได้ตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ คุณต้อง ออกแบบพร็อกซี API ก่อนที่จะสร้างโทเค็น เพื่อตรวจสอบไคลเอ็นต์อย่างชัดแจ้งด้วยวิธี อื่น ซึ่งมักจะทำผ่านนโยบาย ServiceCallout ที่ เชื่อมต่อกับปลายทางระยะไกลในเครือข่าย
ไม่ว่าจะโดยนัยหรือโดยชัดแจ้ง คุณต้องตรวจสอบว่าพร็อกซี API ที่สร้างโทเค็นจะตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ก่อน โปรดทราบว่าการตรวจสอบไคลเอ็นต์ ไม่เกี่ยวข้องกับการสร้างโทเค็นเพื่อการเข้าถึง คุณสามารถกำหนดค่า Apigee Edge ให้ดำเนินการทั้ง 2 อย่าง หรืออย่างใดอย่างหนึ่ง หรือไม่ดำเนินการเลยก็ได้
หากต้องการให้นโยบาย OAuthV2/GenerateAccessToken ใน Apigee Edge ตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์
กับที่เก็บของ Edge ให้ตั้งค่าองค์ประกอบ <ExternalAuthorization> เป็น
false ภายในการกำหนดค่านโยบาย หรือละเว้นองค์ประกอบนี้ไปเลย หากต้องการใช้บริการการให้สิทธิ์ภายนอกเพื่อตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์อย่างชัดแจ้ง ให้ตั้งค่า <ExternalAuthorization> เป็น true
แม้ว่า Apigee Edge อาจไม่ได้ตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ แต่ Apigee Edge ก็ยังต้องทราบและจัดการ client_id access_token ทุกรายการใน Apigee Edge ไม่ว่าจะ สร้างขึ้นโดย Apigee Edge หรือสร้างขึ้นโดยระบบภายนอกแล้วนำเข้าไปยัง Apigee Edge, จะต้องเชื่อมโยงกับแอปพลิเคชันไคลเอ็นต์ ซึ่งระบุโดย client_id ดังนั้น แม้ในกรณีที่ นโยบาย OAuthV2/GenerateAccessToken ใน Apigee Edge จะไม่ตรวจสอบว่า client_id และ client_secret ตรงกันหรือไม่ นโยบายจะตรวจสอบว่า client_id ถูกต้อง มีอยู่ และไม่ ถูกเพิกถอน ดังนั้น คุณอาจต้องนำเข้า client_id ผ่าน Edge Administrative API เป็นขั้นตอนการตั้งค่าเบื้องต้น
โฟลว์นโยบายสำหรับ OAuth ของบุคคลที่สามใน Apigee
หากต้องการใช้โทเค็นจากระบบ OAuth ของบุคคลที่สามใน Apigee Edge โฟลว์สำหรับการสร้างโทเค็นเพื่อการเข้าถึง ควรเป็นไปตามรูปแบบใดรูปแบบหนึ่งต่อไปนี้
การตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ภายนอก
- ServiceCallout เพื่อตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ขาเข้าและรับโทเค็นภายนอก
- ExtractVariables หรือ ขั้นตอน JavaScript เพื่อ ดึงโทเค็นที่สร้างขึ้นภายนอกจากคำตอบ
- AssignMessage เพื่อ
ตั้งค่าตัวแปรที่รู้จักกันดีเป็นพิเศษที่เรียกว่า
oauth_external_authorization_statusค่าต้องเป็น "จริง" เพื่อระบุว่าข้อมูลเข้าสู่ระบบของไคลเอ็นต์ถูกต้อง - OAuthV2/GenerateAccessToken ที่มีองค์ประกอบ
<ExternalAuthorization>ตั้งค่าเป็นtrueและมีองค์ประกอบ<ExternalAccessToken>,<ExternalRefreshToken>หรือ<ExternalAuthorizationCode>อย่างน้อย 1 รายการ
การตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ภายใน
- ServiceCallout เพื่อรับโทเค็นภายนอก
- ExtractVariables หรือ ขั้นตอน JavaScript เพื่อ ดึงโทเค็นที่สร้างขึ้นภายนอกจากคำตอบ
- OAuthV2/GenerateAccessToken ที่มีองค์ประกอบ
<ExternalAuthorization>ตั้งค่าเป็นfalseและมีองค์ประกอบ<ExternalAccessToken>,<ExternalRefreshToken>หรือ<ExternalAuthorizationCode>อย่างน้อย 1 รายการ
หมายเหตุเกี่ยวกับการกำหนดค่าโฟลว์และนโยบาย
-
ในกรณีที่คุณต้องการใช้ระบบภายนอกเพื่อตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ คุณต้องเป็นผู้พัฒนาโฟลว์นโยบายที่ทำสิ่งที่จำเป็น โดยปกติแล้วคุณจะใช้นโยบาย ServiceCallout เพื่อส่งข้อมูลเข้าสู่ระบบที่ระบบภายนอกรู้จักไปยังบริการการตรวจสอบสิทธิ์ภายนอก บริการการตรวจสอบสิทธิ์ภายนอกจะส่งคืนคำตอบ และโทเค็นเพื่อการเข้าถึงด้วย หากข้อมูลเข้าสู่ระบบถูกต้อง
-
หลังจาก ServiceCallout แล้ว พร็อกซี API ต้องแยกวิเคราะห์คำตอบเพื่อดึงสถานะความถูกต้อง รวมถึง access_token ที่สร้างขึ้นภายนอกและอาจเป็น refresh_token
-
ในนโยบาย OAuthV2/GenerateAccessToken ให้ตั้งค่าองค์ประกอบ
<StoreToken>เป็นtrueและตั้งค่าองค์ประกอบ<ExternalAuthorization>เป็นtrueหรือfalseตามความเหมาะสมเมื่อนโยบาย OAuthV2/GenerateAccessToken ทำงาน นโยบายจะอ่านตัวแปร
oauth_external_authorization_statusหากตั้งค่าตัวแปรและค่าเป็น "จริง" Apigee Edge จะไม่พยายามตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ หากไม่ได้ตั้งค่าตัวแปร หรือค่าไม่ใช่ "จริง" Apigee Edge จะพยายามตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ -
นโยบาย OAuthV2 มีองค์ประกอบ 3 รายการที่ช่วยให้คุณระบุข้อมูลภายนอกที่จะนำเข้า ได้แก่
<ExternalAccessToken>,<ExternalRefreshToken>, และ<ExternalAuthorizationCode>. องค์ประกอบแต่ละรายการเหล่านี้ยอมรับ ตัวแปรโฟลว์ นโยบาย Edge จะอ่านตัวแปรนั้นเพื่อค้นหาโทเค็นเพื่อการเข้าถึง โทเค็นเพื่อการรีเฟรช หรือรหัสการให้สิทธิ์ที่สร้างขึ้นภายนอก คุณต้องเป็นผู้ใช้นโยบายและตรรกะเพื่อวางโทเค็นหรือรหัสภายนอกในตัวแปรที่เหมาะสมตัวอย่างเช่น การกำหนดค่าต่อไปนี้ในนโยบาย OAuthV2 จะบอกให้ Edge ค้นหาโทเค็นในตัวแปรบริบทที่ชื่อ
external_token<ExternalAccessToken>external_token</ExternalAccessToken>
คุณจะต้องมีขั้นตอนก่อนหน้าที่จะตั้งค่าตัวแปรนั้นด้วย
-
สำหรับการตั้งค่าตัวแปร
oauth_external_authorization_statusเทคนิคทั่วไปในการตั้งค่าตัวแปรนี้คือการใช้นโยบาย AssignMessage กับองค์ประกอบ AssignVariable ดังนี้<AssignMessage name="AssignMessage-SetVariable"> <DisplayName>Assign Message - Set Variable</DisplayName> <AssignVariable> <Name>oauth_external_authorization_status</Name> <Value>true</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>โปรดจำไว้ว่านโยบายนี้ต้องอยู่ก่อนนโยบาย OAuthV2 ที่มี Operation = GenerateAccessToken
ตัวอย่างนโยบาย OAuthV2
นโยบาย OAuthV2 ต่อไปนี้จะสร้างโทเค็นเพื่อการเข้าถึง Apigee Edge โดยพิจารณาว่า Edge พบค่าโทเค็นในตัวแปรโฟลว์ external_access_token
<OAuthV2 name="OAuth-v20-Store-External-Token"> <ExternalAccessToken>external_access_token</ExternalAccessToken> <ExternalAuthorization>true</ExternalAuthorization> <Operation>GenerateAccessToken</Operation> <GenerateResponse enabled="true"> <Format>FORM_PARAM</Format> </GenerateResponse> <ReuseRefreshToken>false</ReuseRefreshToken> <StoreToken>true</StoreToken> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <ExpiresIn ref='flow.variable'>2400000</ExpiresIn> </OAuthV2>
ในทางทฤษฎี คุณสามารถใช้รูปแบบนี้กับบริการการให้สิทธิ์ OAuth2 ของบุคคลที่สามได้