클라이언트가 리소스 서버에 OAuth 2.0 액세스 토큰으로 보호 된 리소스를 요청하면이 서버는 어떻게 토큰의 유효성을 검사합니까? OAuth 2.0 새로 고침 토큰 프로토콜?
클라이언트가 리소스 서버에 OAuth 2.0 액세스 토큰으로 보호 된 리소스를 요청하면이 서버는 어떻게 토큰의 유효성을 검사합니까? OAuth 2.0 새로 고침 토큰 프로토콜?
답변:
2015 년 11 월 업데이트 : 아래 Hans Z.에 따르면, 이것은 실제로 RFC 7662의 일부로 정의됩니다 .
원래 답변 : OAuth 2.0 사양 ( RFC 6749 )은 액세스 토큰 (AT) 유효성 검사를 위해 RS (Resource Server)와 AS (Authorization Server) 간의 상호 작용을 명확하게 정의하지 않습니다. 그것은 실제로 AS의 토큰 형식 / 전략에 달려 있습니다. 일부 토큰은 자체적으로 포함되어 있으며 ( JSON Web Tokens 과 같은 ) 다른 토큰 은 AS에서 서버 측에 보유한 정보를 참조한다는 점에서 세션 쿠키와 유사 할 수 있습니다.
이 있었다 논의 는 RS는 AT의 검증을 위해 AS와 통신하기위한 표준적인 방법을 만드는에 대한 OAuth는 워킹 그룹이다. : 우리 회사 (핑 신원은) 우리의 상업 OAuth를 AS (PingFederate)에 대한 하나의 접근 방식에 도달했습니다 https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn1564003025072__section_N10578_N1002A_N10001 . OAuth 2.0을 보완하는 REST 기반 상호 작용을 사용합니다.
의뢰:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
응창 성가:
{
"audience":"8819981768.apps.googleusercontent.com",
"user_id":"123456789",
"scope":"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
"expires_in":436
}
의뢰:
GET /applications/:client_id/tokens/:access_token
응창 성가:
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abc123",
"app": {
"url": "http://my-github-app.com",
"name": "my github app",
"client_id": "abcde12345fghij67890"
},
"note": "optional note",
"note_url": "http://optional/note/url",
"updated_at": "2011-09-06T20:39:23Z",
"created_at": "2011-09-06T17:26:27Z",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "somehexcode",
"url": "https://api.github.com/users/octocat"
}
}
Amazon으로 로그인-개발자 안내서 (2015 년 12 월, 21 페이지)
요청 :
https://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
응답 :
HTTP/l.l 200 OK
Date: Fri, 3l May 20l3 23:22:l0 GMT
x-amzn-RequestId: eb5be423-ca48-lle2-84ad-5775f45l4b09
Content-Type: application/json
Content-Length: 247
{
"iss":"https://www.amazon.com",
"user_id": "amznl.account.K2LI23KL2LK2",
"aud": "amznl.oa2-client.ASFWDFBRN",
"app_id": "amznl.application.436457DFHDH",
"exp": 3597,
"iat": l3ll280970
}
@Scott T.의 답변에 대한 업데이트 : 토큰 유효성 검사를위한 Resource Server와 Authorization Server 간의 인터페이스는 2015 년 10 월 IETF RFC 7662에서 표준화되었습니다 ( https://tools.ietf.org/html/rfc7662 참조) . 샘플 유효성 검사 호출은 다음과 같습니다.
POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer 23410913-abewfq.123483
token=2YotnFZFEjr1zCsicMWpAA
샘플 응답 :
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"client_id": "l238j323ds-23ij4",
"username": "jdoe",
"scope": "read write dolphin",
"sub": "Z5O3upPC88QrAjx00dis",
"aud": "https://protected.example.net/resource",
"iss": "https://server.example.com/",
"exp": 1419356238,
"iat": 1419350238,
"extension_field": "twenty-seven"
}
물론 공급 업체와 제품의 채택은 시간이 지남에 따라 이루어져야합니다.
scope
에는 값으로 공백으로 구분 된 스코프 목록이 포함 된 쿼리 매개 변수가 있습니다
OAuth 2.0 사양은 부품을 정의하지 않습니다. 그러나 몇 가지 옵션이있을 수 있습니다.
리소스 서버가 Authz 헤더에서 토큰을 가져 오면 Authz 서버에서 validate / introspect API를 호출하여 토큰의 유효성을 검사합니다. 여기서 Authz 서버는 DB 스토어를 사용하거나 서명 및 특정 속성을 확인하여 서버를 검증 할 수 있습니다. 응답의 일부로 토큰을 해독하고 남은 만료 시간과 함께 토큰의 실제 데이터를 보냅니다.
Authz 서버는 개인 키를 사용하여 토큰을 암호화 / 서명 한 다음 공개 키 / 인증서를 Resource Server에 제공 할 수 있습니다. 리소스 서버가 토큰을 받으면 서명을 해독 / 확인하여 토큰을 확인합니다. 내용을 꺼내고 토큰을 처리합니다. 그런 다음 액세스를 제공하거나 거부 할 수 있습니다.