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

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

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

รหัสตัวอย่าง

เพื่อความสะดวกของคุณ นโยบายและปลายทางที่กล่าวถึงในหัวข้อนี้จะอยู่ใน GitHub ในโปรเจ็กต์ oauth-doc-examples ในที่เก็บ Apigee api-platform-samples คุณทำให้โค้ดตัวอย่างใช้งานได้และลองใช้คำขอตัวอย่างที่แสดงในหัวข้อนี้ได้ ดูรายละเอียดได้ที่โปรเจ็กต์ 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 ซึ่งต้องกำหนดค่าเพื่อรองรับประเภทการให้สิทธิ์รหัสการให้สิทธิ์

...
       <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) หรือเป็นพารามิเตอร์แบบฟอร์ม 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
  • username - ชื่อผู้ใช้ของเจ้าของทรัพยากร
  • password - รหัสผ่านของเจ้าของทรัพยากร

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

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

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

คุณต้องส่งรหัสไคลเอ็นต์และรหัสลับไคลเอ็นต์เป็นส่วนหัวการตรวจสอบสิทธิ์พื้นฐาน (เข้ารหัสแบบ Base64) หรือเป็นพารามิเตอร์แบบฟอร์ม 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 การเรียกกลับตอนลงทะเบียนแอปนักพัฒนาแอปไคลเอ็นต์ หากมีการระบุ 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 การเรียกกลับแบบเต็ม (ไม่ใช่บางส่วน) ในแอปไคลเอ็นต์ที่ลงทะเบียน พารามิเตอร์นี้จะเป็นพารามิเตอร์ที่ไม่บังคับ แต่หากระบุ ก็ไม่จำเป็นต้องระบุ โค้ดเรียกกลับคือ 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 (URL เรียกกลับ) พร้อมรหัสการให้สิทธิ์ ระบบจะส่งผ่านการเปลี่ยนเส้นทางเบราว์เซอร์ 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 ผลลัพธ์ของการรวมค่า 2 ค่าเข้าด้วยกันโดยใช้เครื่องหมายทวิภาคคั่นระหว่าง 2 ค่า

ในซูโดโค้ด:

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

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

ไม่ว่าคุณจะใช้ภาษาโปรแกรมใดในการคำนวณค่าที่เข้ารหัส base64 สำหรับข้อมูลเข้าสู่ระบบไคลเอ็นต์ที่ระบุ ผลลัพธ์ที่เข้ารหัสแบบ Base64 จะเป็น 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'

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

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

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

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

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

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

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

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

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