2

ASP.NET MVC アプリケーションのユーザーを (ユーザー名とパスワードで) 認証するにはどうすればよいですか? WebClientこれを使用して、渡しNetworkCredentialsて、WPF クライアントから ASP.NET MVC アプリケーションに要求を投稿しようとしています。サーバーでこのリクエストを処理するにはどうすればよいですか? 渡されたユーザー名とパスワードを取得するにはどうすればよいですか?

ASP.NET MVC アプリ (新しいプロジェクトで作成される既定) でフォーム認証を使用しています。

4

2 に答える 2

5

フォーム認証は2つのステップで機能します。

  1. ユーザーはログインページに移動し、ユーザー名とパスワードを入力してサーバーに送信します
  2. サーバーはそれらを検証し、それらが正しい場合は、クライアントに送信される認証Cookieを発行します。クライアントはこのCookieを保存し、後続の各リクエストに沿ってサーバーに送信します。

したがって、WPFアプリケーションでこれを実現するには、最初に認証Cookieを取得する必要があります。したがって、最初にPOSTリクエストをユーザー名とパスワードとともにログインページに送信し、返されたCookieを読み取ります(このためには、CookieをキャッチできるようにHttpWebRequestのCookieContainerプロパティを設定する必要があります)。Cookieを取得したら、認証されたページへの後続の呼び出しでCookieコンテナを再利用します。

このサンプルコードをチェックアウトして支援することができます(アドレスとパラメーター名を置き換えるだけです)。

于 2010-09-23T06:28:20.357 に答える
1

このコードは、Darin のアプローチとリンクからの WebClientEx クラスを使用して、私にとってはうまくいきました。私の WPF フォームは、MVC アプリに対して認証し、返された認証 Cookie の名前と値を静的プロパティ 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" , "xavier@aol.com"},
                {"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
        }
    }
于 2013-08-15T20:05:02.237 に答える