คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
ในหัวข้อนี้ เราจะแสดงวิธีขอโทเค็นเพื่อการเข้าถึงและรหัสการให้สิทธิ์ กำหนดค่า ปลายทาง OAuth 2.0 และกำหนดค่านโยบายสำหรับประเภทการให้สิทธิ์ที่รองรับแต่ละประเภท
โค้ดตัวอย่าง
เพื่อความสะดวกของคุณ นโยบายและปลายทางที่กล่าวถึงในหัวข้อนี้พร้อมใช้งานใน GitHub ในโปรเจ็กต์ oauth-doc-examples ในที่เก็บ api-platform-samples ของ Apigee คุณสามารถติดตั้งใช้งานโค้ดตัวอย่างและลองใช้คำขอตัวอย่างที่แสดงในหัวข้อนี้ได้ ดูรายละเอียดได้ที่ 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 - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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'
พารามิเตอร์ที่จำเป็น
โดยค่าเริ่มต้น พารามิเตอร์ grant_type ที่จำเป็นต้องเป็น x-www-form-urlencoded และ
ระบุไว้ในเนื้อหาคำขอ (ดังที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม คุณสามารถเปลี่ยน
ค่าเริ่มต้นนี้ได้โดยการกำหนดค่าองค์ประกอบ <GrantType> ในนโยบาย OAuthV2 ที่
แนบมากับปลายทาง /accesstoken นี้ เช่น คุณอาจเลือกส่งพารามิเตอร์
ในพารามิเตอร์การค้นหา ดูรายละเอียดได้ที่นโยบาย OAuthV2
- grant_type - ต้องตั้งค่าเป็นค่า
client_credentials
พารามิเตอร์ ที่ไม่บังคับ
- state - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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 - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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
การขอโทเค็นเพื่อการเข้าถึง: การให้สิทธิ์โดยนัย type
ส่วนนี้จะอธิบายวิธีขอโทเค็นเพื่อการเข้าถึงโดยใช้ขั้นตอนประเภทการให้สิทธิ์โดยนัย ดูข้อมูลเบื้องต้นเกี่ยวกับประเภทการให้สิทธิ์ 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 - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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 Location ในส่วนหัวการตอบกลับ การเปลี่ยนเส้นทางจะชี้ไปยัง 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'
ซึ่งมีการแนบนโยบาย GenerateAuthorizationCode ของ OAuthV2 ที่
/oauth/authorizeพร็อกซีปลายทาง (ดูตัวอย่างปลายทางด้านล่าง)
พารามิเตอร์ที่จำเป็น
โดยค่าเริ่มต้น พารามิเตอร์เหล่านี้ต้องเป็นพารามิเตอร์การค้นหา (ตามที่แสดงในตัวอย่างด้านบน) อย่างไรก็ตาม
คุณสามารถเปลี่ยนค่าเริ่มต้นนี้ได้โดยการกำหนดค่าองค์ประกอบ <ResponseType>
<ClientId> และ <RedirectUri> ในนโยบาย OAuthV2
ที่แนบมากับปลายทาง /authorize นี้ ดูรายละเอียดได้ที่นโยบาย OAuthV2
- response_type - ต้องตั้งค่าเป็น
code - client_id - รหัสไคลเอ็นต์ของแอปนักพัฒนาซอฟต์แวร์ที่ลงทะเบียน
พารามิเตอร์ ที่ไม่บังคับ
- redirect_uri - หากระบุ URI ของการเรียกกลับแบบเต็ม (ไม่ใช่แบบบางส่วน) ใน แอปไคลเอ็นต์ที่ลงทะเบียน พารามิเตอร์นี้จะมีหรือไม่มีก็ได้ มิฉะนั้นจะต้องระบุ การเรียกกลับ คือ URL ที่ Edge ส่งรหัสการให้สิทธิ์ที่สร้างขึ้นใหม่ ดูลงทะเบียนแอปและจัดการคีย์ API ด้วย
- state - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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 (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 - สตริงที่จะส่งกลับพร้อมกับการตอบกลับ โดยทั่วไปจะใช้ เพื่อป้องกันการโจมตีแบบ Cross-Site Request Forgery
- ขอบเขต - ช่วยให้คุณกรองรายการผลิตภัณฑ์ 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> เป็น "true"
หากตั้งค่า <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-Basic ตามที่อธิบายไว้ใน IETF RFC 2617 โดยคุณต้อง เข้ารหัส Base64 ผลลัพธ์ของการรวมค่าทั้ง 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 โดยอัตโนมัติ
การแฮชโทเค็นในฐานข้อมูล
หากต้องการปกป้องโทเค็นเพื่อการเข้าถึงและโทเค็นการรีเฟรช OAuth ในกรณีที่เกิดการละเมิดความปลอดภัยของฐานข้อมูล คุณสามารถ เปิดใช้การแฮชโทเค็นอัตโนมัติในองค์กร Edge เมื่อเปิดใช้ฟีเจอร์นี้ 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 เพื่อตั้งค่าพร็อพเพอร์ตี้เหล่านี้ในองค์กร และเลือกที่จะแฮชโทเค็นที่มีอยู่แบบเป็นกลุ่มได้
หัวข้อที่เกี่ยวข้อง
- การใช้ ประเภทการให้สิทธิ์ข้อมูลเข้าสู่ระบบของไคลเอ็นต์
- การใช้ ประเภทการให้สิทธิ์รหัสการให้สิทธิ์
- หลักสูตรออนไลน์ด้านความปลอดภัยของ API (รวมถึง OAuth)
- นโยบาย OAuthV2 -- มี ตัวอย่างมากมายที่แสดงวิธีส่งคำขอไปยังเซิร์ฟเวอร์การให้สิทธิ์และวิธีกำหนดค่านโยบาย OAuthV2