通过PHP RESTapi使用C#进行安全身份验证和请求


Secure authentication and requests with C# through a PHP REST api

简介

好的,我有一个网站(PHP(和一个数据库(MySQL(。你可以在这个网站上创建一个帐户,并编辑你的详细信息等(比如出生日期、真实姓名、地址等(。

现在,我想做的是创建一个桌面应用程序(很可能是带有WPF的c#(,它与网站上的RESTapi(PHP(交互,这将允许:

  • 直接从应用程序创建帐户
  • 登录到您的帐户
  • 可以直接从应用程序编辑您的详细信息

到目前为止,我只想做一个桌面应用程序,但它可能会演变成一个移动应用程序。不过我不认为这有什么关系。

创建帐户并登录

我正在努力创建帐户/登录部分。我希望它尽可能安全。在网站上,我使用password_hash(password_BCRYPT(将密码存储在数据库中,并使用密码验证来检查登录,费用为10。

关于应用程序,我认为应该将用户名和密码传递给RESTapi,然后直接在服务器端进行加密。但发送密码本身听起来很可怕,所以我想用一个只有应用程序和网站知道的密钥加密它,这样网站就可以计算出密码并在数据库中正确编码。

如果我是对的,我应该使用什么加密算法?如果没有,我该怎么做?

直接从应用程序编辑您的详细信息

我正在考虑执行以下操作:假设用户已经通过应用程序登录。如果身份验证成功,服务器会随机生成一个令牌(我可能会使用ircmaxell的Random Lib(,并将其作为回复发送给应用程序。从那时起,当应用程序想要向api发出请求时,它会将用户名添加到数据字符串中,并使用数据字符串加上令牌生成哈希(例如sha256(;然后,服务器可以使用存储在数据库中的令牌重复确切的过程,以确保用户实际上有权访问/修改他的详细信息,并且没有人试图假装自己不是用户。

我觉得问题是,如果有人在身份验证后听到第一个api回复,他就会得到令牌,并可以使用它来充当用户。用与密码相同的过程加密它是否足以确保这种情况不会发生?

最后但同样重要的是,如果我希望用户在下次启动应用程序时能够直接登录,我想我必须赋予令牌永久的耐用性,并将其存储在计算机上的文件或其他文件中。但这听起来并不安全,因为任何人都可以读取文件内容并计算出令牌。

最后的问题

所以。你觉得怎么样?这听起来不错吗?还是我完全偏离了轨道?

网站托管在http://*中,所以我想在这里使用HTTPS通信不是一个选项。我知道创造真正安全的东西是一个大问题,但我仍然想用我所拥有的东西尽可能安全。

非常感谢你的建议

顺便说一句,我试着把这件事说得尽可能清楚,希望它能奏效。我对安全、加密……几乎一无所知。。。所以你必须像一个3岁的孩子一样对我说话。

我认为我能给出的第一条也是最重要的建议是,除非你是绝对的专家,否则永远不要尝试推出自己的安全代码。您将希望在.net为您提供的框架的基础上构建一个解决方案。

第一件事——你的REST API。我建议构建在ASP.NETWebneneneba API之上。HTTPS在这里是强制性的-如果你的托管提供商不能给你,你需要一个新的托管提供商。它还方便地为您处理加密。

ASP有各种可用的安全选项,我会阅读本文以获得详细概述:https://docs.asp.net/en/latest/security/.使用现有的ASP选项还可以满足您对用户帐户创建和自助服务的要求。