पहचान सर्वर 4 IExtensionGrantValidator - पहचानकर्ता 4

मेरे पास एक बुनियादी IdentityServer4 टोकन सर्वर, एक Api, और एक परीक्षण क्लाइंट अनुप्रयोग सेटअप है जिसमें Identserver4 डॉक्स ट्यूटोरियल पर आधारित client_credentials का उपयोग किया जाता है।

हमारे पास एक पूर्व-निर्मित क्लाइंट एप्लिकेशन है जो उपयोगकर्ताउनके मौजूदा क्रेडेंशियल्स के साथ लॉग इन करें जो IdentityServer4 में बंधा नहीं है। क्लाइंट एप्लिकेशन क्लाइंट_credentials वर्कफ़्लो का उपयोग करके Api को कॉल करेगा क्योंकि मैं प्रत्येक क्लाइंट एप्लिकेशन के लिए कई उपयोगकर्ता बनाना नहीं चाहता हूं जिन्हें एपि तक पहुंचने की आवश्यकता हो।

IdentityServer4 के साथ उपरोक्त सेटअप का उपयोग करना मेरे पास हैयह सही ढंग से client_Credentials वर्कफ़्लो के साथ काम कर रहा है। मैं जिस समस्या का सामना कर रहा हूँ, हालाँकि मुझे स्वयं को प्रमाणित करने के लिए अलग-अलग उपयोगकर्ता की आवश्यकता नहीं है मैं अभी भी जानना चाहता हूं कि वे कौन हैं, एक user_id के द्वारा। मैं टोकन अनुरोध में केवल & user_id = 9999 जोड़ सकता हूं, लेकिन अनुरोध किए जाने के समय मुझे यह जानकारी टोकनकर्ता से प्राप्त करने का कोई तरीका नहीं मिल सका। कुछ शोध के बाद मैं IExtensionGrantValidator में आया, जो मुझे एक cstom अनुदान प्रकार जोड़ने और अनुरोध को रोकने और कुछ कस्टम प्रसंस्करण करने की अनुमति देगा। समस्या तब भी है जब ऐसा लग रहा है जैसे मैंने इसे सही तरीके से सेट किया है फिर भी मुझे अमान्य_ग्रन्थ त्रुटि मिल रही है।

यहां कोड है:

public class CustomGrantValidator : IExtensionGrantValidator
{
public string GrantType => "custom_credentials";

public Task ValidateAsync(ExtensionGrantValidationContext context)
{
return Task.FromResult(context.Result);
}
}

नए क्लाइंट ब्लॉक में:

 AllowedGrantTypes =
{
GrantType.ClientCredentials,
"custom_credentials"
},

स्टार्टअप में

.AddExtensionGrantValidator<CustomGrantValidator>();

मैं IdentityServer4 और .net Core में नया हूं इसलिए मुझे यकीन है कि मैं यहां कुछ गलत कर रहा हूं या एक मूलभूत मैकेनिक को नहीं समझ रहा हूं।

उत्तर:

जवाब के लिए 0 № 1

मैंने यह पाया क्योंकि मैं एक ही त्रुटि के साथ समस्या हूँ, लेकिन मुझे यकीन है कि आपका सत्यापनकर्ता बेकार है क्योंकि यह कुछ भी नहीं करता है आपको परिणाम को इस तरह सेट करना होगा:

        var claims = new List<Claim>();

claims.Add(new Claim("sub", userToken));
claims.Add(new Claim("role", "admin"));

context.Result = new GrantValidationResult(userToken, "delegation", claims: claims);

हर उदाहरण मैंने देखा "" इस मूल्य को जोड़कर परिणाम निर्धारित करता है।