การใช้ OAuth2 เพื่อเข้าถึง Edge API

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

Apigee Edge ช่วยให้คุณทำการเรียก Edge API ที่มีการตรวจสอบสิทธิ์ด้วยโทเค็น OAuth2 ได้ การรองรับ OAuth2 จะเปิดใช้โดยค่าเริ่มต้นในบัญชี Edge for the Cloud หากคุณใช้ Edge สำหรับ Private Cloud คุณจะใช้ OAuth2 ไม่ได้หากไม่ได้ ตั้งค่า SAML หรือ LDAP ก่อน

วิธีทำงานของ OAuth2 (กับ Apigee Edge API)

การเรียก Apigee Edge API ต้องมีการตรวจสอบสิทธิ์เพื่อให้มั่นใจว่าคุณเป็นบุคคลที่คุณอ้างว่าเป็น ในการตรวจสอบสิทธิ์ คุณต้องส่งโทเค็นเพื่อการเข้าถึง OAuth2 ไปพร้อมกับคำขอเข้าถึง API

ตัวอย่างเช่น หากต้องการดูรายละเอียดเกี่ยวกับองค์กรใน Edge คุณจะต้องส่งคำขอไปยัง URL ที่มีลักษณะดังนี้

https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

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

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

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

ขั้นตอน OAuth2: คำขอเริ่มต้น

รูปภาพต่อไปนี้แสดงขั้นตอน OAuth2 เมื่อคุณเข้าถึง Edge API เป็นครั้งแรก

ขั้นตอน OAuth: คำขอแรก
รูปที่ 1: ขั้นตอน OAuth: คำขอแรก

เมื่อคุณส่งคำขอเริ่มต้นไปยัง Edge API สิ่งที่จะเกิดขึ้นมีดังนี้ (ตามที่แสดงในรูปที่ 1)

  1. คุณขอโทเค็นเพื่อการเข้าถึง คุณสามารถทำได้โดยใช้ Edge API, acurl, หรือ get_token เช่น
    get_token
    Enter username:
    ahamilton@apigee.com
    Enter the password for user 'ahamilton@apigee.com'
    [hidden input]
    Enter the six-digit code if 'ahamilton@apigee.com' is MFA enabled or press ENTER:
    123456
  2. บริการ Edge OAuth2 จะตอบกลับด้วยโทเค็นเพื่อการเข้าถึงและพิมพ์โทเค็นดังกล่าวไปยัง stdout; เช่น
    Dy42bGciOiJSUzI1NiJ9.eyJqdGkiOiJhM2YwNjA5ZC1lZTIxLTQ1YjAtOGQyMi04MTQ0MTYxNjNhNTMiLCJz
    AJpdGUiLCJhcHByb3ZhbHMubWUiLCJvYXV0aC5hcHByb3ZhbHMiXSwiY2xpZW50X2lkIjoiZWRnZWNsaSIsIm
    NjbGkiLCJhenAiOiJlZGdlY2xpIiwiZ3JhbnRfdHlwZSI6InBhc3N3b3JkIiwidXNlcl9pZCI6IjJkMWU3NDI
    GzQyMC1kYzgxLTQzMDQtOTM4ZS1hOGNmNmVlODZhNzkiLCJzY29wZSI6WyJzY2ltLm1lIiwib3BlbmlkIiwic
    ENC05MzhlLWE4Y2Y2ZWU4NmE3OSIsIm9yaWdpbiI6InVzZXJncmlkIiwidXNlcl9uYW1lIjoiZGFuZ2VyNDI0
    RI6ImUyNTM2NWQyIiwiaWF0IjoxNTI4OTE2NDA5LCJleHAiOjE1Mjg5MTgyMDksImlzcyI6Imh0dHBzOi8vbG
    420iLCJlbWFpbCI6ImRhbmdlcjQyNDJAeWFob28uY29tIiwiYXV0aF90aW1lIjoxNTI4OTE2NDA5LCJhbCI6M
    2lLmNvbSIsInppZCI6InVhYSIsImF1ZCI6WyJlZGdlY2xpIiwic2NpbSIsIm9wZW5pZCIsInBhc3N3b3JkIiw

    ยูทิลิตี acurl และ get_token จะบันทึกโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชไปยัง ~/.sso-cli โดยไม่แสดงข้อความใดๆ (ระบบจะไม่เขียนโทเค็นการรีเฟรชไปยัง stdout) หากคุณใช้บริการ Edge OAuth2 เพื่อรับโทเค็น คุณจะต้องบันทึกโทเค็นไว้ใช้เองในภายหลัง

  3. คุณส่งคำขอไปยัง Edge API พร้อมโทเค็นเพื่อการเข้าถึง acurl จะแนบ โทเค็นโดยอัตโนมัติ เช่น
    acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval

    หากคุณใช้ไคลเอ็นต์ HTTP อื่น โปรดตรวจสอบว่าได้เพิ่มโทเค็นเพื่อการเข้าถึงแล้ว เช่น

    curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
      -H "Authorization: Bearer ACCESS_TOKEN"
  4. Edge API จะดำเนินการตามคำขอและโดยปกติจะแสดงการตอบกลับพร้อมข้อมูล

