2015-08-26 28 views
10

का उपयोग कर मैं दो JWTs प्राप्त करते हैं: एक जगह OpenID Connect टोकन (id_token) और एक पहुंच टोकन (ACCESS_TOKEN)। ओपनआईडी के साथ स्थिति कम या ज्यादा स्पष्ट है - मैं इसे जेडब्ल्यूके एंडपॉइंट का उपयोग करके मान्य कर सकता हूं: https://smth.com/JWKSप्रक्रिया जेडब्ल्यूटी टोकन JWKs Endpoint

उदाहरण ( https://bitbucket.org/b_c/jose4j/wiki/JWT%20Examples) में के रूप में

:

HttpsJwks httpsJkws = new HttpsJwks("https://smth.com/JWKS"); 
HttpsJwksVerificationKeyResolver httpsJwksKeyResolver = new HttpsJwksVerificationKeyResolver(httpsJkws); 
jwtConsumer = new JwtConsumerBuilder() 
    .setVerificationKeyResolver(httpsJwksKeyResolver) 
    .setExpectedAudience(...) 
    .setExpectedIssuer(...) 
    .build(); 

सवाल पहुंच टोकन के साथ आगे बढ़ना करने के लिए कैसे है। मैं इसे उपयोगकर्ता आईडी और उपयोगकर्ता विवरण से निकाल सकता हूं, लेकिन मुझे लगता है कि मुझे इसे सत्यापित करने की भी आवश्यकता है?

अगर मैं टोकन के लिए के रूप में ही की कोशिश मैं त्रुटि हो रही है: UnresolvableKeyException: Unable to find a suitable verification key for JWS w/ header {"alg" : "RS256", "kid":"1"}। और वास्तव में "बच्चे" के लिए कोई कुंजी नहीं है: "1", यह मान "1" थोड़ा अजीब लगता है?

मैं कुछ पूरी तरह से गलत कर रहा हूं?

+0

https://smth.com/JWKS की सामग्री क्या है? smth.com मेरे लिए हल नहीं करता है। –

+0

पूर्ण अपवाद संदेश को उस जेडब्ल्यूकेएस एंडपॉइंट से सामग्री भी दिखाना चाहिए। जेडब्ल्यूकेएस को देखे बिना मैं बिल्कुल नहीं कह सकता कि क्या हो रहा है लेकिन मूल रूप से क्या हो रहा है, जेडब्ल्यूटी पर आरएसए के साथ हस्ताक्षर किए गए थे और मूल्य "1" के साथ एक प्रमुख आईडी हेडर शामिल था, जो जेडब्ल्यूकेएस में उपयुक्त सत्यापन कुंजी को इंगित करना चाहिए (दृश्य उदाहरण http://www.slideshare.net/briandavidcampbell/i-left-my-jwt-in-san-jose/30)। ऐसा लगता है कि उस जेडब्ल्यूकेएस एंडपॉइंट पर बच्चे = 1 के साथ कोई आरएसए कुंजी नहीं है। –

+0

प्रतिक्रिया के लिए धन्यवाद, मैंने सवाल बदल दिया। हां बच्चे = 1 के लिए कोई कुंजी नहीं है, ओपनआईडी की तुलना में मूल्य '1' भी अजीब लगता है, जहां मुझे कुछ वास्तविक बच्चा मिलता है, जैसे 'डीपी 1 केआर' और यह समय के साथ बदल जाता है। यदि आपको इस तरह के प्रमाणीकरण का सामना करना पड़ा और मुझे संकेत मिल सकता है - यदि दोनों टोकन उसी तरह आगे बढ़े या नहीं? –

उत्तर

5

ऐसा लगता है कि आप OpenID Connect ने ग्राहक की भूमिका को लागू कर रहे हैं या पार्टी भरोसा। दो टोकन, आईडी टोकन और एक्सेस टोकन, विभिन्न उद्देश्यों को पूरा करते हैं और ग्राहक द्वारा अलग-अलग संभाला जाना चाहिए। आईडी टोकन क्लाइंट के लिए है और क्लाइंट पर एंड-यूज़र के प्रमाणीकरण को सक्षम बनाता है। ग्राहक को अंत उपयोगकर्ता को अनुमति देने से पहले आईडी टोकन (हस्ताक्षर सत्यापित करें और एक्सप और ऑड इत्यादि जैसे दावों को सत्यापित करें) को मान्य करना होगा। हालांकि टोकन एक्सेस संसाधनों या एपीआई तक पहुंचने के लिए उपयोग करने के लिए है, लेकिन यह नहीं है ग्राहक का उपभोग करने या मान्य करने के लिए सीधे इरादा है। एक्सेस टोकन क्लाइंट के लिए अपारदर्शी है और ग्राहक को इसके विवरणों के बारे में परवाह नहीं है या पता नहीं होना चाहिए। वास्तव में, एक्सेस टोकन हमेशा जेडब्ल्यूटी नहीं होते हैं। ओपनआईडी कनेक्ट में, एंड-यूजर के बारे में अधिक दावे/जानकारी प्राप्त करने के लिए एक्सेस टोकन का उपयोग उपयोगकर्ता जानकारी एंडपॉइंट (HTTP शीर्षलेख, Authorization: Bearer [access token] के साथ) को कॉल करने के लिए किया जाता है।

बच्चे के लिए "1" का मूल्य पूरी तरह से कानूनी है, लेकिन यह एक महत्वपूर्ण है कि एएस/ओ पी और उपयोगकर्ता की जानकारी endpoint के बारे में किसी भी तरह पता करने के लिए बात कर रहा है। यह ओपनआईडी कनेक्ट जेडब्ल्यूकेएस एंडपॉइंट पर एक कुंजी नहीं है। "1" एक कुंजी नहीं है जिसे क्लाइंट को इसके बारे में जानना आवश्यक है क्योंकि क्लाइंट को एक्सेस टोकन को सीधे सत्यापित नहीं करना चाहिए।

+0

मैं कुछ पुष्टि देखना चाहता हूं (अच्छे दस्तावेज़ों के लिए कुछ लिंक यानी)। मुझे इस सटीक प्रमाणीकरण के बारे में कुछ भी नहीं मिला - मेरा मतलब है कि जेडब्ल्यूटी टोकन के साथ: ओपनआईडी और एक्सेस टोकन। –

+0

(http://openid.net/specs/openid-connect-basic-1_0.html में खंड 2.2, 2.3, आदि पर एक नज़र जो http://openid.net/specs/openid का एक सरलीकृत प्रोफ़ाइल है ले लो -कनेक्ट-कोर-1_0.html लेकिन विचार व्यक्त करना चाहिए)। –

+0

हां, मैंने इसे कम या ज्यादा पढ़ा है। लेकिन मैं अभी भी उलझन में हूं कि मुझे AccessToken को xxx.yyy.zzz के रूप में प्राप्त होता है और ज़ज़ का उपयोग नहीं करता है। फिर यह क्यों है? –

संबंधित मुद्दे