คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
ในหัวข้อนี้ เราจะอธิบายวิธีนําเข้าโทเค็นเพื่อการเข้าถึงที่สร้างขึ้นภายนอก โทเค็นการรีเฟรช หรือรหัสการตรวจสอบสิทธิ์ไปยังที่เก็บโทเค็น Edge คุณใช้เทคนิคนี้ได้หากต้องการกำหนดค่า Apigee Edge เพื่อตรวจสอบโทเค็นที่สร้างขึ้นนอก Apigee Edge
ในกรณีที่ปกติ Apigee Edge จะสร้างและจัดเก็บโทเค็น OAuth แล้วส่งกลับไปยังแอปพลิเคชันการเรียกใช้ จากนั้นแอปการเรียกใช้จะแสดงโทเค็นดังกล่าวกลับไปยัง Apigee Edge เมื่อขอบริการ และ Apigee Edge - ผ่านนโยบาย OAuthV2 ที่มีการดำเนินการ = ConfirmAccessToken จะยืนยันว่าโทเค็นถูกต้อง หัวข้อนี้จะอธิบายวิธีกำหนดค่า Apigee Edge เพื่อจัดเก็บโทเค็น OAuth ที่สร้างขึ้นที่อื่น ในขณะที่คงส่วนการยืนยันโทเค็นไว้เหมือนเดิม เช่นเดียวกับที่ Edge สร้างขึ้น
ตัวอย่าง
หากต้องการดูตัวอย่างที่ใช้งานได้ซึ่งแสดงเทคนิคที่อธิบายไว้ในหัวข้อนี้ โปรดดูตัวอย่างการจัดการโทเค็นที่ได้รับมอบสิทธิ์ของ Apigee
นี่คืออะไร
สมมติว่าคุณมีระบบการให้สิทธิ์อยู่แล้ว และคุณต้องการใช้ค่าโทเค็นหรือโค้ดที่ระบบนั้นสร้างขึ้นแทนโทเค็น OAuth2 หรือค่าโค้ดที่ Edge สร้างขึ้น จากนั้นคุณจะส่งคำขอพร็อกซี API ที่ปลอดภัยได้โดยใช้โทเค็นหรือโค้ดที่มาแทนที่ และ Edge จะตรวจสอบคำขอดังกล่าวเสมือนว่า Edge สร้างขึ้นเอง
ข้อมูลเบื้องต้น
ในกรณีที่ปกติ Apigee Edge จะสร้างโทเค็นโดยสร้างสตริงตัวอักษรและตัวเลขแบบสุ่ม Apigee Edge จะเชื่อมโยงกับโทเค็นดังกล่าว รวมถึงข้อมูลอื่นๆ เช่น เวลาที่ออกโทเค็น วันหมดอายุ รายการผลิตภัณฑ์ API ที่โทเค็นใช้งานได้ และขอบเขต ข้อมูลทั้งหมดนี้อาจแสดงในการตอบกลับที่สร้างขึ้นโดยอัตโนมัติโดยนโยบาย OAuthV2 ที่กำหนดค่าด้วยการดำเนินการ = 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 โดยใช้นโยบาย OAuthV2 กับการดำเนินการ = ConfirmAccessToken เพื่อค้นหาโทเค็น เรียกข้อมูลทั้งหมด และใช้ข้อมูลดังกล่าวเพื่อระบุว่าโทเค็นถูกต้องหรือไม่สำหรับพร็อกซี API ที่ขอ
ซึ่งเรียกว่าการตรวจสอบโทเค็น ข้อมูลทั้งหมดข้างต้นประกอบด้วยโทเค็น ค่า access_token เป็นเพียงวิธีค้นหาข้อมูลดังกล่าว
ในทางตรงกันข้าม การทำตามขั้นตอนที่อธิบายไว้ที่นี่จะช่วยให้คุณกำหนดค่า Edge ให้จัดเก็บโทเค็นเพื่อให้ค่า access_token เป็นโทเค็นที่บริการภายนอกสร้างขึ้น ข้อมูลเมตาอื่นๆ ทั้งหมดอาจเหมือนกัน ตัวอย่างเช่น สมมติว่าคุณมีระบบภายนอก Apigee Edge ที่สร้างโทเค็นในรูปแบบ "TOKEN-<16 invalid number>" ในกรณีดังกล่าว ข้อมูลเมตาของโทเค็นแบบเต็มซึ่ง 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 ที่มีการดำเนินการ =
ConfirmAccessToken เพื่อตรวจสอบได้ คุณจะใช้รูปแบบการนำเข้าที่คล้ายกันกับรหัสการให้สิทธิ์และรีเฟรชโทเค็นได้
เรามาพูดถึงการตรวจสอบข้อมูลเข้าสู่ระบบไคลเอ็นต์กัน
สิ่งที่ต้องมีก่อนการสร้างโทเค็นคือการยืนยันไคลเอ็นต์ที่ส่งคำขอ โดยค่าเริ่มต้น นโยบาย 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 ก่อนที่จะสร้างโทเค็น เพื่อให้มีการตรวจสอบไคลเอ็นต์อย่างชัดเจนผ่านวิธีการอื่นๆ ซึ่งมักเกิดขึ้นผ่านนโยบาย ServiceAPI ที่เชื่อมต่อกับปลายทางระยะไกลในเครือข่ายของคุณ
คุณต้องตรวจสอบว่าพร็อกซี API ที่สร้างโทเค็นได้ตรวจสอบความถูกต้องของข้อมูลเข้าสู่ระบบของไคลเอ็นต์ก่อน ไม่ว่าจะโดยโดยนัยหรือโดยชัดแจ้ง โปรดทราบว่าการตรวจสอบไคลเอ็นต์ไม่ขึ้นอยู่กับการสร้างโทเค็นเพื่อการเข้าถึง คุณกำหนดค่าให้ Apigee Edge ทำทั้ง 2 อย่าง หรือทำอย่างใดอย่างหนึ่ง หรือไม่ทำเลยก็ได้
หากต้องการให้นโยบาย OAuthV2/GenerateAccessToken ใน Apigee Edge ไว้ตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์กับ Edge Store ให้ตั้งค่าองค์ประกอบ <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 Admin 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 รายการ
หมายเหตุเกี่ยวกับขั้นตอนและการกำหนดค่านโยบาย
-
หากต้องการใช้ระบบภายนอกเพื่อตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ คุณจะต้องพัฒนาขั้นตอนการดำเนินการของนโยบายเพื่อทำสิ่งที่จำเป็น โดยปกติคุณจะใช้นโยบาย ServiceAPI เพื่อส่งข้อมูลเข้าสู่ระบบที่รู้จักจากภายนอกไปยังบริการการตรวจสอบสิทธิ์ภายนอก โดยทั่วไป บริการตรวจสอบสิทธิ์ภายนอกจะตอบกลับด้วย และถ้าข้อมูลเข้าสู่ระบบถูกต้อง ก็จะเป็นโทเค็นเพื่อการเข้าถึงด้วย
-
หลัง Serviceสามารถแสดงโฆษณา พร็อกซี API ต้องแยกวิเคราะห์การตอบกลับเพื่อดึงสถานะความถูกต้อง รวมถึง access_token ที่สร้างขึ้นจากภายนอก และอาจรีเฟรช
-
ในนโยบาย OAuthV2/GenerateAccessToken ให้ตั้งค่าองค์ประกอบ
<StoreToken>
เป็นtrue
และตั้งค่าองค์ประกอบ<ExternalAuthorization>
เป็นtrue
หรือfalse
ตามความเหมาะสมเมื่อนโยบาย OAuthV2/GenerateAccessToken ทำงาน ระบบจะอ่านตัวแปร
oauth_external_authorization_status
หากมีการตั้งค่าตัวแปรและค่าเป็น "จริง" Apigee Edge จะไม่พยายามตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ หากไม่ได้ตั้งค่าตัวแปรหรือค่าไม่เป็น "จริง" Apigee Edge จะพยายามตรวจสอบข้อมูลเข้าสู่ระบบของไคลเอ็นต์ -
มีองค์ประกอบ 3 อย่างสำหรับนโยบาย OAuthV2 ที่อนุญาตให้คุณระบุข้อมูลภายนอกที่จะนำเข้า ได้แก่
<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 ที่มีการดำเนินการ = 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 ของบุคคลที่สาม