การใช้งานประเภทการให้สิทธิ์รหัสการให้สิทธิ์

คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่ เอกสารประกอบเกี่ยวกับ Apigee X.
ข้อมูล

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

เกี่ยวกับหัวข้อนี้

หัวข้อนี้นำเสนอคำอธิบายทั่วไปและภาพรวมของประเภทการให้สิทธิ์ OAuth 2.0 และกล่าวถึงวิธีใช้ขั้นตอนนี้ใน Apigee Edge

วิดีโอ

ดูวิดีโอสั้นๆ เพื่อเรียนรู้วิธีใช้ประเภทการให้สิทธิ์ OAuth 2.0 เพื่อรักษาความปลอดภัยให้ API ของคุณ

กรณีการใช้งาน

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

ตัวอย่างโค้ด

คุณสามารถดูตัวอย่างการใช้งานที่สมบูรณ์และใช้งานได้ของประเภทการให้สิทธิ์รหัสการให้สิทธิ์ใน Apigee Edge ในที่เก็บ api-platform-samples บน GitHub โปรดดูส่วน oauth-advanced ตัวอย่างในไดเรกทอรี api-platform-samples/sample-proxies โปรดดู README เพื่อดูรายละเอียดเกี่ยวกับตัวอย่าง

แผนผังโฟลว์

แผนภาพต่อไปนี้แสดงโฟลว์ OAuth ของรหัสการให้สิทธิ์ที่มี Apigee Edge ทำหน้าที่เป็นเซิร์ฟเวอร์การให้สิทธิ์

เคล็ดลับ: หากต้องการดูแผนภาพนี้ซึ่งมีขนาดใหญ่ขึ้น ให้คลิกขวาที่แล้วเปิดใน แท็บใหม่ หรือบันทึกและเปิดในโปรแกรมดูรูปภาพ

ขั้นตอนในขั้นตอนรหัสการให้สิทธิ์

ต่อไปนี้คือสรุปขั้นตอนที่จำเป็นในการใช้ประเภทการให้สิทธิ์รหัสการให้สิทธิ์ Apigee Edge ทำหน้าที่เป็นเซิร์ฟเวอร์การให้สิทธิ์ อย่าลืมว่าหัวใจสำคัญในกระบวนการนี้คือ ไคลเอ็นต์ จะไม่มีทางเห็นข้อมูลเข้าสู่ระบบของผู้ใช้ในเซิร์ฟเวอร์ทรัพยากร

สิ่งที่ต้องทำก่อน: ต้องลงทะเบียนแอปไคลเอ็นต์กับ Apigee Edge เพื่อทำสิ่งต่อไปนี้ รับรหัสไคลเอ็นต์และคีย์รหัสลับไคลเอ็นต์ โปรดดูที่การลงทะเบียนแอปไคลเอ็นต์สำหรับ รายละเอียด

1. ผู้ใช้เป็นผู้เริ่มขั้นตอน

เมื่อแอปต้องการเข้าถึงทรัพยากรที่ได้รับการปกป้องของผู้ใช้จากเซิร์ฟเวอร์ทรัพยากร (สำหรับ เช่น รายชื่อติดต่อในเว็บไซต์โซเชียลมีเดีย) แอปจะส่งการเรียก API ไปยัง Apigee Edge ซึ่ง ตรวจสอบ ID ของไคลเอ็นต์ ถ้ารหัสถูกต้อง จะเปลี่ยนเส้นทางเบราว์เซอร์ของผู้ใช้ไปยังหน้าเข้าสู่ระบบที่ ผู้ใช้จะป้อนข้อมูลเข้าสู่ระบบ การเรียก API มีข้อมูลที่แอปไคลเอ็นต์ ได้รับเมื่อลงทะเบียน: รหัสไคลเอ็นต์และ URI การเปลี่ยนเส้นทาง

2. ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบ

ตอนนี้ผู้ใช้จะเห็นหน้าเข้าสู่ระบบที่ระบบจะขอให้ผู้ใช้ป้อนข้อมูลเข้าสู่ระบบ หาก การเข้าสู่ระบบสำเร็จ เราจะไปยังขั้นตอนถัดไป

3. ผู้ใช้ให้ความยินยอม

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

4. แอปการเข้าสู่ระบบ ส่งคำขอ Apigee Edge

หากการเข้าสู่ระบบและความยินยอมสำเร็จ แอปการเข้าสู่ระบบจะ POST ข้อมูลไปยัง /Authorizationcode ปลายทางของ Apigee Edge ข้อมูลรวมถึง URI การเปลี่ยนเส้นทาง รหัสไคลเอ็นต์ ขอบเขต ที่เจาะจงผู้ใช้ ข้อมูลที่ต้องการรวมไว้ และบ่งชี้ว่าการเข้าสู่ระบบสำเร็จ

