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

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

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

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

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

ตัวอย่างที่อาจเป็นประโยชน์กับคุณ

  • การขอโทเค็นเพื่อการเข้าถึง: ประเภทการให้สิทธิ์รหัสผ่าน: แสดงวิธีส่งคำขอโทเค็น กำหนดค่านโยบาย OAuthV2 สำหรับประเภทการให้สิทธิ์รหัสผ่าน และวิธีกำหนดค่าปลายทางสำหรับนโยบายใน Edge
  • oauth-auth-key-secret: ตัวอย่างพร็อกซีใน GitHub ที่นำไปใช้กับ Edge ได้และนำไปลองใช้ได้ ต่อไปนี้เป็นตัวอย่างจากต้นทางถึงปลายทางที่แสดงประเภทการให้สิทธิ์รหัสผ่าน โดยจะแสดงแนวทางปฏิบัติแนะนำ ซึ่งก็คือการตรวจสอบสิทธิ์ข้อมูลเข้าสู่ระบบของแอปไคลเอ็นต์ (คีย์/ข้อมูลลับ) ก่อนที่จะส่งข้อมูลเข้าสู่ระบบของผู้ใช้ไปยังผู้ให้บริการข้อมูลประจำตัว

วิดีโอ

วิดีโอ: ดูวิดีโอนี้เกี่ยวกับการใช้งานประเภทการให้สิทธิ์รหัสผ่าน

Use Case

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

แผนภาพโฟลว์

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

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

ขั้นตอนในขั้นตอนประเภทการให้สิทธิ์รหัสผ่าน

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

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

1. ผู้ใช้เริ่มขั้นตอนและป้อนข้อมูลเข้าสู่ระบบ

เมื่อแอปต้องการเข้าถึงทรัพยากรที่มีการป้องกันของผู้ใช้ (เช่น ผู้ใช้คลิกปุ่มในแอป) ระบบจะเปลี่ยนเส้นทางผู้ใช้ไปยังแบบฟอร์มการเข้าสู่ระบบ

2. แอปขอโทเค็นเพื่อการเข้าถึงจาก Apigee Edge

แอปจะส่งคำขอโทเค็นเพื่อการเข้าถึง รวมถึงข้อมูลเข้าสู่ระบบของผู้ใช้ไปยังปลายทาง GenerateAccessToken ใน Apigee Edge

ตัวอย่างคำขอ POST ที่มีพารามิเตอร์ที่จำเป็นสำหรับการให้สิทธิ์ประเภทนี้มีดังนี้

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAySVg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

หรืออาจดำเนินการคำสั่งต่อไปนี้โดยใช้ตัวเลือก -u เพื่อ Curl เพื่อสร้างส่วนหัวการตรวจสอบสิทธิ์พื้นฐานที่เข้ารหัส base64 ให้คุณ

$ curl -i \
  -X POST \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -u sqH8ooHexTz8C02IX9ORo6rhgq1iSrAl:Z4ljtJdneBOjPMAU \
  -d 'grant_type=password&username=the-user-name&password=the-users-password' \
  https://docs-test.apigee.net/oauth/token

(แต่ละคำสั่งควรอยู่ในบรรทัดเดียว)

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

3. Edge ตรวจสอบแอปไคลเอ็นต์

ก่อนส่งชื่อผู้ใช้และรหัสผ่านของผู้ใช้ไปยังผู้ให้บริการข้อมูลประจำตัว Edge จำเป็นต้องทราบว่าแอปไคลเอ็นต์ที่ส่งคำขอเป็นแอปที่ถูกต้องและเชื่อถือได้ วิธีหนึ่งที่ทำได้คือการใช้การตรวจสอบสิทธิ์คีย์ API ในการเรียก API ในบางกรณี คุณอาจต้องตรวจสอบทั้งคีย์และรหัสลับไคลเอ็นต์ มีพร็อกซีตัวอย่างที่แสดงเทคนิค allternate นี้ใน ที่เก็บ api-platform-sample ใน GitHub

4. Edge จะประมวลผลข้อมูลเข้าสู่ระบบ

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

หากบริการ Identity ตรวจสอบข้อมูลเข้าสู่ระบบและแสดงผลการตอบกลับ 200 แล้ว Edge จะดำเนินการตามคำขอต่อไป มิฉะนั้น Edge จะหยุดประมวลผลและแสดงข้อผิดพลาดไปยังแอปไคลเอ็นต์

5. นโยบาย OAuthV2 ดำเนินการ

หากข้อมูลเข้าสู่ระบบถูกต้อง ขั้นตอนการประมวลผลถัดไปคือการรันนโยบาย OAuthV2 ที่กำหนดค่าไว้สำหรับประเภทการให้สิทธิ์รหัสผ่าน ดังตัวอย่างต่อไปนี้ ต้องมีองค์ประกอบ <UserName> และ <PassWord> และคุณจะเรียกข้อมูลองค์ประกอบเหล่านี้จากตัวแปรโฟลว์ที่บันทึกด้วยนโยบาย ExtractVariable ได้ ดูข้อมูลอ้างอิงโดยละเอียดเกี่ยวกับนโยบายนี้ได้ที่นโยบาย OAuthV2

<OAuthV2 name="GetAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>360000000</ExpiresIn> 
  <SupportedGrantTypes> 
     <GrantType>password</GrantType> 
  </SupportedGrantTypes> 
  <GrantType>request.queryparam.grant_type</GrantType> 
  <UserName>login</UserName>
  <PassWord>password</PassWord>
  <GenerateResponse/> 
</OAuthV2>

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

{
    "issued_at": "1420258685042",
    "scope": "READ",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "refresh_token_issued_at": "1420258685042",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799",
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "refresh_token": "IFl7jlijYuexu6XVSSjLMJq8SVXGOAAq",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "I6daIgMSiUgYX1K2qgQWPi37ztS6",
    "organization_name": "docs",
    "refresh_token_expires_in": "0",
    "refresh_count": "0"
}

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

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

$ curl -H "Authorization: Bearer I6daIgMSiUgYX1K2qgQWPi37ztS6
" http://{org_name}-test.apigee.net/weather/forecastrss?w=12797282