การตรวจสอบสิทธิ์ผู้ใช้ ASP.NET MVC จากแอปพลิเคชัน WPF

ฉันจะตรวจสอบผู้ใช้ (ด้วยชื่อผู้ใช้และรหัสผ่าน) ของแอปพลิเคชัน ASP.NET MVC ได้อย่างไร ฉันกำลังพยายามทำสิ่งนี้โดยใช้ WebClient ผ่าน NetworkCredentials โพสต์คำขอไปยังแอปพลิเคชัน ASP.NET MVC จากไคลเอนต์ WPF ของฉัน ฉันจะจัดการคำขอนี้บนเซิร์ฟเวอร์ได้อย่างไร ฉันจะรับชื่อผู้ใช้และรหัสผ่านที่ส่งผ่านได้อย่างไร

ฉันกำลังใช้การรับรองความถูกต้องของแบบฟอร์มในแอป ASP.NET MVC (ค่าเริ่มต้นที่สร้างขึ้นด้วยโครงการใหม่)


person Igal Tabachnik    schedule 23.09.2010    source แหล่งที่มา


คำตอบ (2)


การรับรองความถูกต้องของแบบฟอร์มทำงานในสองขั้นตอน:

  1. ผู้ใช้ไปที่หน้าเข้าสู่ระบบและป้อนชื่อผู้ใช้และรหัสผ่านแล้วส่งไปยังเซิร์ฟเวอร์
  2. เซิร์ฟเวอร์จะตรวจสอบและหากถูกต้องก็จะส่งคุกกี้การรับรองความถูกต้องซึ่งส่งไปยังไคลเอนต์ ลูกค้าจัดเก็บคุกกี้นี้และส่งไปตามแต่ละคำขอที่ตามมาไปยังเซิร์ฟเวอร์

ดังนั้นเพื่อให้บรรลุเป้าหมายนี้ในแอปพลิเคชัน WPF คุณจะต้องได้รับคุกกี้การตรวจสอบสิทธิ์ก่อน ดังนั้นก่อนอื่นให้ส่งคำขอ POST ไปที่หน้าเข้าสู่ระบบพร้อมกับชื่อผู้ใช้และรหัสผ่านแล้วอ่านคุกกี้ที่ส่งคืน (สำหรับสิ่งนี้คุณต้องตั้งค่าคุณสมบัติ CookieContainer บน HttpWebRequest เพื่อให้สามารถจับคุกกี้ได้) เมื่อคุณมีคุกกี้แล้ว คุณจะใช้คอนเทนเนอร์คุกกี้ซ้ำในการเรียกไปยังเพจที่ได้รับการตรวจสอบสิทธิ์ครั้งต่อๆ ไป

คุณสามารถชำระเงินสิ่งนี้ โค้ดตัวอย่างเพื่อช่วยเหลือคุณ (เพียงแทนที่ที่อยู่และชื่อพารามิเตอร์)

person Darin Dimitrov    schedule 23.09.2010
comment
เยี่ยมมาก สิ่งที่ฉันต้องการ! ขอบคุณมาก! - person Igal Tabachnik; 23.09.2010
comment
ในโค้ดตัวอย่างของลิงก์ที่คุณให้มา ฉันได้รับข้อผิดพลาด 500 จากเซิร์ฟเวอร์ - person Henrique de Sousa; 11.02.2015

รหัสนี้ใช้ได้ผลสำหรับฉัน โดยใช้แนวทางของ Darin และคลาส WebClientEx จากลิงก์ของพวกเขา แบบฟอร์ม WPF ของฉันต้องตรวจสอบสิทธิ์กับแอป MVC และจัดเก็บชื่อและค่าของคุกกี้การตรวจสอบสิทธิ์ที่ส่งคืนในคุณสมบัติคงที่ CookieName และ CookieValue ฟังก์ชัน CreateUser() จะสามารถเข้าถึงการดำเนินการที่ปลอดภัยในแอป MVC

    //************************************************
    //************************************************
    private void Authenticate(object sender, RoutedEventArgs e)
    {
        using (var client = new WebClientEx())
        {
            var values = new NameValueCollection
            {
                { "UserName", "xxx" },
                { "Password", "yyy" },
            };

            var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Account/Login", values);
            var responseString = Encoding.ASCII.GetString(byteResponse); //debugging

            CookieCollection authCookie = client.CookieContainer.GetCookies(new Uri("http://localhost/"));
            if (authCookie.Count > 0)
            {
                CookieName = authCookie[0].Name;
                CookieValue = authCookie[0].Value;
            }
        }
    }

    //************************************************
    //************************************************
    private void CreateUser(object sender, RoutedEventArgs e)
    {
        using (var client = new WebClientEx())
        {
            var user = new NameValueCollection
            {
                {"FirstName" , "Xavier"},
                {"LastName" , "McLann"},
                {"EmailAddress" , "[email protected]"},
                {"Phone" , "234445585"}
            };

            if (!String.IsNullOrEmpty(CookieName) && !String.IsNullOrEmpty(CookieValue))
                client.CookieContainer.Add(new Cookie(CookieName, CookieValue,"/","localhost"));

            var byteResponse = client.UploadValues("http://localhost/MyMvcApp/Home/Create", user);
            var responseString = Encoding.ASCII.GetString(byteResponse); //debugging
        }
    }
person taylor michels    schedule 15.08.2013