c# बाहरी वेब सेवा के खिलाफ एएसपी.नेट एमवीसी फॉर्म प्रमाणीकरण



asp.net asp.net-mvc (1)

आप फॉर्म प्रमाणीकरण कुकी के उपयोगकर्ता डेटा भाग में प्रमाणीकरण टोकन स्टोर कर सकते हैं। इस तरह यह प्रत्येक अनुरोध पर उपलब्ध होगा।

तो उदाहरण के लिए जब आप किसी उपयोगकर्ता के प्रमाण-पत्रों को सत्यापित करते हैं तो आप टोकन प्राप्त करने के लिए वेब सेवा से पूछ सकते हैं और फ़ॉर्म प्रमाणीकरण कुकी मैन्युअल रूप से बना और उत्सर्जित कर सकते हैं:

[HttpPost]
public ActionResult LogOn(string username, string password)
{
    // TODO: verify username/password, obtain token, ...
    // and if everything is OK generate the authentication cookie like this:

    var authTicket = new FormsAuthenticationTicket(
        2,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(FormsAuthentication.Timeout.TotalMinutes),
        false,
        "some token that will be used to access the web service and that you have fetched"
    );
    var authCookie = new HttpCookie(
        FormsAuthentication.FormsCookieName, 
        FormsAuthentication.Encrypt(authTicket)
    )
    {
        HttpOnly = true
    };
    Response.AppendCookie(authCookie);

    // ... redirect
}

फिर आप एक कस्टम प्राधिकृत विशेषता लिख ​​सकते हैं जो इस जानकारी को पढ़ेगा और कस्टम जेनेरिक पहचान सेट करेगा:

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, Inherited = true, AllowMultiple = true)]
public class MyAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var isAuthenticated = base.AuthorizeCore(httpContext);
        if (isAuthenticated) 
        {
            string cookieName = FormsAuthentication.FormsCookieName;
            if (!httpContext.User.Identity.IsAuthenticated ||
                httpContext.Request.Cookies == null || 
                httpContext.Request.Cookies[cookieName] == null)
            {
                return false;
            }

            var authCookie = httpContext.Request.Cookies[cookieName];
            var authTicket = FormsAuthentication.Decrypt(authCookie.Value);

            // This is where you can read the userData part of the authentication
            // cookie and fetch the token
            string webServiceToken = authTicket.UserData;

            IPrincipal userPrincipal = ... create some custom implementation
                                           and store the web service token as property

            // Inject the custom principal in the HttpContext
            httpContext.User = userPrincipal;
        }
        return isAuthenticated;
    }
}

अंत में अपने नियंत्रकों / कार्यों को सजाने के लिए जिन्हें इस विशेषता के साथ प्रमाणीकरण की आवश्यकता होती है:

[MyAuthorize]
public ActionResult Foo()
{
    // HttpContext.User will represent the custom principal you created
    // and it will contain the web service token that you could use to 
    // query the remote service
    ...
}

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

मैंने प्रपत्र प्रमाणीकरण का उपयोग करना शुरू कर दिया और एक कस्टम सदस्यता प्रदाता को लागू करना शुरू किया - मैं ValidateUser() को पसंद करने के लिए आवश्यक सभी विधियों को लागू कर सकता हूं, लेकिन मेरी समस्या यह है कि सीआरएम वेब सेवा में लॉग इन करने के बाद आपको टोकन दिया जाता है प्रत्येक आगामी वेब सेवा कॉल के साथ पारित किया जाना है, और मुझे यकीन नहीं है कि मैं इसे कहां स्टोर कर सकता हूं।

तो मेरे प्रश्न हैं:

  • प्रपत्र प्रमाणीकरण यहां जाने का तरीका है, या यह मेरे सभी प्रमाणीकरण को संभालने और सत्र में टोकन को स्टोर करने के लिए और अधिक सरल होगा।
  • यदि फॉर्म प्रमाणीकरण जाने का तरीका है, तो मुझे इस तरह की अतिरिक्त जानकारी कहां और कैसे स्टोर करनी चाहिए। ऐसा लगता है कि प्रपत्र प्रमाणीकरण का उपयोग करना पसंद है, लेकिन उसके बाद एक कुकी या सत्र में अतिरिक्त जानकारी (जो प्रमाणीकरण से संबंधित है) के भार को रैमिंग करना एक गड़बड़ होगा?

किसी भी सलाह की सराहना की जाएगी





forms-authentication