การขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์

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

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

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

เพื่อความสะดวกของคุณ เราได้แสดงนโยบายและปลายทางที่กล่าวถึงในหัวข้อนี้ใน GitHub ในโปรเจ็กต์ oauth-doc-examples ในที่เก็บ Apigee api-platform-ตัวอย่าง คุณสามารถปรับใช้โค้ดตัวอย่างและลอง คำขอตัวอย่างที่แสดงในหัวข้อนี้ ดูรายละเอียดจากโปรเจ็กต์ README

การส่งคำขอโทเค็นเพื่อการเข้าถึง ประเภทการให้สิทธิ์รหัสการให้สิทธิ์

ส่วนนี้อธิบายวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้ประเภทการให้สิทธิ์รหัสการให้สิทธิ์ โปรดดูข้อมูลเบื้องต้นเกี่ยวกับประเภทการให้สิทธิ์ OAuth 2.0 ที่หัวข้อข้อมูลเบื้องต้นเกี่ยวกับ OAuth 2.0

ตัวอย่าง ส่งคำขอ

$ curl -i -H 'Content-Type: application/x-www-form-urlencoded' \
   -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
   -X POST 'https://docs-test.apigee.net/oauth/accesstoken' \
   -d 'code=I9dMGHAN&grant_type=authorization_code&redirect_uri=http://example-callback.com'

ต้องระบุ พารามิเตอร์

