如何从ASP接收身份验证失败.上的NET MVC5+Identity服务器.NET客户端

本文关键字:NET 上的 MVC5+Identity 服务器 客户端 失败 身份验证 ASP | 更新日期: 2023-09-27 18:00:03

我正在使用ASP。NET MVC5,服务器上有最新的Identity和Signalr。NET客户端应用程序。目前我已经实现了有效的身份验证逻辑,但我不知道如何在中获得身份验证失败。NET桌面客户端?

这是我的。NET桌面客户端身份验证代码:

        private static async Task<bool> AuthenticateUser(string siteUrl, string email, string password)
    {
        try
        {
            var handler = new HttpClientHandler { CookieContainer = new CookieContainer() };
            using (var httpClient = new HttpClient(handler))
            {
                var loginUrl = siteUrl + "Account/Login";
                _writer.WriteLine("Sending http GET to {0}", loginUrl);
                var response = await httpClient.GetAsync(loginUrl);
                var content = await response.Content.ReadAsStringAsync();
                _verificationToken = ParseRequestVerificationToken(content);
                content = _verificationToken + "&UserName="+email+"&Password="+password+"&RememberMe=false";
                _writer.WriteLine("Sending http POST to {0}", loginUrl);
                response = await httpClient.PostAsync(loginUrl, new StringContent(content, Encoding.UTF8, "application/x-www-form-urlencoded"));
                content = await response.Content.ReadAsStringAsync();
                _verificationToken = ParseRequestVerificationToken(content);

                _connection.CookieContainer = handler.CookieContainer;
                return true;
            }
        }
        catch (Exception ex)
        {
            Logger.Log(ex, "Auth");
            return false;
        }
    }

其中_connection是一个集线器连接,用于接收集线器身份验证所需的cookie。问题是httpCLlient。PostAsync()总是返回有效的结果,我不知道如何实现身份验证失败检测。

这是服务器登录代码:

        // POST: /Account/Login
    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindAsync(model.UserName, model.Password);
            if (user != null)
            {
                await SignInAsync(user, model.RememberMe);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }
        // If we got this far, something failed, redisplay form
        return View(model);
    }

失败时,它只是在页面上添加错误字符串。

请建议实现auth-result的更好方法。

如何从ASP接收身份验证失败.上的NET MVC5+Identity服务器.NET客户端

奇怪的是,我对这个问题没有一个答案。我找到了一个中间解决方案:

  1. 为登录和索引页面添加唯一的隐藏标签(在失败登录页面上再次显示,在成功索引页面上显示)

    <div style="display: none;" id="@SharedData.Constants.INDEX_PAGE_TAG"></div>
    
  2. 在。NET客户端检查内容字符串是否存在特定标记

我不认为这是性能方面的解决方案,但至少它有效。。。