คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
รหัสการให้สิทธิ์เป็นหนึ่งในประเภทการให้สิทธิ์ OAuth 2.0 ที่ใช้กันโดยทั่วไป โฟลว์ของรหัสการให้สิทธิ์เป็นการกำหนดค่า "OAUTH แบบ 3 ทาง" ในการกำหนดค่านี้ ผู้ใช้จะตรวจสอบสิทธิ์ตัวเองกับเซิร์ฟเวอร์ทรัพยากรและให้ความยินยอมแก่แอปในการเข้าถึงทรัพยากรที่ได้รับการปกป้องโดยไม่เปิดเผยชื่อผู้ใช้/รหัสผ่านแก่แอปไคลเอ็นต์
เกี่ยวกับหัวข้อนี้
หัวข้อนี้จะอธิบายและให้ภาพรวมทั่วไปเกี่ยวกับโฟลว์ประเภทการให้สิทธิ์ OAuth 2.0 และพูดถึงวิธีใช้โฟลว์นี้ใน Apigee Edge
วิดีโอ
ดูวิดีโอสั้นๆ เพื่อเรียนรู้วิธีใช้ประเภทการให้สิทธิ์ OAuth 2.0 เพื่อรักษาความปลอดภัย API
กรณีการใช้งาน
ประเภทการให้สิทธิ์นี้มีไว้สำหรับแอปที่เขียนโดยนักพัฒนาแอปของบุคคลที่สามซึ่งไม่มี ความสัมพันธ์ทางธุรกิจที่เชื่อถือได้กับผู้ให้บริการ API ตัวอย่างเช่น โดยทั่วไปแล้วนักพัฒนาแอปที่ลงทะเบียน โปรแกรม API สาธารณะไม่ควรได้รับความไว้วางใจ ประเภทการให้สิทธิ์นี้จะไม่แชร์ข้อมูลเข้าสู่ระบบของผู้ใช้ ในเซิร์ฟเวอร์ทรัพยากรกับแอป
ตัวอย่างโค้ด
คุณดูการติดตั้งใช้งานตัวอย่างที่สมบูรณ์และใช้งานได้ของประเภทการให้สิทธิ์รหัสการให้สิทธิ์ใน
Apigee Edge ได้ในที่เก็บ api-platform-samples ใน GitHub ดูตัวอย่าง oauth-advanced
sample ในไดเรกทอรี api-platform-samples/sample-proxies ดูรายละเอียดเกี่ยวกับตัวอย่างได้ในไฟล์
README
แผนผังโฟลว์
แผนผังโฟลว์ต่อไปนี้แสดงโฟลว์ OAuth ของรหัสการให้สิทธิ์โดยมี Apigee Edge เป็นเซิร์ฟเวอร์การให้สิทธิ์
เคล็ดลับ: หากต้องการดูแผนผังนี้ในเวอร์ชันที่ใหญ่ขึ้น ให้คลิกขวาที่แผนผังแล้วเปิดใน แท็บใหม่ หรือบันทึกแล้วเปิดในโปรแกรมดูรูปภาพ
.png?hl=th)
ขั้นตอนในขั้นตอนรหัสการให้สิทธิ์
ต่อไปนี้เป็นข้อมูลสรุปขั้นตอนที่ต้องใช้ในการติดตั้งใช้งานประเภทการให้สิทธิ์รหัสการให้สิทธิ์โดยมี Apigee Edge เป็นเซิร์ฟเวอร์การให้สิทธิ์ โปรดทราบว่าหัวใจสำคัญของโฟลว์นี้คือไคลเอ็นต์ จะไม่มีโอกาสได้เห็นข้อมูลเข้าสู่ระบบของผู้ใช้ในเซิร์ฟเวอร์ทรัพยากร
ข้อกำหนดเบื้องต้น: แอปไคลเอ็นต์ต้องลงทะเบียนกับ Apigee Edge เพื่อ รับรหัสไคลเอ็นต์และคีย์รหัสลับไคลเอ็นต์ ดูรายละเอียดได้ที่การลงทะเบียนแอปไคลเอ็นต์สำหรับ
1. ผู้ใช้เริ่มโฟลว์
เมื่อแอปต้องเข้าถึงทรัพยากรที่ได้รับการปกป้องของผู้ใช้จากเซิร์ฟเวอร์ทรัพยากร (เช่น รายชื่อติดต่อในเว็บไซต์โซเชียลมีเดีย) แอปจะส่งการเรียก API ไปยัง Apigee Edge ซึ่ง จะตรวจสอบรหัสของไคลเอ็นต์ และหากรหัสถูกต้อง ระบบจะเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยังหน้าเข้าสู่ระบบที่ ผู้ใช้จะป้อนข้อมูลเข้าสู่ระบบ การเรียก API จะมีข้อมูลที่แอปไคลเอ็นต์ ได้รับเมื่อลงทะเบียน ได้แก่ รหัสไคลเอ็นต์และ URI เปลี่ยนเส้นทาง
2. ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบ
ตอนนี้ผู้ใช้จะเห็นหน้าเข้าสู่ระบบที่ระบบขอให้ป้อนข้อมูลเข้าสู่ระบบ หากเข้าสู่ระบบสำเร็จ เราจะไปยังขั้นตอนถัดไป

