การใช้งานประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์

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

เมื่อใช้ประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์ แอปจะส่งข้อมูลเข้าสู่ระบบของตนเอง (รหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์) ไปยังปลายทางใน Apigee Edge ที่ตั้งค่าไว้เพื่อสร้างโทเค็นเพื่อการเข้าถึง หากข้อมูลเข้าสู่ระบบถูกต้อง Edge จะส่งคืนโทเค็นเพื่อการเข้าถึงไปยังแอปไคลเอ็นต์

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

หัวข้อนี้จะอธิบายรายละเอียดทั่วไปเกี่ยวกับประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบไคลเอ็นต์ OAuth 2.0 และอธิบายวิธีใช้ขั้นตอนนี้ใน Apigee Edge

Use Case

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

บทบาท

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

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

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

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

แผนภาพโฟลว์

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


ขั้นตอนในกระบวนการข้อมูลเข้าสู่ระบบไคลเอ็นต์

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

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

1. ไคลเอ็นต์ขอโทเค็นเพื่อการเข้าถึง

หากต้องการรับโทเค็นเพื่อการเข้าถึง ไคลเอ็นต์จะโพสต์การเรียก API ไปยัง Edge ด้วยค่าสำหรับรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์ที่ได้รับจากแอปของนักพัฒนาซอฟต์แวร์ที่ลงทะเบียน นอกจากนี้ จะต้องส่งพารามิเตอร์ grants_type=client_credentials เป็นพารามิเตอร์การค้นหา (อย่างไรก็ตาม คุณกำหนดค่านโยบาย OAuthV2 ให้ยอมรับพารามิเตอร์นี้ในส่วนหัวของคำขอหรือเนื้อความได้ โปรดดูรายละเอียดในนโยบาย OAuthV2

เช่น

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials&client_id=ns4fQc14Zg4hKFCNaSzArVuwszX95X&client_secret=ZIjFyTsNgQNyxI'

หมายเหตุ: แม้ว่าคุณจะส่งค่า client_id และ client_secret เป็นพารามิเตอร์การค้นหาดังที่แสดงด้านบนได้ แต่การส่งค่าเหล่านี้เป็นสตริงที่เข้ารหัส URL ฐาน 64 ในส่วนหัวการให้สิทธิ์ หากต้องการเข้ารหัส คุณต้องใช้เครื่องมือเข้ารหัส base64 หรือยูทิลิตีเพื่อเข้ารหัสค่า 2 ค่าพร้อมกับใช้โคลอนคั่นระหว่างค่าทั้งสอง ดังนี้ aBase64EncodeFunction(clientidvalue:clientsecret) ดังนั้น ตัวอย่างด้านบนจะมีการเข้ารหัสดังนี้

results = aBase64EncodeFunction(ns4fQc14Zg4hKFCNaSzArVuwszX95X:ZIjFyTsNgQNyxI) // โปรดสังเกต เครื่องหมายโคลอนที่คั่น 2 ค่า

ผลลัพธ์ของการเข้ารหัส base64 สตริงข้างต้นคือ bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

จากนั้นสร้างคำขอโทเค็นดังนี้

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg=='

2. Edge จะตรวจสอบข้อมูลเข้าสู่ระบบ

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

3. Edge แสดงการตอบกลับ

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

4. ไคลเอ็นต์เรียก API ที่มีการป้องกัน

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

การกำหนดค่าโฟลว์และนโยบาย

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

การกำหนดค่าขั้นตอนที่กำหนดเอง

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

<Flows>
  <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>GetAccessToken</Name></Step>
    </Request>
  </Flow>
</Flows>

กำหนดค่าโฟลว์ด้วยนโยบาย

คุณต้องแนบนโยบายไว้กับปลายทางดังนี้ โปรดดูการกำหนดค่าปลายทางและนโยบาย OAuth สำหรับภาพรวมคร่าวๆ ของขั้นตอนที่จำเป็นในการเพิ่มนโยบาย OAuthV2 ไปยังปลายทางของพร็อกซี

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

นโยบายนี้แนบอยู่กับเส้นทาง /accesstoken ซึ่งใช้นโยบาย OAuthV2 ที่ระบุการดำเนินการ GenerateAccessToken ไว้

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>3600000</ExpiresIn>
  <SupportedGrantTypes>
    <GrantType>client_credentials</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse/>
</OAuthV2>

การเรียก API เพื่อรับโทเค็นเพื่อการเข้าถึงเป็นแบบ POST และมีส่วนหัวการให้สิทธิ์ที่มี client_id ที่เข้ารหัส base64 + client+secret และพารามิเตอร์การค้นหา Grants_type=client_credentials นอกจากนี้ยังสามารถรวมพารามิเตอร์ที่ไม่บังคับสำหรับขอบเขตและสถานะ เช่น

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' -X POST 'https://docs-test.apigee.net/oauth/accesstoken' -d 'grant_type=client_credentials' -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVgT1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ'

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

หากต้องการปกป้อง API ด้วยการรักษาความปลอดภัย OAuth 2.0 คุณต้องเพิ่มนโยบาย OAuthV2 ด้วยการดำเนินการ ConfirmAccessToken นโยบายนี้จะตรวจสอบว่าคำขอที่เข้ามาใหม่มีโทเค็นเพื่อการเข้าถึงที่ถูกต้อง หากโทเค็นถูกต้อง Edge จะดำเนินการตามคำขอ หากไม่ถูกต้อง 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 

โปรดดูหัวข้อการส่งโทเค็นเพื่อการเข้าถึง

แหล่งข้อมูลเพิ่มเติม

  • Apigee มีการฝึกอบรมออนไลน์สำหรับนักพัฒนา API ซึ่งรวมถึงหลักสูตรเกี่ยวกับความปลอดภัยของ API ซึ่งรวมไปถึง OAuth
  • นโยบาย OAuthV2 -- มีตัวอย่างจำนวนมากที่แสดงวิธีส่งคำขอไปยังเซิร์ฟเวอร์การให้สิทธิ์ และวิธีกำหนดค่านโยบาย OAuthV2