2016-07-15 9 views
8

मैं अपने AspNetCore MVC एप्लिकेशन (केवल वेब एपीआई) JwtBearerMiddleware का उपयोग करने में जेडब्ल्यूटी बियरर प्रमाणीकरण लागू करने के लिए कोशिश कर रहा हूँ, लेकिन शीर्ष लेख के साथ एक 401 प्रतिक्रिया हो रही है:UseJwtBearerAuthentication पर हस्ताक्षर कुंजी

WWW-Authenticate: Bearer error="invalid_token", error_description="The signature key was not found" 

स्टार्टअप में प्रासंगिक कोड

app.UseJwtBearerAuthentication(new JwtBearerOptions 
{ 
    Authority = "https://example.okta.com", 
    Audience = "myClientId" 
}); 
प्राधिकरण यूआरएल मैं मिडलवेयर jwks_uri तो 012,354 से हस्ताक्षर कुंजी प्राप्त करने के लिए प्राप्त करने के लिए https://example.okta.com/.well-known/openid-configuration से मेरी पहचान प्रदाता मेटाडाटा क्वेरी करने के लिए उम्मीद थी के साथ

: .cs इस तरह दिखता है। मुझे नहीं लगता कि यह हो रहा है। हस्ताक्षर कुंजी खोजने और उपयोग करने के लिए मुझे क्या करने की ज़रूरत है? धन्यवाद

+0

क्या आप अपवाद विवरण पोस्ट कर सकते हैं (लॉग सक्षम करें और त्रुटि लॉग देखें)? –

+0

@ademcaglin मुझे उन विवरणों को प्राप्त करने का प्रयास करने में परेशानी हो रही है क्योंकि यह सब एक न्यूज लाइब्रेरी में हो रहा है। और मैं ब्रेकपॉइंट करने के लिए कहीं भी नहीं देख सकता। – Steve

उत्तर

9

संदर्भ निम्नलिखित और AspNet Security repo (विशेष रूप से JwtBearerHandler और JwtBearerMiddleware वर्ग) की खुदाई के बाद, जो मुझे Microsoft.IdentityModel नाम स्थान जो OpenIdConnectConfigurationRetriever वर्ग के लिए एक Azure Extensions repo (प्रथम ConfigurationManager<T> वर्ग में है, तो करने के लिए नेतृत्व (GetAsync विधि), फिर JsonWebKeySet.GetSigningKeys() विधि पर), मुझे अंत में पता चला कि JwtBearerMiddleware वास्तव में मेटाडेटा में jwks_uri से कुंजी प्राप्त करता है। ओह।

तो यह क्यों काम नहीं कर रहा था? क्या मैंने पहले देख लिया है चाहिए कि बच्चा बियरर जेडब्ल्यूटी के शीर्षक में वास्तव में jwks_uri से बच्चा के दोनों में से किसी से मेल नहीं खाती, इसलिए यह नहीं मिला था है। यह access_code था जिसे मैं भालू टोकन के रूप में भेज रहा था। दूसरी ओर id_token के पास बच्चा है जो मेल खाता है, इसलिए इसका उपयोग करके यह काम करता है!

मैं पढ़ने के बाद से है:

ओआईडीसी पहुंच टोकन केवल Okta /OAuth2/v1/UserInfo समाप्ति बिंदु है और इस तरह द्वारा अपारदर्शी के रूप में व्यवहार किया जाना चाहिए आवेदन के लिए लागू है। एप्लिकेशन को इसे सत्यापित करने की आवश्यकता नहीं है क्योंकि अन्य संसाधन सर्वरों के विरुद्ध उपयोग नहीं किया जाना चाहिए। इसका प्रारूप और इसे साइन करने के लिए उपयोग की जाने वाली कुंजी पहले नोटिस के बिना परिवर्तन के अधीन है। source

... इसलिए मैं पहुँच टोकन का उपयोग नहीं कर सकते हैं।

+0

सहायक, .. धन्यवाद – Coding4Fun

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