3. ผู้ใช้ให้ความยินยอม
ในขั้นตอนนี้ ผู้ใช้จะให้ความยินยอมแก่แอปในการเข้าถึงทรัพยากรของตน โดยปกติแบบฟอร์มความยินยอมจะมีส่วนการเลือกขอบเขต ซึ่งผู้ใช้สามารถเลือกสิ่งที่แอปได้รับอนุญาตให้ทำในเซิร์ฟเวอร์ทรัพยากร ตัวอย่างเช่น ผู้ใช้อาจให้สิทธิ์แบบอ่านอย่างเดียว หรือให้สิทธิ์สำหรับ แอปในการอัปเดตทรัพยากร

4. แอปเข้าสู่ระบบ ส่งคำขอไปยัง Apigee Edge
หากเข้าสู่ระบบและให้ความยินยอมสำเร็จ แอปเข้าสู่ระบบจะ POST ข้อมูลไปยังปลายทาง /authorizationcode ของ Apigee Edge ข้อมูลดังกล่าวประกอบด้วย URI เปลี่ยนเส้นทาง รหัสไคลเอ็นต์ ขอบเขต ข้อมูลเฉพาะของผู้ใช้ ที่ต้องการรวม และการระบุว่าเข้าสู่ระบบสำเร็จ
5. Apigee Edge สร้างรหัสการให้สิทธิ์
เมื่อ Edge ได้รับคำขอ POST จากแอปเข้าสู่ระบบในปลายทาง /authorizationcode จะเกิดสิ่งต่อไปนี้ 2 อย่าง อย่างแรก Edge จะพิจารณาว่าเข้าสู่ระบบสำเร็จ (โดยตรวจสอบพารามิเตอร์ หรือส่วนหัวของคำขอเพื่อดูตัวบ่งชี้ความสำเร็จ) จากนั้น Edge จะตรวจสอบว่า URI เปลี่ยนเส้นทาง ที่ส่งจากแอปเข้าสู่ระบบตรงกับ URI เปลี่ยนเส้นทางที่ระบุไว้เมื่อลงทะเบียน แอปกับ Apigee Edge หากทุกอย่างเรียบร้อย Edge จะสร้างรหัสการให้สิทธิ์
{redirect_uri}?code={authorization_code}&state={some_string}6. ไคลเอ็นต์ดึงรหัสการให้สิทธิ์และขอโทเค็นเพื่อการเข้าถึงจาก Edge
เมื่อมีรหัสการให้สิทธิ์ที่ถูกต้องแล้ว ไคลเอ็นต์จะขอโทเค็นเพื่อการเข้าถึงจาก Edge ได้ โดยทำได้ด้วยการ POST รหัสไคลเอ็นต์และคีย์รหัสลับไคลเอ็นต์ (ที่ได้รับเมื่อลงทะเบียนแอปใน Edge) รหัสการให้สิทธิ์ ประเภทการให้สิทธิ์ และขอบเขต การใส่รหัสไคลเอ็นต์และคีย์รหัสลับจะช่วยให้ Apigee Edge ยืนยันได้ ว่าแอปไคลเอ็นต์เป็นแอปที่ลงทะเบียนไว้ เช่น
$ curl https://{org_name}-test.apigee.net/my_oauth_proxy/accesstoken?code=Xyz123&grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpKNhGar6K&client_secret=hAr4GngA9vAyvI4'
7. ไคลเอ็นต์ได้รับ โทเค็นเพื่อการเข้าถึง
หากทุกอย่างสำเร็จ Edge จะส่งคืนโทเค็นเพื่อการเข้าถึงไปยังไคลเอ็นต์ โทเค็นเพื่อการเข้าถึงจะ มีวันหมดอายุ และจะใช้ได้เฉพาะขอบเขตที่ผู้ใช้ระบุไว้เมื่อให้ ความยินยอมแก่แอปในการเข้าถึงทรัพยากรของตน
8. ไคลเอ็นต์เรียก API ที่ได้รับการปกป้อง
ตอนนี้เมื่อมีโทเค็นเพื่อการเข้าถึงที่ถูกต้องแล้ว ไคลเอ็นต์จะเรียก API ที่ได้รับการปกป้องได้ ในสถานการณ์นี้ ระบบจะส่งคำขอไปยัง Apigee Edge (พร็อกซี) และ Edge มีหน้าที่ตรวจสอบ โทเค็นเพื่อการเข้าถึงก่อนที่จะส่งต่อการเรียก API ไปยังเซิร์ฟเวอร์ทรัพยากรเป้าหมาย โดยจะส่งโทเค็นเพื่อการเข้าถึง ในส่วนหัวการให้สิทธิ์ เช่น
$ curl -H "Authorization: Bearer ylSkZIjbdWybfs4fUQe9BqP0LH5Z" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282
การกำหนดค่าโฟลว์และนโยบาย
ในฐานะเซิร์ฟเวอร์การให้สิทธิ์ Edge ต้องประมวลผลคำขอ OAuth จำนวนหนึ่ง ได้แก่ คำขอโทเค็นเพื่อการเข้าถึง รหัสการให้สิทธิ์ โทเค็นการรีเฟรช การเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ เป็นต้น การกำหนดค่าปลายทางเหล่านี้มี 2 ขั้นตอนพื้นฐาน ได้แก่
- การสร้างโฟลว์ที่กำหนดเอง
- การเพิ่มและกำหนดค่านโยบาย OAuthV2
การกำหนดค่าโฟลว์ที่กำหนดเอง
โดยปกติคุณจะกำหนดค่าโฟลว์ประเภทการให้สิทธิ์นี้เพื่อให้แต่ละขั้นตอนหรือ "ขา" ของโฟลว์กำหนด
โดยโฟลว์ในพร็อกซี Apigee Edge แต่ละโฟลว์จะมีปลายทางและนโยบายที่ทำหน้าที่เฉพาะของ
OAuth ที่จำเป็น เช่น การสร้างรหัสการให้สิทธิ์หรือโทเค็นเพื่อการเข้าถึง ตัวอย่างเช่น ดังที่แสดงใน XML ด้านล่าง ปลายทาง /oauth/authorizationcode มีนโยบายที่เชื่อมโยงชื่อ GenerateAuthCode (ซึ่งเป็นนโยบาย OAuthV2 ที่ระบุการดำเนินการ GenerateAuthorizationCode)
วิธีที่ง่ายที่สุดในการแสดงการกำหนดค่าโฟลว์คือการใช้ตัวอย่าง XML ดูข้อมูลเกี่ยวกับแต่ละโฟลว์ได้ในความคิดเห็นแบบอินไลน์ นี่เป็นเพียงตัวอย่าง คุณกำหนดค่าชื่อโฟลว์และเส้นทางได้ตามต้องการ ดูเพิ่มเติมที่ การกำหนดค่า OAuth ปลายทางและนโยบาย เพื่อดูภาพรวมคร่าวๆ เกี่ยวกับขั้นตอนที่จำเป็นในการสร้างโฟลว์ที่กำหนดเอง เช่นนี้
ดูตัวอย่าง การติดตั้งใช้งานใน GitHub ด้วย
<Flows>
<Flow name="RedirectToLoginApp">
<!--
Publish this URI to developers to use for their 'login' link
-->
<Condition>proxy.pathsuffix == "/oauth/authorize"</Condition>
<Request>
<Step><Name>RedirectToLoginPage</Name></Step>
</Request>
</Flow>
<Flow name="GetAuthCode">
<!--
Call this URL from your Login app after you authenticate the user.
The policy will automatically return the auth code in the response to the
redirect_uri registered by the calling app
-->
<Condition>proxy.pathsuffix == "/oauth/authorizationcode"</Condition>
<Request>
<Step><Name>GenerateAuthCode</Name></Step>
</Request>
</Flow>
<Flow name="GetAccessToken">
<!-- This policy flow is triggered when the URI path suffix
matches /oauth/accesstoken. Publish this URL to app developers
to use when obtaining an access token using an auth code
-->
<Condition>proxy.pathsuffix == "/oauth/accesstoken"</Condition>
<Request>
<Step><Name>GenerateAccessToken</Name></Step>
</Request>
</Flow>
</Flows>
กำหนดค่าโฟลว์ด้วยนโยบาย
แต่ละปลายทางจะมีนโยบายที่เชื่อมโยงอยู่ มาดูตัวอย่างนโยบายกัน ดูเพิ่มเติมที่ การกำหนดค่าปลายทางและนโยบาย OAuth เพื่อดูภาพรวมคร่าวๆ เกี่ยวกับขั้นตอนที่จำเป็นในการเพิ่มนโยบาย OAuthV2 ลงในปลายทางพร็อกซี
การเปลี่ยนเส้นทางไปยังหน้าเข้าสู่ระบบ
นี่คือเส้นทาง /oauth/authorize นโยบายที่แนบมีหน้าที่
เปลี่ยนเส้นทางผู้ใช้ไปยังแอปเข้าสู่ระบบ ซึ่งผู้ใช้ปลายทางสามารถตรวจสอบสิทธิ์และให้สิทธิ์
แอปไคลเอ็นต์ในการเข้าถึงทรัพยากรที่ได้รับการปกป้องได้อย่างปลอดภัยโดยไม่เปิดเผยชื่อผู้ใช้และรหัสผ่านแก่
แอปไคลเอ็นต์ คุณทำได้โดยใช้นโยบายการเรียกใช้บริการ, JavaScript, Node.js หรือ
วิธีอื่นๆ
การเรียก API เพื่อส่งคำขอคือ GET และต้องใช้พารามิเตอร์การค้นหา client_id, response_type, redirect_uri, scope และ state
$ curl http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}
รับรหัสการให้สิทธิ์
นี่คือเส้นทาง /oauth/authorizationcode โดยจะใช้นโย้วบาย OAuthV2 ที่ระบุการดำเนินการ
GenerateAuthorizationCode
<OAuthV2 async="false" continueOnError="false" enabled="true" name="GetAuthCode">
<DisplayName>GetAuthCode</DisplayName>
<Operation>GenerateAuthorizationCode</Operation>
<ExpiresIn>600000</ExpiresIn>
<GenerateResponse/>
</OAuthV2>การเรียก API เพื่อรับรหัสการให้สิทธิ์คือ POST และต้องส่ง client_id, response_type, redirect_uri และเลือกส่ง scope กับ state ในเนื้อหาของคำขอเป็นพารามิเตอร์แบบฟอร์ม ดังที่แสดงในตัวอย่างนี้
$ curl http://myorg-test.apigee.net/oauth/authorizationcode -X POST -d 'client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}'
รับโทเค็นเพื่อการเข้าถึง
นโยบายนี้แนบอยู่กับเส้นทาง /oauth/accesstoken โดยจะใช้นโยบาย OAuthV2
ที่ระบุการดำเนินการ GenerateAccessToken ในกรณีนี้ ระบบคาดหวังพารามิเตอร์ grant_type เป็น
พารามิเตอร์การค้นหา
<OAuthV2 name="GetAccessToken"> <Operation>GenerateAccessToken</Operation> <ExpiresIn>360000000</ExpiresIn> <SupportedGrantTypes> <GrantType>authorization_code</GrantType> </SupportedGrantTypes> <GrantType>request.queryparam.grant_type</GrantType> <GenerateResponse/> </OAuthV2>
การเรียก API เพื่อรับโทเค็นเพื่อการเข้าถึงคือ POST และต้องมีรหัสการให้สิทธิ์, client_id, client_secret, grant_type=authorization_code และเลือกส่ง scope เช่น
$ curl https://{org_name}-test.apigee.net/oauth/accesstoken?grant_type=authorization_code -X POST -d 'code={authorization_code}&client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'
นี่เป็นเพียงข้อมูลสรุปพื้นฐาน ตัวอย่างการใช้งานจริงจะมีนโยบายอื่นๆ อีกมากมายสำหรับการสร้าง URL การแปลง และการทำงานอื่นๆ ดูโปรเจ็กต์ที่สมบูรณ์และใช้งานได้ในตัวอย่างใน GitHub สำหรับa
การแนบนโยบายตรวจสอบโทเค็นเพื่อการเข้าถึง
แนบนโยบาย VerifyAccessToken (นโยบาย OAuthV2 ที่ระบุการดำเนินการ VerifyAccessToken ) ไว้ที่จุดเริ่มต้นของโฟลว์ใดก็ตามที่เข้าถึง API ที่ได้รับการปกป้อง เพื่อให้ระบบดำเนินการนโยบายนี้ เมื่อใดก็ตามที่มีคำขอทรัพยากรที่ได้รับการปกป้องเข้ามา Edge จะตรวจสอบว่าคำขอแต่ละรายการมี โทเค็นเพื่อการเข้าถึงที่ถูกต้อง หากไม่มี ระบบจะแสดงข้อผิดพลาด ดูขั้นตอนพื้นฐานได้ที่การตรวจสอบโทเค็นเพื่อการเข้าถึง
<OAuthV2 async="false" continueOnError="false" enabled="true" name="VerifyAccessToken">
<DisplayName>VerifyAccessToken</DisplayName>
<ExternalAuthorization>false</ExternalAuthorization>
<Operation>VerifyAccessToken</Operation>
<SupportedGrantTypes/>
<GenerateResponse enabled="true"/>
<Tokens/>
</OAuthV2>การเรียก API ที่ได้รับการปกป้อง
หากต้องการเรียก API ที่ได้รับการปกป้องด้วยการรักษาความปลอดภัย OAuth 2.0 คุณต้องแสดงโทเค็นเพื่อการเข้าถึงที่ถูกต้อง รูปแบบที่ถูกต้องคือการใส่โทเค็นในส่วนหัวการให้สิทธิ์ ดังนี้ โปรดทราบ ว่าโทเค็นเพื่อการเข้าถึงจะเรียกว่า "โทเค็น Bearer" ด้วย
$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \ http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282
ดูเพิ่มเติมที่การส่ง โทเค็นเพื่อการเข้าถึง