संसाधन सर्वर के लिए OAuth 2.0 पहुँच टोकन को कैसे मान्य करें?


147

जब एक क्लाइंट OAuth 2.0 एक्सेस टोकन के साथ एक संसाधन सर्वर को एक संरक्षित संसाधन प्राप्त करने के लिए कहता है, तो यह सर्वर टोकन को कैसे मान्य करता है? OAuth 2.0 ताज़ा टोकन प्रोटोकॉल?


सर्वर को पहले से जारी किए गए टोकन को सत्यापित करने में सक्षम माना जाता है ... आमतौर पर यह एक डेटाबेस लुकअप या क्रिप्टो (स्व-हस्ताक्षरित टोकन) होगा।
थिलो

समझा। इस मामले के बारे में, संसाधन स्वामी WS और क्लाइंट WS दोनों अंतर उपकरणों पर हैं?
एक

5
आप प्रमाणीकरण सेवा और संसाधन सेवा का मतलब है? (ग्राहक / उपभोक्ता हमेशा एक अलग डिवाइस पर होगा, और खुद को टोकन को मान्य नहीं कर सकता है) अगर ऐसा है, तो आप ताज़ा टोकन का उपयोग कर सकते हैं जो कि जांचने के लिए "महंगे" हैं (केवल एक ही सर्वर इसे कर सकते हैं) लेकिन लंबे समय तक रहने वाले और एक्सेस टोकन जो अक्सर समाप्त हो जाते हैं और ऑफ़लाइन चेक किए जा सकते हैं।
थिलो

जवाबों:


97

अद्यतन नवंबर 2015: नीचे हंस जेड के अनुसार - यह अब वास्तव में आरएफसी 7662 के हिस्से के रूप में परिभाषित किया गया है ।

मूल उत्तर: OAuth 2.0 कल्पना ( RFC 6749 ) टोकन (AT) सत्यापन तक पहुँच के लिए संसाधन सर्वर (RS) और प्राधिकरण सर्वर (AS) के बीच की बातचीत को स्पष्ट रूप से परिभाषित नहीं करता है। यह वास्तव में एएस के टोकन प्रारूप / रणनीति पर निर्भर करता है - कुछ टोकन स्व-निहित होते हैं (जैसे JSON वेब टोकन ) जबकि अन्य सत्र कुकी के समान हो सकते हैं, क्योंकि वे एएस में वापस सर्वर साइड रखी गई जानकारी को संदर्भित करते हैं।

हुई है कुछ चर्चा एक रुपये पर सत्यापन के लिए के रूप में के साथ संवाद करने के लिए एक मानक तरीका बनाने के बारे में OAuth कार्य समूह में। : मेरी कंपनी (पिंग पहचान) हमारे वाणिज्यिक OAuth के रूप में (PingFederate) के लिए ऐसे ही एक दृष्टिकोण के साथ आ गया https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn1564003025072__section_N10578_N1002A_N10001 । यह इसके लिए REST आधारित इंटरैक्शन का उपयोग करता है जो OAuth 2.0 का बहुत पूरक है।


स्कॉट टी, क्या पिंग फेडरेट में सुविधा का उपयोग करने के लिए एक कोड नमूना देखने का एक तरीका है?
जावाहेड 23

2
@JavaHead हमारे डेवलपर वेब साइट पर कुछ और प्रोटोकॉल विवरण शामिल हैं: developer.pingidentity.com/en/resource/… , JSP के सेट के रूप में PingFederate OAuth Playground जहाजों को टोकन को सत्यापित करने के लिए स्रोत कोड के रूप में संदर्भित किया जा सकता है। इसे और अन्य ओपन सोर्स लाइब्रेरीज़ और सैंपल) यहाँ से डाउनलोड किए जा सकते हैं: developer.pingidentity.com/en/code.html
Scott T.

स्कॉट, मैं एक सैंपल की तलाश कर रहा हूं, जो क्लाइंट क्रेडेंशियल ग्रांट को रेस्ट एपीआई के साथ स्थानीय संसाधन सर्वर द्वारा संरक्षित और प्रामाणिक सर्वर के रूप में पिंगफेडरेट प्रदर्शित करेगा। स्थानीय संसाधन सर्वर तब सत्यापन समापन बिंदु को कॉल करेगा। क्या आपको ऐसा कुछ आया है?
जावाहेड

@JavaHead फिर से कुछ ऐसा है जिसके लिए आपको PingFederate OAuth Playground का संदर्भ लेना चाहिए। यह क्लाइंट क्रेडेंशियल ग्रांट टाइप और रिसोर्स सर्वर द्वारा एक्सेस टोकन के सत्यापन दोनों को प्रदर्शित करता है।
स्कॉट टी।

JWT एक्सेस टोकन के मामले में, मुझे लगता है कि आप आम तौर पर RS के लिए आने वाले हर अनुरोध के लिए AS आत्मनिरीक्षण बिंदु को हिट नहीं करना चाहेंगे। किस स्थिति में, टोकन हस्ताक्षर और गुंजाइश की एक आरएस जांच पर्याप्त है? या, शायद रुपये कुछ समय के लिए एएस से आत्मनिरीक्षण प्रतिक्रियाओं को कैश कर सकता है?
गैरी