ขั้นตอน OAuth2: คำขอต่อๆ ไป

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

ขั้นตอน OAuth: คำขอที่ตามมา
รูปที่ 2: ขั้นตอน OAuth: คำขอต่อๆ ไป

เมื่อคุณมีโทเค็นเพื่อการเข้าถึงอยู่แล้ว สิ่งที่จะเกิดขึ้นมีดังนี้ (ตามที่แสดงในรูปที่ 2)

  1. คุณส่งคำขอไปยัง Edge API พร้อมโทเค็นเพื่อการเข้าถึง acurl จะแนบโทเค็นโดยอัตโนมัติ หากคุณใช้เครื่องมืออื่นๆ คุณจะต้องเพิ่มโทเค็นด้วยตนเอง
  2. Edge API จะดำเนินการตามคำขอและโดยปกติจะแสดงการตอบกลับพร้อมข้อมูล

ขั้นตอน OAuth2: เมื่อโทเค็นเพื่อการเข้าถึงหมดอายุ

เมื่อโทเค็นเพื่อการเข้าถึงหมดอายุ (หลังจากผ่านไป 12 ชั่วโมง) คุณสามารถใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ได้

ขั้นตอน OAuth: การรีเฟรชโทเค็นเพื่อการเข้าถึง
รูปที่ 3: ขั้นตอน OAuth: การรีเฟรชโทเค็นเพื่อการเข้าถึง

เมื่อโทเค็นเพื่อการเข้าถึงหมดอายุ สิ่งที่จะเกิดขึ้นมีดังนี้ (ตามที่แสดงในรูปที่ 3)

  1. คุณส่งคำขอไปยัง Edge API แต่โทเค็นเพื่อการเข้าถึงหมดอายุแล้ว
  2. Edge API จะปฏิเสธคำขอเนื่องจากไม่มีสิทธิ์
  3. คุณส่งโทเค็นการรีเฟรชไปยังบริการ Edge OAuth2 หากคุณใช้ acurl ระบบจะดำเนินการนี้ให้คุณโดยอัตโนมัติ
  4. บริการ Edge OAuth2 จะตอบกลับด้วยโทเค็นเพื่อการเข้าถึงใหม่
  5. คุณส่งคำขอไปยัง Edge API พร้อมโทเค็นเพื่อการเข้าถึงใหม่
  6. Edge API จะดำเนินการตามคำขอและโดยปกติจะแสดงการตอบกลับพร้อมข้อมูล

รับโทเค็น

หากต้องการรับโทเค็นเพื่อการเข้าถึงที่จะส่งไปยัง Edge API คุณสามารถใช้ยูทิลิตีต่อไปนี้ของ Apigee นอกเหนือจากยูทิลิตีอย่างเช่น curl

  • ยูทิลิตี get_token: แลกข้อมูลเข้าสู่ระบบ Apigee เป็นโทเค็นเพื่อการเข้าถึง และโทเค็นการรีเฟรชที่คุณใช้เรียก Edge API ได้
  • ยูทิลิตี acurl: มี Wrapper ที่สะดวกสำหรับการเรียกใช้คำสั่งมาตรฐาน curl สร้างคำขอ HTTP ไปยัง Edge API, รับโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชจาก get_token และส่งโทเค็นเพื่อการเข้าถึงไปยัง the Edge API
  • ปลายทางของโทเค็นในบริการ Edge OAuth2: แลก ข้อมูลเข้าสู่ระบบ Apigee เป็นโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชผ่านการเรียก Edge API

ยูทิลิตีเหล่านี้จะแลกข้อมูลเข้าสู่ระบบบัญชี Apigee (อีเมลและ รหัสผ่าน) เป็นโทเค็นที่มีระยะเวลาดังนี้

  • โทเค็นเพื่อการเข้าถึงจะหมดอายุใน 12 ชั่วโมง
  • โทเค็นการรีเฟรชจะหมดอายุใน 30 วัน

ด้วยเหตุนี้ เมื่อคุณทำการเรียก API ด้วย acurl หรือ get_token, สำเร็จแล้ว คุณจะใช้โทเค็นทั้ง 2 รายการต่อไปได้เป็นเวลา 30 วัน หลังจากโทเค็นหมดอายุ คุณต้องป้อนข้อมูลเข้าสู่ระบบของคุณ อีกครั้งและรับโทเค็นใหม่

เข้าถึง Edge API ด้วย OAuth2

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

การเข้าถึง Edge API ด้วย acurl และ curl มีอธิบายไว้ใน ส่วนต่อไปนี้

ใช้ acurl

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

ในคำขอต่อๆ ไป acurl จะใช้โทเค็นที่บันทึกไว้ใน ~/.sso-cli เพื่อให้คุณไม่ต้องใส่ข้อมูลเข้าสู่ระบบอีกจนกว่าโทเค็นจะหมดอายุ

