WPF-WebAPI客户端-如何处理身份验证密码

亚历克斯

我正在使用ASP.Net WebAPI和WPF开发客户端/服务器应用程序。现在,我正在考虑使用基于https的基本身份验证来对客户端进行身份验证。您可以提出更好的解决方案,但是Windows身份验证和服务器端会话对我不起作用。

对于基本身份验证,我需要使用纯文本(base64)客户端上的密码,以便在每次请求时通过电线发送密码,对吗?

但是我不希望用户在每次请求时都重新输入密码,因此我在应用程序启动时有一个登录窗口。

WPF PasswordBox使用SecureString,并且未绑定到视图模型。但是至少在请求之前,我必须将密码作为普通字符串获取,才能将其编码为base64。因此,无论我做什么,迟早密码都会以纯文本格式存储在RAM中。

保留密码以备后用的最佳做法是什么?

  • 缓存密码框
  • 缓存SecureString
  • 缓存纯文本字符串,因为它将以两种方式都存在于RAM中
  • 缓存base64编码的字符串,因为至少它是晦涩的;)
  • ...?

那么,如何以一种合理的安全方式处理此问题?大型企业的其他应用程序(MS,Google,Apple等)不会在每次通话时都要求输入密码,因此必须找到一种方法。

斯特凡

您应该阅读身份验证令牌,这是一种常用的方法,而asp.net-web-api框架提供了OWin提供的许多功能。

基本上流程如下:

  • 在您的Web API上进行身份验证。
  • 返回令牌
  • 在随后的每个web-api / http请求的标头中使用此令牌

好处:

  • 不将用户名和密码存储在内存中(嗯,仅用于单个呼叫)
  • 令牌可以在服务器端失效
  • 使用web-api2开箱即用的功能

您可以在此处阅读有关内容:http : //bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/

至于您的WPF客户:

您可以使用以下方法为http / web-api请求创建.net客户端:

HttpClient https://msdn.microsoft.com/zh-CN/library/system.net.http.httpclient%28v=vs.118%29.aspx

一些伪代码如下所示:

public async Task<IEnumerable<DataContainer>> GetDataForTarget(string id)
{
    var requestMessage = new HttpRequestMessage(HttpMethod.Post, new Uri(new Uri(Host),
        string.Format("api/Data?id={0}", id)));

        var response = await Client.SendAsync(requestMessage);

        //etc...
}

注意:要使基于令牌的安全性正常工作,您需要使用https,否则令牌将被拦截。知道令牌的每个人都可以代表相应的用户调用Web-api。因此,基本上,问题从保护密码转移到保护令牌。令牌的好处是它的生存期应该比密码短得多,这就是为什么它更安全的原因。尽管如此,将令牌存储在中还是有争议的SecureString

同时在服务器端

如果用户可以选择自己的密码,则可以在服务器上使用单向加密机制来存储密码,这是一个很好的做法(如果不这样做,甚至是不道德的)。

这可以通过使用(加密强)随机salt和使用的非对称hash加密来实现salt

要验证用户,只需使用存储的盐加密输入的密码,然后检查它是否为您提供存储的哈希值。在这种情况下,实际的密码将不会存储在您的服务器上,并且无法检索用户密码(..嗯……排除了一些技术细节)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WebAPI 2的客户端身份验证

来自分类Dev

客户端的客户端密码验证失败,身份验证代码流上的客户端密码无效

来自分类Dev

如何使用WPF在客户端存储敏感信息

来自分类Dev

redisai客户端密码/身份验证过程

来自分类Dev

如何强制ssh客户端仅使用密码身份验证?

来自分类Dev

webapi和winform客户端的auth0角色身份验证

来自分类Dev

Sharepoint客户端身份验证

来自分类Dev

WebAPI:如何从客户端的HttpResponseMessage类读取消息

来自分类Dev

Java:如何添加SSL客户端身份验证

来自分类Dev

Owin身份验证-如何获取请求身份验证令牌的客户端的IP地址

来自分类Dev

ASP.NET MVC登录客户端/ASP.NET WebAPI身份验证/授权服务器分离

来自分类Dev

客户端模式下的OpenSSL:验证身份验证

来自分类Dev

如果signalR服务器(WPF)意外停止,如何注销所有客户端?

来自分类Dev

如何在 WPF 上的 WebBrowser 中从 javascript 调用客户端代码?

来自分类Dev

客户端使用OpenPop进行身份验证时,密码是否需要编码?

来自分类Dev

Java异常客户端身份验证TLS:密码不能为空

来自分类Dev

Django使用密码身份验证设置elasticsearch客户端

来自分类Dev

Java异常客户端身份验证TLS:密码不能为空

来自分类Dev

WPF Socket 客户端结构

来自分类Dev

如何在httpClient 4.3.x中强制http客户端不自动处理身份验证挑战?

来自分类Dev

没有客户端身份验证的ActiveMQ。客户端需要密钥库吗?

来自分类Dev

Caldav(和carddav)兼容的客户端,支持TLS客户端证书身份验证

来自分类Dev

Angular JS SSL客户端身份验证

来自分类Dev

致命:[GIT客户端]身份验证失败

来自分类Dev

申请客户端证书进行身份验证

来自分类Dev

使用HttpClient进行客户端身份验证

来自分类Dev

Resteasy客户端的基本身份验证

来自分类Dev

Jhipster + REST客户端+身份验证

来自分类Dev

WildFly 9启用客户端证书身份验证

Related 相关文章

  1. 1

    WebAPI 2的客户端身份验证

  2. 2

    客户端的客户端密码验证失败,身份验证代码流上的客户端密码无效

  3. 3

    如何使用WPF在客户端存储敏感信息

  4. 4

    redisai客户端密码/身份验证过程

  5. 5

    如何强制ssh客户端仅使用密码身份验证?

  6. 6

    webapi和winform客户端的auth0角色身份验证

  7. 7

    Sharepoint客户端身份验证

  8. 8

    WebAPI:如何从客户端的HttpResponseMessage类读取消息

  9. 9

    Java:如何添加SSL客户端身份验证

  10. 10

    Owin身份验证-如何获取请求身份验证令牌的客户端的IP地址

  11. 11

    ASP.NET MVC登录客户端/ASP.NET WebAPI身份验证/授权服务器分离

  12. 12

    客户端模式下的OpenSSL:验证身份验证

  13. 13

    如果signalR服务器(WPF)意外停止,如何注销所有客户端?

  14. 14

    如何在 WPF 上的 WebBrowser 中从 javascript 调用客户端代码?

  15. 15

    客户端使用OpenPop进行身份验证时,密码是否需要编码?

  16. 16

    Java异常客户端身份验证TLS:密码不能为空

  17. 17

    Django使用密码身份验证设置elasticsearch客户端

  18. 18

    Java异常客户端身份验证TLS:密码不能为空

  19. 19

    WPF Socket 客户端结构

  20. 20

    如何在httpClient 4.3.x中强制http客户端不自动处理身份验证挑战?

  21. 21

    没有客户端身份验证的ActiveMQ。客户端需要密钥库吗?

  22. 22

    Caldav(和carddav)兼容的客户端,支持TLS客户端证书身份验证

  23. 23

    Angular JS SSL客户端身份验证

  24. 24

    致命:[GIT客户端]身份验证失败

  25. 25

    申请客户端证书进行身份验证

  26. 26

    使用HttpClient进行客户端身份验证

  27. 27

    Resteasy客户端的基本身份验证

  28. 28

    Jhipster + REST客户端+身份验证

  29. 29

    WildFly 9启用客户端证书身份验证

热门标签

归档