8

हमारे पास एक कॉलिंग क्लाइंट है जो हमारे सिस्टम से अनुरोध करता है जो मानक स्थान ('प्राधिकरण' हेडर) में बेयरर टोकन नहीं रखता है, मैं एक कस्टम हैंडलर बनाना चाहता हूं जो सही में जेडब्ल्यूटी को ढूंढता है जगह। JwtBearerMiddleware कार्यान्वयन के अलावा कार्यान्वयन क्या कोई क्लीनर तरीका है जो मैं सिर्फ मध्यस्थ को बता सकता हूं कि कौन से हैंडलर का उपयोग करना है?JwtBearerMiddleware के लिए कस्टम टोकन स्थान

आसान विकल्प JWT मिडलवेयर चलाने से ठीक पहले अनुरोध पाइपलाइन में जेडब्ल्यूटी को सही जगह (अनुरोध शीर्षलेख) में इंजेक्शन द्वारा अनुरोध को फिर से लिखना होगा। लेकिन यह थोड़ा हैकी लगता है।

उत्तर

5

वास्तव में ऐसा करने का एक अंतर्निहित तरीका है, कोड को फोर्क किए बिना या अपना खुद का हैंडलर प्रदान करने का प्रयास करें। आपको बस इतना करना है OnMessageReceived घटना में कुछ कोड हुक है:

app.UseJwtBearerAuthentication(new JwtBearerOptions() 
{ 
    Events = new JwtBearerEvents() 
    { 
     OnMessageReceived = context => 
     { 
      // Get the token from some other location 
      // This can also await, if necessary 
      var token = context.Request.Headers["MyAuthHeader"]; 

      // Set the Token property on the context to pass the token back up to the middleware 
      context.Token = token; 

      return Task.FromResult(true); 
     } 
    } 
}); 

आप source पर एक नज़र डालें, तो Token संपत्ति के बाद ईवेंट हैंडलर निष्पादित चेक करना सुनिश्चित करें। यदि यह शून्य है, तो हैंडलर प्राधिकरण शीर्षलेख के लिए डिफ़ॉल्ट जांच के साथ चला जाता है।

+1

इसके लिए बहुत बहुत धन्यवाद। मैंने स्रोत को स्कैन किया था लेकिन आपने दो और दो को एक साथ कोड की रेखा को wrt नहीं रखा था। एक जादू की तरह काम करता है। किसी भी दिलचस्पी के लिए मुझे क्वेरी स्ट्रिंग में बेयरर टोकन जोड़ने की आवश्यकता है क्योंकि हम सिग्नलआर (हम कुकीज़ का उपयोग नहीं करना चाहते हैं) का उपयोग कर रहे हैं और इसके बजाय क्वेरी स्ट्रिंग से टोकन खींचना चाहते हैं। – Lutando

+0

@Lutando मदद करने के लिए खुशी! –

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