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