質問

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

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

役に立ちましたか?

解決

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

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

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

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

他のヒント

このコードは、DarinのアプローチとリンクからWebClientExクラスを使用して、私のために機能しました。私のWPFフォームは、MVCアプリに認証し、返された認証Cookieの名前とValueを静的プロパティ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
        }
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top