리소스 서버에 대한 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 기반 상호 작용을 사용합니다.


답변

구글 웨이

Google Oauth2 토큰 유효성 검사

의뢰:

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
}

Microsoft 방식

Microsoft-Oauth2 인증 확인

Github 방식

Github-Oauth2 인증 확인

의뢰:

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"
}

물론 공급 업체와 제품의 채택은 시간이 지남에 따라 이루어져야합니다.


답변

OAuth 2.0 사양은 부품을 정의하지 않습니다. 그러나 몇 가지 옵션이있을 수 있습니다.

  1. 리소스 서버가 Authz 헤더에서 토큰을 가져 오면 Authz 서버에서 validate / introspect API를 호출하여 토큰의 유효성을 검사합니다. 여기서 Authz 서버는 DB 스토어를 사용하거나 서명 및 특정 속성을 확인하여 서버를 검증 할 수 있습니다. 응답의 일부로 토큰을 해독하고 남은 만료 시간과 함께 토큰의 실제 데이터를 보냅니다.

  2. Authz 서버는 개인 키를 사용하여 토큰을 암호화 / 서명 한 다음 공개 키 / 인증서를 Resource Server에 제공 할 수 있습니다. 리소스 서버가 토큰을 받으면 서명을 해독 / 확인하여 토큰을 확인합니다. 내용을 꺼내고 토큰을 처리합니다. 그런 다음 액세스를 제공하거나 거부 할 수 있습니다.


답변

OAuth v2 사양은 다음을 나타냅니다.

보호 자원에 액세스하는 데 사용되는 액세스 토큰 속성 및 방법은이 사양의 범위를 벗어나며 동반 사양에 의해 정의됩니다.

내 Authorization Server에는 자원 서버가 access_token이 유효한지 알 수있는 웹 서비스 (SOAP) 엔드 포인트가 있습니다.


답변