5. Apigee Edge สร้างรหัสการให้สิทธิ์

เมื่อ Edge ได้รับคำขอ GET จากแอปการเข้าสู่ระบบที่ปลายทาง /Authorizationcode อะไรๆ ก็เกิดขึ้นได้ ก่อนอื่น Edge จะพิจารณาว่าการเข้าสู่ระบบสำเร็จ (โดยตรวจสอบสถานะ HTTP หรือ วิธีอื่น) Edge ถัดไปจะตรวจสอบเพื่อให้แน่ใจว่า URI การเปลี่ยนเส้นทางที่ส่งจากแอปเข้าสู่ระบบ ตรงกับ URI การเปลี่ยนเส้นทางที่ระบุเมื่อลงทะเบียนแอปกับ Apigee Edge ถ้า ทุกอย่างเรียบร้อยดี Edge จะสร้างรหัสการให้สิทธิ์ เช่น

http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&redirect_uri={redirect_uri}&scope=scope1%20scope2&state={some_string}

6. ขอบ ส่งรหัสการให้สิทธิ์กลับไปยังไคลเอ็นต์

Edge ส่งการเปลี่ยนเส้นทาง 302 พร้อมรหัสการให้สิทธิ์แนบเป็นพารามิเตอร์การค้นหาไปยัง

7. ไคลเอ็นต์จะเรียกข้อมูลรหัสการให้สิทธิ์และขอรหัสการเข้าถึงจาก Edge

เมื่อมีรหัสการตรวจสอบสิทธิ์ที่ถูกต้องแล้ว ไคลเอ็นต์จะขอโทเค็นเพื่อการเข้าถึงจาก Edge ได้ ดำเนินการโดย การโพสต์รหัสไคลเอ็นต์และคีย์รหัสลับไคลเอ็นต์ (ได้มาเมื่อแอปลงทะเบียนใน Edge) ประเภทการให้สิทธิ์ และขอบเขต Apigee 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'

8. ลูกค้าได้รับ โทเค็นเพื่อการเข้าถึง

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

9. ลูกค้าเรียกใช้ 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 และสถานะ

$ 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 เพื่อรับรหัสการให้สิทธิ์เป็น GET และต้องใช้พารามิเตอร์การค้นหา client_id,response_type รวมทั้งขอบเขตและสถานะที่ไม่บังคับ ดังตัวอย่างต่อไปนี้

$curl http://myorg-test.apigee.net/oauth/authorizationcode?client_id={consumer_key}&response_type=code&scope=scope1%20scope2&state={some_string}

รับโทเค็นเพื่อการเข้าถึง

นโยบายนี้แนบอยู่กับเส้นทาง /oauth/accesstoken ซึ่งใช้ OAuthV2 นโยบายที่ระบุการดำเนินการ GenerateAccessCode ไว้ ในกรณีนี้ พารามิเตอร์ Grants_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, Grants_type=restriction_code และขอบเขต (ไม่บังคับ) เช่น

$ curl https://{org_name}-test.apigee.net/oauth/accesstoken?grant_type=authorization_code -X POST -d 'client_id=bBGAQrXgivA9lKu7NMPyoYpVKNhGar6K&client_secret=hAr4Gn0gA9vAyvI4'

นี่เป็นเพียงข้อมูลสรุปเบื้องต้น ตัวอย่างที่ใช้งานจริงมีนโยบายอื่นๆ อีกมากมายสำหรับการสร้าง URL เปลี่ยน และทำงานอื่นๆ ดูตัวอย่างใน GitHub สำหรับ ที่เสร็จสมบูรณ์ กำลังทำโปรเจ็กต์อยู่

การแนบนโยบายโทเค็นเพื่อการเข้าถึงสำหรับยืนยัน

แนบนโยบาย 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 คุณต้องแสดงการเข้าถึงที่ถูกต้อง โทเค็น รูปแบบที่ถูกต้องคือการรวมโทเค็นในส่วนหัวการให้สิทธิ์ ดังนี้ หมายเหตุ โทเค็นเพื่อการเข้าถึงมีชื่อเรียกอีกอย่างว่า "โทเค็นสำหรับผู้ถือ"

$ curl -H "Authorization: Bearer UAj2yiGAcMZGxfN2DhcUbl9v8WsR" \
  http://myorg-test.apigee.net/v0/weather/forecastrss?w=12797282 

โปรดดูเพิ่มเติมที่การส่ง โทเค็นเพื่อการเข้าถึง