ตัวอย่างต่อไปนี้แสดงคำขอ acurl เริ่มต้นที่รับรายละเอียดสำหรับ "ahamilton-eval" องค์กร:

acurl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -u ahamilton@apigee.com
Enter the password for user 'ahamilton@apigee.com'
[hidden input]
Enter the six-digit code (no spaces) if 'ahamilton@apigee.com' is MFA-enabled or press ENTER:
1a2b3c
{
  "createdAt" : 1491854501264,
  "createdBy" : "noreply_iops@apigee.com",
  "displayName" : "ahamilton",
  "environments" : [ "prod", "test" ],
  "lastModifiedAt" : 1491854501264,
  "lastModifiedBy" : "noreply_iops@apigee.com",
  "name" : "ahamilton",
  "properties" : {
    "property" : [ {
      "name" : "features.isSmbOrganization",
      "value" : "false"
    }, {
      "name" : "features.isCpsEnabled",
      "value" : "true"
    } ]
  },
  "type" : "trial"
}

acurl https://api.enterprise.apigee.com/v1/o/ahamilton-eval/apis/helloworld/revisions/1/policies

[ "SOAP-Message-Validation-1", "Spike-Arrest-1", "XML-to-JSON-1" ]

นอกเหนือจากการรับรายละเอียดเกี่ยวกับองค์กรแล้ว ตัวอย่างนี้ยังแสดงคำขอที่ 2 ที่รับรายการนโยบายภายในพร็อกซี API "helloworld" คำขอที่ 2 ใช้ตัวย่อ "o" สำหรับ "organizations" ใน URL

โปรดทราบว่า acurl จะส่งโทเค็นเพื่อการเข้าถึงในคำขอที่ 2 โดยอัตโนมัติ คุณไม่จำเป็นต้องส่งข้อมูลเข้าสู่ระบบของผู้ใช้เมื่อ acurl จัดเก็บโทเค็น OAuth2 แล้ว โดยจะรับโทเค็นจาก ~/.sso-cli สำหรับการเรียกต่อๆ ไป

ดูข้อมูลเพิ่มเติมได้ที่ การใช้ acurl เพื่อเข้าถึง Edge API

ใช้ curl

คุณสามารถใช้ curl เพื่อเข้าถึง Edge API ได้ โดยคุณต้องรับโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรชก่อน คุณสามารถรับโทเค็นเหล่านี้ได้โดยใช้ยูทิลิตี เช่น get_token หรือ บริการ Edge OAuth2

หลังจากบันทึกโทเค็นเพื่อการเข้าถึงเรียบร้อยแล้ว ให้ส่งโทเค็นดังกล่าวในส่วนหัว Authorization ของการเรียก Edge API ดังที่แสดงในตัวอย่างต่อไปนี้

curl https://api.enterprise.apigee.com/v1/organizations/ahamilton-eval \
  -H "Authorization: Bearer ACCESS_TOKEN"

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

การหมดอายุของโทเค็น

เมื่อโทเค็นเพื่อการเข้าถึงหมดอายุแล้ว คุณสามารถใช้โทเค็นการรีเฟรชเพื่อรับโทเค็นเพื่อการเข้าถึงใหม่ได้โดยไม่ต้อง ส่งข้อมูลเข้าสู่ระบบอีกครั้ง

วิธีรีเฟรชโทเค็นเพื่อการเข้าถึงจะขึ้นอยู่กับเครื่องมือที่คุณใช้ ดังนี้

  • acurl: ไม่จำเป็นต้องดำเนินการใดๆ acurl จะรีเฟรชโทเค็นเพื่อการเข้าถึงโดยอัตโนมัติ เมื่อคุณส่งคำขอที่มีโทเค็นที่ล้าสมัย
  • get_token: เรียก get_token เพื่อรีเฟรชโทเค็นเพื่อการเข้าถึง
  • บริการ Edge OAuth2: ส่งคำขอที่มีข้อมูลต่อไปนี้
    • โทเค็นการรีเฟรช
    • พารามิเตอร์แบบฟอร์ม grant_type ที่ตั้งค่าเป็น "refresh_token"

OAuth2 สำหรับผู้ใช้ที่เป็นเครื่อง

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

  USER=me@example.com
  PASS=not-that-secret
  TOKEN=$(get_token -u $USER:$PASS -m '')
  curl -H "Authorization: Bearer $TOKEN" 'https://api.enterprise.apigee.com/v1/organizations/...'

หรือคุณจะรวมคำขอโทเค็นและการเรียก curl เข้าด้วยกันโดยใช้ยูทิลิตี acurl ก็ได้ เช่น

  USER=me@example.com
  PASS=not-that-secret
  acurl -u $USER:$PASS -m '' 'https://api.enterprise.apigee.com/v1/organizations/...'
  

ในทั้ง 2 ตัวอย่าง การตั้งค่า -m เป็นสตริงว่างจะป้องกันไม่ให้ผู้ใช้ที่เป็นเครื่อง ถูกแจ้งให้ป้อนรหัส MFA