首页 > 解决方案 > 用户从桌面应用程序登录到网站最佳实践 (.NET)

问题描述

更新:我回顾了我写的内容,通信层太多。我将继续前进并处理 Windows 窗体中的所有身份验证,在那里生成一个令牌,并使用它在本地打开 Web 应用程序。我只需要弄清楚如何在可以接受模型的 Windows 窗体中打开一个网站。现在我可以做,但我只能传递 1 个对象:

string endpointURL = "https://localhost:44318/api/login?token=" + tokenstring;

我宁愿发布一个模型,然后通过在 Web 应用程序中点击这个控制器端点来触发它以打开网页

 [HttpPost]
        public ActionResult SecureLogin([FromBody]AuthenticateModel model)
        {
            return RedirectToAction("MainView", "Home", model.userID);
        }

结束更新

我正在开发一个 .NET Core Web 应用程序。用户将从我也在制作的已安装的 Windows 窗体应用程序中登录。我还没有完成这种特定的登录方式,所以我正在寻找一些关于最佳实践的建议。这是我目前在开发中工作的流程:

  1. 桌面应用程序接受凭据
  2. 接受凭据后,将使用 json 登录请求将请求发送到 Web 应用服务器
        string url = "https://localhost:44318/api/TestPostData";
                    var httpWebRequest = (HttpWebRequest)WebRequest.Create(url);
                    httpWebRequest.ContentType = "application/json; charset=utf-8";
                    httpWebRequest.Method = "POST";
                    httpWebRequest.Accept = "application/json; charset=utf-8";
     using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
                {
                    string loginjson = new JavaScriptSerializer().Serialize(new
                    {
                        Username = "postTest",
                        Password = "password"
                    });
                    streamWriter.Write(loginjson);
                    streamWriter.Flush();
                    streamWriter.Close();
                    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
  1. Web 应用程序听到登录请求,使用 DB 凭据验证是否良好

  2. 如果凭据良好,服务器将生成 JSON Web Token。

  3. 令牌将作为绑定到该用户 ID 的临时登录权限保存到数据库

  4. 令牌被发送回本地客户端,并放入 URL 以打开 Web 应用程序

  5. Web 应用程序看到此令牌用于访问平台,验证它是好的并将数据关联输出到用户 ID

标签: json.net-core

解决方案


一些想法:

  1. Json Web 令牌的美妙之处在于,因为它们是加密签名的,所以您不需要将它们存储在数据库中。将用户名与 IP 等其他有用数据一起放入有效负载中,然后直接检查它们的有效性,从而为自己节省一些数据库开销。
  2. 通过限制令牌的有效性来防止令牌泄露,包括到期时间和一个 IP 地址。
  3. 根据您的身份验证后端的工作方式,尽可能靠近用户安全地散列密码。
  4. Json Web 令牌最好使用承载机制放在 http 授权标头中。
  5. 在实现这一点时,请坚持使用基于受信任且维护良好的库的实现。尽量避免自己滚动。魔鬼通常在细节中。

推荐阅读