अनुरोध हेडर IdentityServer4 के लिए अग्रेषित नहीं कर रहे हैं


9

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

क्या पहचान सर्वर के अनुरोध को रूट करते समय मूल हेडर रखने का कोई तरीका है?

Startup.cs (पहचान सर्वर जोड़ें)

services
    .AddAuthentication()
    .AddIdentityServerAuthentication("APIParts", options =>
    {
        options.Authority = "http://localhost:60168";
        options.RequireHttpsMetadata = false;
        options.ApiName = "Parts";
        options.SupportedTokens = SupportedTokens.Both;
    });

ocelot.json

ReRoutes": [
{
  "DownstreamPathTemplate": "/connect/token",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 60168
    }
  ],
  "UpstreamPathTemplate": "/token",
  "UpstreamHttpMethod": [ "Post" ]
},
{
  "DownstreamPathTemplate": "/api/Parts/Inventory",
  "DownstreamScheme": "http",
  "DownstreamHostAndPorts": [
    {
      "Host": "localhost",
      "Port": 65241
    }
  ],
  "UpstreamPathTemplate": "/api/Parts/Inventory",
  "AuthenticationOptions": {
    "AuthenticationProviderKey": "APIParts",
    "AllowedScopes": []
  }
}]

1
इसमें गहराई में जाने से पहले आप यह बता सकते हैं कि आप आइडेंटिटी सर्वर ऑथेंटिकेशन और एपीआई के लिए अलग-अलग पोर्ट का उपयोग क्यों कर रहे हैं। मुझे लगता है कि मुद्दा तब हो सकता है जब एपीआई अनुरोध उत्पन्न होता है पहचान प्राधिकरण उसी बंदरगाह पर टोकन को मान्य करने की कोशिश करता है जहां एपीआई है, इसलिए आप दोनों एक ही बंदरगाह दे सकते हैं और कोशिश कर सकते हैं।
नौमान खान

क्या आप कुछ कोड पोस्ट कर सकते हैं जो दिखाता है कि आप अपने कनेक्शन स्ट्रिंग बनाने के लिए हेडर कैसे एक्सेस कर रहे हैं? इसके अतिरिक्त आप किस हेडर को पढ़ने की कोशिश कर रहे हैं? यदि यह होस्ट हैडर है तो समस्याएँ हैं।
निक्स

जवाबों:


0

मैं Ocelot से परिचित नहीं हूं, लेकिन मेरी वास्तुकला में मेरे पास IdentityServer एक लोड Balancer के पीछे चल रहा है और एक Nginx Ingress के माध्यम से Kubernetes क्लस्टर में रूट किया गया है और इसके लिए मुझे अपनी पहचानकर्ता के तरीके से हेडर अग्रेषण कॉन्फ़िगर करने की आवश्यकता Startup.Configureहै:

var forwardOptions = new ForwardedHeadersOptions
{
    ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto,
    RequireHeaderSymmetry = false
};

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