Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过PHP REST api使用C#保护身份验证和请求 介绍_C#_Php_Security_Authentication_Encryption - Fatal编程技术网

通过PHP REST api使用C#保护身份验证和请求 介绍

通过PHP REST api使用C#保护身份验证和请求 介绍,c#,php,security,authentication,encryption,C#,Php,Security,Authentication,Encryption,好的,我有一个带有数据库(MySQL)的网站(PHP)。你可以在这个网站上创建一个帐户,编辑你的详细信息等等(比如出生日期、真实姓名、地址等等) 现在,我想做的是创建一个桌面应用程序(最有可能是带有WPF的c#),该应用程序与网站上的REST api(PHP)交互,这将允许: 直接从应用程序创建帐户 登录到您的帐户 能够直接从应用程序编辑您的详细信息 到目前为止,我只想做一个桌面应用程序,但它可能会演变成一个移动应用程序。但我认为这与此无关 创建帐户和登录 我正在努力创建帐户/登录部分。我希

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

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

  • 直接从应用程序创建帐户
  • 登录到您的帐户
  • 能够直接从应用程序编辑您的详细信息
到目前为止,我只想做一个桌面应用程序,但它可能会演变成一个移动应用程序。但我认为这与此无关

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

关于应用程序,我认为应该将用户名和密码传递给RESTAPI,并直接在服务器端进行加密。但是发送密码本身听起来很糟糕,所以我考虑使用只有应用程序和网站知道的密钥对其进行加密,以便网站能够找出密码并在数据库中正确编码

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

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

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

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

最后问题 所以。你怎么认为?听起来不错还是我完全偏离了轨道

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

非常感谢您的建议。:)


顺便说一句,我试着尽可能清楚地说明这一点,希望它能起作用。我对安全、加密等方面的知识几乎一无所知。。。因此,你必须像对一个3岁的孩子那样对我说话。

我想我能给你的第一条也是最重要的建议是,除非你是一个绝对的专家,否则永远不要尝试使用你自己的安全代码。您需要基于.net为您提供的框架构建一个解决方案

第一件事-您的RESTAPI。我建议在ASP.NETWebAPI之上构建。HTTPS在这里是强制性的-如果你的主机提供商不能给你,你需要一个新的主机提供商。它还方便地为您进行加密


ASP有各种可用的安全选项,我会阅读下面的详细概述:。使用现有的ASP选项还可以满足您在用户帐户创建和自助服务方面的需求。

我想了解更多关于为什么HTTPS不是选项的信息?如果您的主机提供商无法为您提供HTTPS,这确实会对他们是否适合这份工作产生负面影响。您永远不应该重新发明自己的身份验证、密码管理或加密。使用著名的库和模式实际上我的网站使用的是PHP,我很可能会用PHP制作API。但是谢谢你的链接,我来看看啊,是的。那么,您可能需要在问题中指定。您是对的。:)我将尝试搜索库,以涵盖客户端和服务器端的通信部分,并找出如何处理密码问题。如果PHP没有自己的库和模式来帮助您管理密码,我会感到震惊-我只是不会对它们有丝毫模糊,因为我的重点是.net:)