โดยค่าเริ่มต้น พารามิเตอร์เหล่านี้ต้องเป็น x-www-form-urlencoded และระบุไว้ใน เนื้อหาคำขอ (ดังที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้ กำลังกำหนดค่า <GrantType>, <Code> และ <RedirectUri> องค์ประกอบในนโยบาย OAuthV2 ที่แนบมากับข้อความนี้ ปลายทาง /accesstoken โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

  • grant_type - ต้องตั้งค่าเป็นค่า authorization_code
  • code - รหัสการให้สิทธิ์ที่ได้รับจาก /authorize ปลายทาง (หรือตั้งชื่อตามที่คุณเลือก) วิธีขอโทเค็นเพื่อการเข้าถึงในการให้สิทธิ์ ขั้นตอนประเภทการให้สิทธิ์รหัส คุณต้องได้รับรหัสการให้สิทธิ์ก่อน โปรดดูหัวข้อการขอรหัสการให้สิทธิ์ด้านล่าง โปรดดูเพิ่มเติมที่การใช้งาน ประเภทการให้สิทธิ์รหัสการให้สิทธิ์
  • redirect_uri - คุณต้องระบุพารามิเตอร์นี้หากพารามิเตอร์ พารามิเตอร์ redirect_uri รวมอยู่ในคำขอรหัสการให้สิทธิ์ก่อนหน้า ถ้า พารามิเตอร์ redirect_uri ไม่รวมอยู่ในคำขอรหัสการให้สิทธิ์ และ หากคุณไม่ได้ระบุพารามิเตอร์นี้ นโยบายนี้จะใช้ค่าของ URL เรียกกลับที่ ให้ไว้เมื่อลงทะเบียนแอปของนักพัฒนาซอฟต์แวร์

ไม่บังคับ พารามิเตอร์

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

การตรวจสอบสิทธิ์

คุณต้องส่งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เป็นส่วนหัวการตรวจสอบสิทธิ์พื้นฐานอย่างใดอย่างหนึ่ง (เข้ารหัส Base64) หรือเป็นพารามิเตอร์แบบฟอร์ม client_id และ client_secret คุณ รับค่าเหล่านี้จากแอปนักพัฒนาซอฟต์แวร์ที่ลงทะเบียน โปรดดูเพิ่มเติมที่ "การเข้ารหัสพื้นฐาน ข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์"

ปลายทางตัวอย่าง

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

...
       <Flow name="generate-access-token">
            <Description>Generate a token</Description>
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

นโยบายตัวอย่าง

นี่เป็นนโยบาย GenerateAccessToken พื้นฐานที่กำหนดค่าให้ยอมรับ ประเภทการให้สิทธิ์ authorization_code สำหรับข้อมูลเกี่ยวกับองค์ประกอบการกำหนดค่าที่ไม่บังคับ ซึ่งจะกำหนดค่าด้วยนโยบายนี้ได้ที่หัวข้อนโยบาย OAuthV2

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn>
    <RefreshTokenExpiresIn>86400000</RefreshTokenExpiresIn>
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผลการตอบสนอง JSON ที่ จะมีโทเค็นเพื่อการเข้าถึงดังที่แสดงด้านล่าง ประเภทการให้สิทธิ์ authorization_code จะสร้าง โทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช ดังนั้นการตอบกลับอาจมีลักษณะดังนี้

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

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

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

เช่น

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

กำลังส่งคำขอโทเค็นเพื่อการเข้าถึง: ไคลเอ็นต์ ประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบ

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

ตัวอย่าง ส่งคำขอ

สำหรับข้อมูลเกี่ยวกับการเข้ารหัสส่วนหัวการตรวจสอบสิทธิ์ขั้นพื้นฐานในการเรียกต่อไปนี้ โปรดดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน"

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

ต้องระบุ พารามิเตอร์

โดยค่าเริ่มต้น พารามิเตอร์ Grants_type ที่จำเป็นต้องเป็น x-www-form-urlencoded และ ที่ระบุไว้ในเนื้อหาคำขอ (ดังที่แสดงในตัวอย่างด้านบน) แต่ก็สามารถเปลี่ยน ค่าเริ่มต้นนี้โดยการกำหนดค่าองค์ประกอบ <GrantType> ในนโยบาย OAuthV2 ที่ แนบอยู่กับปลายทาง /accesstoken นี้ ตัวอย่างเช่น คุณสามารถเลือกให้ผ่าน ในพารามิเตอร์การค้นหา โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

  • grant_type - ต้องตั้งค่าเป็นค่า client_credentials

ไม่บังคับ พารามิเตอร์

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

การตรวจสอบสิทธิ์

คุณต้องส่งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เป็นส่วนหัวการตรวจสอบสิทธิ์พื้นฐานอย่างใดอย่างหนึ่ง (Base64-encoded) หรือเป็นพารามิเตอร์แบบฟอร์ม client_id และ client_secret คุณรับค่าเหล่านี้จากแอปนักพัฒนาแอปที่ลงทะเบียนไว้ ที่เชื่อมโยงกับคำขอ โปรดดูเพิ่มเติม "การเข้ารหัสการตรวจสอบสิทธิ์พื้นฐาน ข้อมูลเข้าสู่ระบบ"

ปลายทางตัวอย่าง

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

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

นโยบายตัวอย่าง

นี่เป็นนโยบาย GenerateAccessToken พื้นฐานที่กำหนดค่าให้ยอมรับ ประเภทการให้สิทธิ์ client_credentials สำหรับข้อมูลเกี่ยวกับองค์ประกอบการกำหนดค่าที่ไม่บังคับ ซึ่งจะกำหนดค่าด้วยนโยบายนี้ได้ที่หัวข้อนโยบาย OAuthV2

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <SupportedGrantTypes>
      <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผลการตอบสนอง JSON หมายเหตุ ประเภทการให้สิทธิ์ client_credentials จะไม่รองรับโทเค็นการรีเฟรช เฉพาะ มีการสร้างโทเค็นเพื่อการเข้าถึง เช่น

{
    "issued_at": "1420260525643",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "organization_id": "0",
    "token_type": "BearerToken",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "XkhU2DFnMGIVL2hvsRHLM00hRWav",
    "organization_name": "docs"
}

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

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in //--in seconds

เช่น

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in     //--in seconds

การขอโทเค็นเพื่อการเข้าถึง: ประเภทการให้สิทธิ์รหัสผ่าน

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

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

ตัวอย่าง ส่งคำขอ

สำหรับข้อมูลเกี่ยวกับการเข้ารหัสส่วนหัวการตรวจสอบสิทธิ์ขั้นพื้นฐานในการเรียกต่อไปนี้ โปรดดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน"

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

ต้องระบุ พารามิเตอร์

โดยค่าเริ่มต้น พารามิเตอร์เหล่านี้ต้องเป็น x-www-form-urlencoded และระบุไว้ใน เนื้อหาคำขอ (ดังที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้ กำลังกำหนดค่า <GrantType>, <Username> และ <Password> องค์ประกอบในนโยบาย OAuthV2 ที่แนบมากับข้อความนี้ ปลายทาง /token โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

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

  • grant_type - ต้องตั้งค่าเป็นค่า password
  • ชื่อผู้ใช้ - ชื่อผู้ใช้ของเจ้าของทรัพยากร
  • password - รหัสผ่านของเจ้าของทรัพยากร

ไม่บังคับ พารามิเตอร์

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

การตรวจสอบสิทธิ์

คุณต้องส่งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เป็นส่วนหัวการตรวจสอบสิทธิ์พื้นฐานอย่างใดอย่างหนึ่ง (Base64-encoded) หรือเป็นพารามิเตอร์แบบฟอร์ม client_id และ client_secret คุณรับค่าเหล่านี้จากแอปนักพัฒนาแอปที่ลงทะเบียนไว้ ที่เชื่อมโยงกับคำขอ โปรดดูเพิ่มเติม "การเข้ารหัสการตรวจสอบสิทธิ์พื้นฐาน ข้อมูลเข้าสู่ระบบ"

ปลายทางตัวอย่าง

ตัวอย่างการกำหนดค่าปลายทางสำหรับการสร้างโทเค็นเพื่อการเข้าถึงมีดังนี้ โดยจะเรียกใช้ นโยบาย GenerateAccessToken ซึ่งต้องกำหนดค่าเพื่อรองรับประเภทการให้รหัสผ่าน

...
       <Flow name="generate-access-token">
            <Request>
                <Step>
                    <Name>GenerateAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/token") and (request.verb = "POST")</Condition>
        </Flow>
...

นโยบายตัวอย่าง

นี่เป็นนโยบาย GenerateAccessToken พื้นฐานที่กำหนดค่าให้ยอมรับการให้สิทธิ์รหัสผ่าน ประเภท สำหรับข้อมูลเกี่ยวกับองค์ประกอบการกำหนดค่าที่ไม่บังคับซึ่งคุณกำหนดค่าด้วยนโยบายนี้ได้ โปรดดูนโยบาย OAuthV2

<OAuthV2 name="GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
    <SupportedGrantTypes>
      <GrantType>password</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผลการตอบสนอง JSON หมายเหตุ ว่าด้วยประเภทการให้สิทธิ์รหัสผ่าน จะมีการสร้างทั้งโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช สำหรับ ตัวอย่าง:

{
    "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", //--in seconds
    "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": "28799", //--in seconds
    "refresh_count": "0"
}

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

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

เช่น

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token
oauthv2accesstoken.GenerateAccessToken.refresh_token_expires_in
oauthv2accesstoken.GenerateAccessToken.refresh_token_issued_at
oauthv2accesstoken.GenerateAccessToken.refresh_token_status

การส่งคำขอโทเค็นการเข้าถึง: การให้สิทธิ์โดยนัย ประเภท

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

ตัวอย่าง ส่งคำขอ

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'https://docs-test.apigee.net/oauth/implicit?response_type=token&client_id=ABC123&redirect_uri=http://callback-example.com'

ต้องระบุ พารามิเตอร์

โดยค่าเริ่มต้น พารามิเตอร์เหล่านี้ต้องเป็นพารามิเตอร์การค้นหา (ดังที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม คุณเปลี่ยนค่าเริ่มต้นนี้ได้โดยการกำหนดค่า <ResponseType> องค์ประกอบ <ClientId> และ <RedirectUri> ใน OAuthV2 นโยบายที่แนบมากับปลายทาง /token นี้ โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

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

  • response_type - ต้องตั้งค่าเป็น token
  • client_id - รหัสไคลเอ็นต์ของแอปนักพัฒนาซอฟต์แวร์ที่ลงทะเบียน
  • redirect_uri - จำเป็นต้องมีพารามิเตอร์นี้หากไม่ได้ URI ของ Callback ระบุเมื่อลงทะเบียนแอปนักพัฒนาซอฟต์แวร์ของไคลเอ็นต์ หากมีการให้ URL เรียกกลับที่ไคลเอ็นต์ การลงทะเบียน ระบบจะเปรียบเทียบกับค่านี้และต้องตรงกันทั้งหมด

ไม่บังคับ พารามิเตอร์

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

การตรวจสอบสิทธิ์

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

ปลายทางตัวอย่าง

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

...
       <Flow name="generate-access-token-implicit">
            <Request>
                <Step>
                    <Name>GenerateAccessTokenImplicitGrant</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/implicit") and (request.verb = "POST")</Condition>
        </Flow>
...

นโยบายตัวอย่าง

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="GenerateAccessTokenImplicit">
    <DisplayName>GenerateAccessTokenImplicit</DisplayName>
    <Operation>GenerateAccessTokenImplicitGrant</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผลการเปลี่ยนเส้นทางตำแหน่ง 302 ในส่วนหัวการตอบกลับ การเปลี่ยนเส้นทางชี้ไปที่ URL ที่ระบุใน redirect_uri และต่อท้ายโทเค็นเพื่อการเข้าถึงและเวลาหมดอายุของโทเค็น โปรดทราบว่าการแสดงออกโดยปริยาย ประเภทการให้สิทธิ์ไม่รองรับโทเค็นการรีเฟรช เช่น

https://callback-example.com#expires_in=1799&access_token=In4dKm4ueoGZRbIYJhC9yZCmTFw5

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

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in  //--in seconds

เช่น

oauthv2accesstoken.GenerateAccessToken.access_token
oauthv2accesstoken.GenerateAccessToken.expires_in   //--in seconds

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

หากใช้ขั้นตอนประเภทการให้สิทธิ์รหัสการให้สิทธิ์ คุณจะต้องขอรับการให้สิทธิ์ ก่อนที่คุณจะสามารถขอโทเค็นเพื่อการเข้าถึง

ตัวอย่างคำขอ

$ curl -X POST -H 'Content-Type: application/x-www-form-urlencoded' \
  'http://myorg-test.apigee.net/oauth/authorize?client_id={consumer_key}&response_type=code'

โดยมีการแนบนโยบาย OAuthV2 GenerateAuthorizationCode ไว้ที่ ปลายทางของพร็อกซี /oauth/authorize (ดูตัวอย่างปลายทางด้านล่าง)

ต้องระบุ พารามิเตอร์

โดยค่าเริ่มต้น พารามิเตอร์เหล่านี้ต้องเป็นพารามิเตอร์การค้นหา (ดังที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม คุณเปลี่ยนค่าเริ่มต้นนี้ได้โดยการกำหนดค่า <ResponseType> องค์ประกอบ <ClientId> และ <RedirectUri> ใน OAuthV2 นโยบายที่แนบมากับปลายทาง /authorize นี้ โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

  • response_type - ต้องตั้งค่าเป็น code
  • client_id - รหัสไคลเอ็นต์ของแอปนักพัฒนาซอฟต์แวร์ที่ลงทะเบียน

ไม่บังคับ พารามิเตอร์

  • redirect_uri - หากระบุ URI ของ Callback แบบเต็ม (ไม่ใช่บางส่วน) ใน พารามิเตอร์นี้จะระบุหรือไม่ก็ได้ หรือไม่เช่นนั้น คุณจำเป็นต้องใช้ การติดต่อกลับ คือ URL ที่ Edge ส่งรหัสการตรวจสอบสิทธิ์ที่สร้างใหม่ โปรดดูหัวข้อลงทะเบียนแอปและจัดการ API
  • state - สตริงที่จะส่งกลับมาพร้อมกับการตอบกลับ ใช้โดยทั่วไป เพื่อป้องกันการโจมตีโดยการปลอมแปลงคำขอแบบข้ามเว็บไซต์
  • ขอบเขต - ช่วยให้คุณสามารถกรองรายการผลิตภัณฑ์ API ที่มี สร้างโดยใช้โทเค็นมินต์ โปรดดูข้อมูลโดยละเอียดเกี่ยวกับขอบเขตที่หัวข้อการใช้งานขอบเขต OAuth2

การตรวจสอบสิทธิ์

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

ปลายทางตัวอย่าง

ตัวอย่างการกำหนดค่าปลายทางสำหรับการสร้างรหัสการให้สิทธิ์มีดังนี้


<OAuthV2 name="GenerateAuthorizationCode">
  <Operation>GenerateAuthorizationCode</Operation>
    <!--
    ExpiresIn, in milliseconds. The ref is optional. The explicitly specified
    value is the default, when the variable reference cannot be resolved.
        60000 = 1 minute
       120000 = 2 minutes
    -->
  <ExpiresIn>60000</ExpiresIn>
  <GenerateResponse enabled="true"/>
</OAuthV2>

นโยบายตัวอย่าง

นี่เป็นนโยบาย GenerateAuthorizationCode พื้นฐาน สำหรับข้อมูลเกี่ยวกับการกำหนดค่าที่ไม่บังคับ องค์ประกอบที่คุณจะกำหนดค่าด้วยนโยบายนี้ได้ที่หัวข้อนโยบาย OAuthV2

<OAuthV2 name="GenerateAuthorizationCode">
    <Operation>GenerateAuthorizationCode</Operation>
    <GenerateResponse enabled="true"/>
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผล ?code พารามิเตอร์การค้นหาไปยังตำแหน่ง redirect_uri (Callback URI) ที่มีการให้สิทธิ์ แนบรหัสแล้ว โดยจะส่งผ่านการเปลี่ยนเส้นทางเบราว์เซอร์ 302 ที่มี URL ในส่วนหัวตำแหน่งของ คำตอบ เช่น ?code=123456

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

oauthv2authcode.{policy-name}.code
oauthv2authcode.{policy-name}.scope
oauthv2authcode.{policy-name}.redirect_uri
oauthv2authcode.{policy-name}.client_id

เช่น

oauthv2authcode.GenerateAuthorizationCode.code
oauthv2authcode.GenerateAuthorizationCode.scope
oauthv2authcode.GenerateAuthorizationCode.redirect_uri
oauthv2authcode.GenerateAuthorizationCode.client_id

การรีเฟรชโทเค็นเพื่อการเข้าถึง

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

วิธีขอโทเค็นเพื่อการเข้าถึงใหม่โดยใช้โทเค็นการรีเฟรช

ตัวอย่างคำขอ

สำหรับข้อมูลเกี่ยวกับการเข้ารหัสส่วนหัวการตรวจสอบสิทธิ์ขั้นพื้นฐานในการเรียกต่อไปนี้ โปรดดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน"

$ curl -X POST \
  -H "Content-type: application/x-www-form-urlencoded" \
  -H 'Authorization: Basic c3FIOG9vSGV4VHo4QzAyg5T1JvNnJoZ3ExaVNyQWw6WjRsanRKZG5lQk9qUE1BVQ' \
  https://myorg-test.apigee.net/my_oauth_endpoint/refresh_accesstoken \
  -d 'grant_type=refresh_token&refresh_token=my-refresh-token'

พารามิเตอร์ที่จำเป็น

  • grant_type - ต้องตั้งค่าเป็นค่า refresh_token
  • refresh_token - โทเค็นการรีเฟรชที่เชื่อมโยงกับโทเค็นเพื่อการเข้าถึงที่คุณ ต้องการต่ออายุ

โดยค่าเริ่มต้น นโยบายจะมองหารายการเหล่านี้เป็นพารามิเตอร์ x-www-form-urlencoded ที่ระบุไว้ในเนื้อหาคำขอ ดังที่แสดงในตัวอย่างด้านบน วิธีกำหนดค่าตำแหน่งสำรอง สำหรับอินพุตเหล่านี้ คุณสามารถใช้ <GrantType> และ <RefreshToken> ในนโยบาย OAuthV2 โปรดดูรายละเอียดที่หัวข้อนโยบาย OAuthV2

พารามิเตอร์ที่ไม่บังคับ

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

การตรวจสอบสิทธิ์

  • client_id
  • client_secret

คุณต้องส่งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เป็นส่วนหัวการตรวจสอบสิทธิ์พื้นฐานอย่างใดอย่างหนึ่ง (เข้ารหัส Base64) หรือเป็นพารามิเตอร์แบบฟอร์ม client_id และ client_secret โปรดดู "การเข้ารหัสข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน" เพิ่มเติม

เมื่อรีเฟรชโทเค็นเพื่อการเข้าถึง จะไม่มีการตรวจสอบสิทธิ์ผู้ใช้อีกครั้ง

ตัวอย่างการกำหนดค่าปลายทางสำหรับการสร้างโทเค็นเพื่อการเข้าถึงโดยใช้โทเค็นการรีเฟรชมีดังนี้ ซึ่งจะใช้นโยบาย RefreshAccessToken

 ...
       <Flow name="generate-refresh-token">
            <Request>
                <Step>
                    <Name>RefreshAccessToken</Name>
                </Step>
            </Request>
            <Response/>
            <Condition>(proxy.pathsuffix MatchesPath "/refresh") and (request.verb = "POST")</Condition>
       </Flow>
...

นโยบายตัวอย่าง

นี่เป็นนโยบาย RefreshAccessToken พื้นฐานที่กำหนดค่าให้ยอมรับ ประเภทการให้สิทธิ์ refresh_token สำหรับข้อมูลเกี่ยวกับองค์ประกอบการกำหนดค่าที่ไม่บังคับซึ่ง คุณจะกำหนดค่าด้วยนโยบายนี้ได้ที่นโยบาย OAuthV2

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OAuthV2 name="RefreshAccessToken">
    <Operation>RefreshAccessToken</Operation>
    <GenerateResponse enabled="true"/>
    <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
    <RefreshTokenExpiresIn>28800000</RefreshTokenExpiresIn> <!-- 8 hours -->
</OAuthV2>

การคืนสินค้า

เมื่อเปิดใช้ <GenerateResponse> นโยบายจะแสดงผลการตอบสนอง JSON ที่มีโทเค็นเพื่อการเข้าถึงใหม่อยู่ ประเภทการให้สิทธิ์ refresh_token รองรับการสร้างทั้ง และโทเค็นการรีเฟรชใหม่ เช่น

{
    "issued_at": "1420301470489",
    "application_name": "ce1e94a2-9c3e-42fa-a2c6-1ee01815476b",
    "scope": "READ",
    "refresh_token_issued_at": "1420301470489",
    "status": "approved",
    "refresh_token_status": "approved",
    "api_product_list": "[PremiumWeatherAPI]",
    "expires_in": "1799", //--in seconds
    "developer.email": "tesla@weathersample.com",
    "token_type": "BearerToken",
    "refresh_token": "8fKDHLryAD9KFBsrpixlq3qPJnG2fdZ5",
    "client_id": "5jUAdGv9pBouF0wOH5keAVI35GBtx3dT",
    "access_token": "jmZ2Hqv3iNsABUtAAsfWR3QGNctw",
    "organization_name": "docs",
    "refresh_token_expires_in": "28799", //--in seconds
    "refresh_count": "2"
}

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

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

oauthv2accesstoken.{policy-name}.access_token
oauthv2accesstoken.{policy-name}.expires_in   //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token
oauthv2accesstoken.{policy-name}.refresh_token_expires_in  //--in seconds
oauthv2accesstoken.{policy-name}.refresh_token_issued_at
oauthv2accesstoken.{policy-name}.refresh_token_status

เช่น

oauthv2accesstoken.RefreshAccessToken.access_token
oauthv2accesstoken.RefreshAccessToken.expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token
oauthv2accesstoken.RefreshAccessToken.refresh_token_expires_in
oauthv2accesstoken.RefreshAccessToken.refresh_token_issued_at
oauthv2accesstoken.RefreshAccessToken.refresh_token_status

การเข้ารหัส ข้อมูลเข้าสู่ระบบการตรวจสอบสิทธิ์พื้นฐาน

เมื่อคุณเรียก API เพื่อขอโทเค็นหรือรหัสการตรวจสอบสิทธิ์ นั่นเป็นแนวทางปฏิบัติที่ดีและ ที่แนะนำโดยข้อกำหนด OAuth 2.0 เพื่อส่งค่า client_id และ client_secret ตามที่ ส่วนหัวการตรวจสอบสิทธิ์พื้นฐานของ HTTP ตามที่อธิบายไว้ใน IETF RFC 2617 ในการดำเนินการนี้ คุณต้อง base64-encode ผลของการรวม 2 ค่าเข้าด้วยกันโดยใช้เครื่องหมายทวิภาคเพื่อคั่นค่าเหล่านั้น

ในโค้ดเทียม:

result = Base64Encode(concat('ns4fQc14Zg4hKFCNaSzArVuwszX95X', ':', 'ZIjFyTsNgQNyxI'))

ในตัวอย่างนี้ ns4fQc14Zg4hKFCNaSzArVuwszX95X คือ client_id และ ZIjFyTsNgQNyxI คือรหัสลับไคลเอ็นต์

ไม่ว่าคุณจะใช้ภาษาโปรแกรมใดในการคํานวณค่าที่เข้ารหัส base64 สําหรับแท็กเหล่านั้น เพื่อให้ได้ข้อมูลเข้าสู่ระบบไคลเอ็นต์ ผลลัพธ์ที่เข้ารหัสฐาน 64 จะเป็น bnM0ZlFjMTRaZzRoS0ZDTmFTekFyVnV3c3pYOTVYOlpJakZ5VHNOZ1FOeXhJOg==

จากนั้นให้ส่งคำขอโทเค็นโดยทำดังนี้

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

ยูทิลิตี curl จะสร้างส่วนหัว HTTP Basic ให้คุณหากคุณใช้ ตัวเลือก -u ค่าต่อไปนี้เทียบเท่ากับรายการข้างต้น

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

สภาพแวดล้อมการเขียนโปรแกรมอื่นๆ อาจมีแป้นพิมพ์ลัดที่คล้ายกันซึ่งจะสร้าง ส่วนหัวที่เข้ารหัสฐาน 64

การแฮชโทเค็นในฐานข้อมูล

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

พร็อพเพอร์ตี้ระดับองค์กรต่อไปนี้จะควบคุมการแฮชโทเค็น OAuth

features.isOAuthTokenHashingEnabled = true
features.OAuthTokenHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

หากคุณมีโทเค็นที่แฮชอยู่แล้วและต้องการเก็บโทเค็นเหล่านั้นไว้จนกว่าจะหมดอายุ ให้ตั้งค่า ต่อไปนี้ในองค์กรของคุณ ซึ่งอัลกอริทึมการแฮชตรงกับ (เช่น SHA1 ซึ่งเป็นค่าเริ่มต้นของ Edge) หากไม่ได้แฮชโทเค็น ให้ใช้ ธรรมดา

features.isOAuthTokenFallbackHashingEnabled = true
features.OAuthTokenFallbackHashingAlgorithm = SHA1 | SHA256 | SHA384 | SHA512 | PLAIN

หากคุณเป็นลูกค้า Edge Cloud โปรดติดต่อทีมสนับสนุนของ Apigee Edge เพื่อตั้งค่าบริการเหล่านี้ ขององค์กร และเลือกที่จะแฮชโทเค็นที่มีอยู่แบบเป็นกลุ่มได้

หัวข้อที่เกี่ยวข้อง