119

गूगल तरीका है

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 एक प्राधिकरण की जाँच करें

जीथब रास्ता

गिथुब - 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"
  }
}

अमेज़न तरीका है

अमेज़न के साथ लॉगिन - डेवलपर गाइड (दिसंबर 2015, पृष्ठ 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
}

2
@gustavodiazjaimes यह इस बात की व्याख्या नहीं करता है कि कैसे सर्वर साइड एक टोकन से यूजर आईडी को पहचानता है।
user2284570

22
मैं सभी वोटों को नहीं समझता। यह प्रश्न का उत्तर देने के लिए प्रकट नहीं होता है।
डंकन जोन्स

क्या किसी को पता है कि अगर कोई जारी टोकन वैध है, तो Azure सक्रिय निर्देशिका के पास एक समान समापन बिंदु है?
user180940

2
दूसरे शब्दों में, अपना खुद का रोल करें।
AndroidDev

51

@ टीएसटीटी के उत्तर पर एक अपडेट: टोकन सत्यापन के लिए संसाधन सर्वर और प्राधिकरण सर्वर के बीच इंटरफ़ेस को अक्टूबर 2015 में IETF RFC 7662 में मानकीकृत किया गया था, देखें: https://tools.ietf.org/html/rfn7662 । एक नमूना सत्यापन कॉल की तरह दिखेगा:

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

निश्चित रूप से विक्रेताओं और उत्पादों द्वारा गोद लेने के समय के साथ होना होगा।


यदि OoenId कनेक्ट का उपयोग करना चाहिए, तो हमें एक्सेस टोकन को मान्य करने के लिए id टोकन का उपयोग करने का खुला तरीका पसंद नहीं करना चाहिए: openid.net/specs/…
adnan kamili

1
@ रेनन: जिस तरह से स्कोप को प्राधिकरण अनुरोध में अनुरोध किया जाता है, उसके अनुरूप होने के लिए, जो एक scopeक्वेरी पैरामीटर के साथ होता है, जिसके मान में स्कोप की एक अलग-अलग सूची होती है
हंस जेड

4
कृपया शब्द "मानकीकृत" का उपयोग न करें जब कुछ आधिकारिक तौर पर एक शासी निकाय द्वारा स्वीकार नहीं किया गया हो। फरवरी 2018 के रूप में IETF RFC 7662 स्पष्ट रूप से इंगित करता है कि यह एक "प्रस्ताव" है।
AndroidDev

1
@adnankamili "प्रस्ताव" जैसी कोई चीज नहीं है। जब तक कोई दस्तावेज RFC नहीं बन जाता, तब तक यह पहले से ही एक "प्रस्तावित मानक" है जो इसके पीछे महत्वपूर्ण भार वहन करता है। OAuth 2.0 अभी भी एक "प्रस्तावित मानक" है, इसलिए मैं निश्चित नहीं हूं कि आप किस बिंदु को बनाने की कोशिश कर रहे हैं।
पेस

15

OAuth 2.0 युक्ति भाग को परिभाषित नहीं करता है। लेकिन कुछ विकल्प हो सकते हैं:

  1. जब Authz Header में रिसोर्स सर्वर को टोकन मिलता है तो वह टोकन को मान्य करने के लिए Authz सर्वर पर मान्य / introspect API को कॉल करता है। यहां Authz सर्वर डीबी स्टोर का उपयोग करने या हस्ताक्षर और कुछ विशेषताओं का सत्यापन करने से इसे वैध कर सकता है। प्रतिक्रिया के भाग के रूप में, यह टोकन को डिकोड करता है और शेष समाप्ति समय के साथ टोकन के वास्तविक डेटा को भेजता है।

  2. Authz Server निजी कुंजी का उपयोग करके टोकन को संलग्न / हस्ताक्षर कर सकता है और फिर publickey / Cert को संसाधन सर्वर को दिया जा सकता है। जब संसाधन सर्वर को टोकन मिलता है, तो वह टोकन को सत्यापित करने के लिए या तो हस्ताक्षर को रद्द / सत्यापित करता है। सामग्री को बाहर ले जाता है और टोकन को संसाधित करता है। यह तब या तो पहुंच प्रदान कर सकता है या अस्वीकार कर सकता है।


8

OAuth v2 चश्मा इंगित करता है:

टोकन विशेषताओं तक पहुंच और संरक्षित संसाधनों तक पहुंचने के लिए उपयोग किए जाने वाले तरीके इस विनिर्देश के दायरे से परे हैं और साथी विनिर्देशों द्वारा परिभाषित किए गए हैं।

मेरे प्राधिकरण सर्वर में एक webservice (SOAP) समापन बिंदु है जो संसाधन सर्वर को यह जानने की अनुमति देता है कि access_token वैध है या नहीं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.