web-dev-qa-db-ja.com

リソースサーバーのOAuth 2.0アクセストークンを検証する方法

クライアントがOAuth 2.0アクセストークンで保護されたリソースを取得するようにリソースサーバーに要求すると、このサーバーはどのようにトークンを検証しますか? OAuth 2.0リフレッシュトークンプロトコル?

120
Ack

2015年11月更新-以下のHans Z.による-これは実際に RFC 7662 の一部として定義されています。

OAuth 2.0仕様は、アクセストークン(AT)検証のためのリソースサーバー(RS)と承認サーバー(AS)間の相互作用を明確に定義していません。それは本当にASのトークン形式/戦略に依存しています-一部のトークンは自己完結型です( JSON Web Tokens など)。メモリ。

OAuthワーキンググループには、RSがAT検証のためにASと通信する標準的な方法を作成することについて 議論 がありました。私の会社(Ping Identity)は、私たちの商用OAuth AS(PingFederate)に対して、そのようなアプローチを1つ考え出しました。 https://documentation.pingidentity.com/pingfederate/pf/index.shtml# concept_grantTypeParameters.html#concept_grantTypeParametersアクセストークン検証付与タイプを参照)。このためにRESTベースの対話を使用しますが、これはOAuth 2を補完するものです。

-

84
Scott T.

Googleの方法

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

@Scott T.の回答の更新:トークン検証のためのリソースサーバーと承認サーバー間のインターフェイスは、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"
}

もちろん、ベンダーや製品による採用は、時間の経過とともに行われなければなりません。

45
Hans Z.

OAuth 2.0仕様では、パーツが定義されていません。ただし、いくつかのオプションがあります。

  1. リソースサーバーがAuthzヘッダーでトークンを取得すると、Authzサーバーでvalidate/introspect APIを呼び出してトークンを検証します。ここで、Authzサーバーは、DBストアを使用するか、署名と特定の属性を検証することで検証します。応答の一部として、トークンをデコードし、残りの有効期限とともにトークンの実際のデータを送信します。

  2. Authzサーバーは、秘密キーを使用してトークンを暗号化/署名し、次に公開キー/証明書をリソースサーバーに与えることができます。リソースサーバーはトークンを取得すると、署名を復号化/検証してトークンを検証します。コンテンツを取り出してトークンを処理します。その後、アクセスを提供するか拒否することができます。

7
dvsakgec

OAuth v2の仕様は次のとおりです。

保護されたリソースへのアクセスに使用されるアクセストークン属性とメソッドは、この仕様の範囲外であり、関連する仕様で定義されています。

承認サーバーには、リソースサーバーがaccess_tokenが有効かどうかを知ることができるWebサービス(SOAP)エンドポイントがあります。

7
Carlos AG