์ด ํ์ด์ง๋ Apigee ๋ฐ Apigee Hybrid์ ์ ์ฉ๋ฉ๋๋ค.
Apigee Edge ๋ฌธ์ ๋ณด๊ธฐ
์ด ์ฃผ์ ์์๋ OAuth ์ ์ฑ ์ด Apigee์์ ์ค๋ฅ๋ฅผ ๋ฐ์์ํฌ ๋ ๋ฐ์ํ ์ ์๋ HTTP ์ํ ์ฝ๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ค๋ฅ ์ฒ๋ฆฌ์ ๋ํ ์๋ด๋ ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ ์ฑ ๋ณ ์ค๋ฅ ์ฝ๋๋ OAuth v2 ์ ์ฑ ์ค๋ฅ ์ฐธ์กฐ๋ฅผ ํ์ธํ์ธ์.
์น์ธ ์ฝ๋
์๋ชป๋ ๋ฆฌ๋๋ ์ URI
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid redirection uri http://www.invalid_example.com"}
๋ฆฌ๋๋ ์ URI ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Redirection URI is required"}
์๋ชป๋ ํค
HTTP/1.1 401 Unauthorized {"ErrorCode" : "invalid_request", "Error" :"Invalid client id : AVD7ztXReEYyjpLFkkPiZpLEjeF2aYAz. ClientId is Invalid"}
ํค ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"The request is missing a required parameter : client_id"}
์๋ชป๋ ์๋ต ์ ํ
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Response type must be code"}
์๋ต ์ ํ ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"The request is missing a required parameter : response_type"}
AccessToken ์์ฑ
์๋ชป๋ ์ธ์ฆ ์ฝ๋
HTTP status: 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid Authorization Code"}
๋ฆฌ๋๋ ์ URI ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Required param : redirect_uri"}
์๋ชป๋ ๋ฆฌ๋๋ ์ URI
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid redirect_uri : oob"}
GenerateResponse๊ฐ false์ธ ๊ฒฝ์ฐ ์๋ชป๋ ํด๋ผ์ด์ธํธ ID
์ด ์ค๋ฅ๋ <GenerateResponse>
์์ฑ์ด false๋ก ์ค์ ๋๊ณ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ์ ๋ฐํ๋ฉ๋๋ค.
{ "fault": { "faultstring": "Invalid client identifier {0}", "detail": { "errorcode": "oauth.v2.InvalidClientIdentifier" } } }
GenerateResponse๊ฐ true์ธ ๊ฒฝ์ฐ ์๋ชป๋ ํด๋ผ์ด์ธํธ ID
์ด ์ค๋ฅ๋ <GenerateResponse>
์์ฑ์ด true๋ก ์ค์ ๋๊ณ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ์ ๋ฐํ๋ฉ๋๋ค.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
์๋ชป๋ GrantType
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Unsupported grant type : client_credentials_invalid"}
์ฌ์ฉ์ ์ด๋ฆ ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Required param : username"}
๋น๋ฐ๋ฒํธ ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Required param : password"}
GrantType ์์(์ปค์คํ ์ ์ฑ )
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Required param : grant_type"}
AuthCode ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Required param : code"}
์์์
์๋ชป๋ ํด๋ผ์ด์ธํธ ID
HTTP/1.1 401 Unauthorized {"ErrorCode" : "invalid_request", "Error" :"Invalid client id : AVD7ztXReEYyjpLFkkPiZpLEjeF2aYAz. ClientId is Invalid"}
ํด๋ผ์ด์ธํธ ID ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"The request is missing a required parameter : client_id"}
์๋ชป๋ ์๋ต ์ ํ
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Response type must be token"}
์๋ต ์ ํ ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"The request is missing a required parameter : response_type"}
์๋ชป๋ ๋ฆฌ๋๋ ์ URI
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid redirection uri http://www.invalid_example.com"}
๋ฆฌ๋๋ ์ URI ์์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Redirection URI is required"}
๊ฐฑ์ ํ ํฐ
์๋ชป๋ RefreshToken
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid Refresh Token"}
๋ง๋ฃ๋ RefreshToken
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Refresh Token expired"}
์๋ชป๋ ๋ฒ์
HTTP/1.1 400 Bad Request {"ErrorCode" : "invalid_request", "Error" :"Invalid Scope"}
GenerateResponse๊ฐ false์ธ ๊ฒฝ์ฐ ์๋ชป๋ ํด๋ผ์ด์ธํธ ID
์ด ์ค๋ฅ๋ GenerateResponse ์์ฑ์ด false๋ก ์ค์ ๋๊ณ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ์ ๋ฐํ๋ฉ๋๋ค.
{ "fault": { "faultstring": "Invalid client identifier {0}", "detail": { "errorcode": "oauth.v2.InvalidClientIdentifier" } } }
GenerateResponse๊ฐ true์ธ ๊ฒฝ์ฐ ์๋ชป๋ ํด๋ผ์ด์ธํธ ID
์ด ์ค๋ฅ๋ GenerateResponse ์์ฑ์ด true๋ก ์ค์ ๋๊ณ ํด๋ผ์ด์ธํธ ์ฌ์ฉ์ ์ธ์ฆ ์ ๋ณด๊ฐ ์๋ชป๋ ๊ฒฝ์ฐ์ ๋ฐํ๋ฉ๋๋ค.
{"ErrorCode" : "invalid_client", "Error" :"ClientId is Invalid"}
AccessToken ํ์ธ
์๋ชป๋ AccessToken
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"Invalid Access Token","detail":{"errorcode":"keymanagement.service.invalid_access_token"}}}
์๋ชป๋ ๋ฆฌ์์ค
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"APIResource \/facebook\/acer does not exist","detail":{"errorcode":"keymanagement.service.apiresource_doesnot_exist"}}}
์๋ชป๋ ๋ฒ์
HTTP/1.1 403 Forbidden {"fault":{"faultstring":"Required scope(s) : VerifyAccessToken.scopeSet","detail":{"errorcode":"steps.oauth.v2.InsufficientScope"}}}
์ธ์ฆ ํค๋ ์์
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"Invalid access token","detail":{"errorcode":"oauth.v2.InvalidAccessToken"}}}
ApiProduct์ ์ผ์น ํญ๋ชฉ ์์(Env ๋ฐ Proxy๊ฐ ๊ตฌ์ฑ๋จ)
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"Invalid API call as no apiproduct match found","detail":{"errorcode":"keymanagement.service.InvalidAPICallAsNoApiProductMatchFound"}}}
์ก์ธ์ค ํ ํฐ ๋ง๋ฃ
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"Access Token expired","detail":{"errorcode":"keymanagement.service.access_token_expired"}}}
์ก์ธ์ค ํ ํฐ ์ทจ์
HTTP/1.1 401 Unauthorized {"fault":{"faultstring":"Access Token not approved","detail":{"errorcode":"keymanagement.service.access_token_not_approved"}}}
OAuth V2 ์ ๋ณด ๊ฐ์ ธ์ค๊ธฐ
์๋ชป๋ ๊ฐฑ์ ํ ํฐ
HTTP/1.1 404 Not Found {"fault::{"detail":{"errorcode":"keymanagement.service.invalid_refresh_token"},"faultstring":"Invalid Refresh Token"}}
์๋ชป๋ ์ก์ธ์ค ํ ํฐ
HTTP/1.1 404 Not Found { "fault": { "faultstring": "Invalid Access Token", "detail": { "errorcode": "keymanagement.service.invalid_access_token" } } }
๋ง๋ฃ๋ ์ก์ธ์ค ํ ํฐ
HTTP/1.1 500 Not Found { "fault": { "faultstring": "Access Token expired", "detail": { "errorcode": "keymanagement.service.access_token_expired" } } }
๋ง๋ฃ๋ ๊ฐฑ์ ํ ํฐ
HTTP/1.1 500 Not Found { "fault": { "faultstring": "Refresh Token expired", "detail": { "errorcode": "keymanagement.service.refresh_token_expired" } } }
์๋ชป๋ ํด๋ผ์ด์ธํธ ID
HTTP/1.1 404 Not Found { "fault": { "faultstring": "Invalid Client Id", "detail": { "errorcode": "keymanagement.service.invalid_client-invalid_client_id" } } }
์๋ชป๋ ์น์ธ ์ฝ๋
HTTP/1.1 404 Not Found { "fault": { "faultstring": "Invalid Authorization Code", "detail": { "errorcode": "keymanagement.service.invalid_request-authorization_code_invalid" } } }
๋ง๋ฃ๋ ์น์ธ ์ฝ๋
HTTP/1.1 500 Not Found { "fault": { "faultstring": "Authorization Code expired", "detail": { "errorcode": "keymanagement.service.authorization_code_expired" } } }
OAuth V2 ์ ๋ณด ์ค์
์๋ชป๋ ์ก์ธ์ค ํ ํฐ
HTTP/1.1 404 Not Found { "fault": { "faultstring": "Invalid Access Token", "detail": { "errorcode": "keymanagement.service.invalid_access_token" } } }
๋ง๋ฃ๋ ์ก์ธ์ค ํ ํฐ
HTTP/1.1 500 Not Found { "fault": { "faultstring": "Access Token expired", "detail": { "errorcode": "keymanagement.service.access_token_expired" } } }
OAuth V2 ์ ๋ณด ์ญ์
์ฑ๊ณตํ๋ฉด ์ ์ฑ ์ด 200 ์ํ๋ฅผ ๋ฐํํฉ๋๋ค.
์คํจํ๋ฉด ์ ์ฑ ์ 404์ ๋ค์๊ณผ ๋น์ทํ ์ถ๋ ฅ์ ๋ฐํํฉ๋๋ค(์ก์ธ์ค ํ ํฐ ๋๋ ์ธ์ฆ ์ฝ๋ ์ญ์ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฆ).
HTTP/1.1 404 Not Found Content-Type: application/json Content-Length: 144 Connection: keep-alive {"fault":{"faultstring":"Invalid Authorization Code","detail":{"errorcode":"keymanagement.service.invalid_request-authorization_code_invalid"}}}