asp.net mvc MVC 5 प्रमाणीकरण मोड के साथ बाहरी प्रमाणीकरण=फ़ॉर्म




asp.net-mvc authentication (2)

मैं बाहरी प्रमाणीकरण के साथ एक सरल MVC 5 ऐप बनाने के लिए इस ट्यूटोरियल का अनुसरण कर रहा हूं। यह ठीक काम कर रहा है, लेकिन, अगर मैं authentication mode="None" को authentication mode="Forms" बदलता हूं authentication mode="Forms" यह काम करना बंद कर देता है।

मैं पर रिक्त हो रहा हूँ:

await HttpContext.GetOwinContext().Authentication.GetExternalLoginInfoAsync()

मैं कुछ के बारे में बहुत कुछ पढ़ रहा हूं ताकि रीडायरेक्ट पर फ़ॉर्म एटिफिकेशन को दबाया जा सके। मुझे नहीं पता कि यह सही रास्ता है, लेकिन मैंने इस न्यूजेट पैकेट को स्थापित करने की कोशिश की और समस्या अभी भी वहां है।

तो, क्यों मैं हर बार रिक्त हो रहा हूँ मैं प्रमाणीकरण मोड बदल रहा हूँ?


Answer #1

आमतौर पर, आप authentication mode="None" सेट करेंगे, जब उपयोगकर्ताओं को सभी पर प्रमाणीकृत नहीं किया जाता है या यदि आप कस्टम प्रमाणीकरण कोड विकसित करने की योजना बना रहे हैं। प्रमाणीकरण के लिए ASP.NET पहचान का उपयोग करने के लिए MVC 5 को अपडेट किया गया है।

एएसपी। नेट पहचान, दावे-आधारित प्रमाणीकरण का समर्थन करती है, जहां उपयोगकर्ता की पहचान दावों के समूह के रूप में प्रदर्शित की जाती है। यहां, आप authentication mode="Forms" सेट करते हैं, दावे काम नहीं करेंगे, क्योंकि ASP.NET Forms Authentication दावों का समर्थन नहीं करता है। यही कारण है कि आप एक शून्य मूल्य मिल


Answer #2

मैं इस काम को प्राप्त करने में सक्षम था (OWIN और फॉर्मएटिफिकेशन) Response.SuppressFormsAuthenticationRedirect = true जोड़कर ChallengeResult रेसल्ट क्लास के लिए Response.SuppressFormsAuthenticationRedirect = true

यदि आप ट्यूटोरियल का पालन कर रहे हैं, तो यह कोड है:

public class ChallengeResult : HttpUnauthorizedResult
{
    public ChallengeResult(string provider, string redirectUri)
        : this(provider, redirectUri, null)
    {
    }

    public ChallengeResult(string provider, string redirectUri, string userId)
    {
        LoginProvider = provider;
        RedirectUri = redirectUri;
        UserId = userId;
    }

    public string LoginProvider { get; set; }
    public string RedirectUri { get; set; }
    public string UserId { get; set; }

    public override void ExecuteResult(ControllerContext context)
    {
        // this line did the trick
        context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;

        var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
        if (UserId != null)
        {
            properties.Dictionary[XsrfKey] = UserId;
        }

        context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
    }
}




owin