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