我公开了一个.net WEB API,还有一个使用API的Xamarin Forms App,由于它管理的数据,该应用程序需要非常安全。
我将为WEB API创建HTTP证书。 Xamarin Forms应用程序将具有登录/密码以验证本地Active Directory。通过/ token端点,并在所有端点上使用Authorize属性来确保每个HTTP调用都有承载令牌,我使用此实现:
我的实施基于这个: http://bitoftech.net/2014/06/01/token-based-authentication-asp-net-web-api-2-owin-asp-net-identity/
此外,客户已要求我们进行客户端证书身份验证,我不明白这是如何完成的。 1.我需要在Xamarin项目中添加证书,对吧?我该如何添加?我该如何生成它? 2.在Web API中,我需要验证附加证书的每个http调用。 我发现了这个,但不确定它是否会起作用: http://www.razibinrais.com/secure-web-api-with-client-certificate/
然而,在调查此问题时,我还发现了一些关于证书固定的内容,这基本上是安全性的,反之亦然,这意味着Xamarin APP将验证服务器证书是否与正确的服务器(或类似的东西)相关联,所以没有办法让人在中间攻击。 我在这里找到了如何实现它: https://thomasbandt.com/certificate-and-public-key-pinning-with-xamarin
问题是: 1.我需要两者吗?
我应该在这次旅程中研究其他什么?
答案 0 :(得分:4)
证书锁定和客户端证书身份验证是两个截然不同的事情。证书固定可确保您的应用与正在与之通信的服务器通信。它还可以防止被窃听,这被称为“中间人”。攻击。我刚刚写了一篇关于这个on my blog的文章。
客户端证书身份验证以相反的方式工作。它增加了额外的安全层,因此您的服务器可以确保只有拥有证书的客户端才能与其成功通信。但是,由于可以在不费力的情况下对应用程序进行反编译,因此该客户端证书可以轻松地“反复”。由恶意用户获取。所以这不是一颗银弹。
根据我的经验,当存在企业移动管理解决方案(例如,Mobile Iron或Microsoft Intune或其他)时,客户端证书身份验证通常用于企业应用程序,其中EMM解决方案可以将证书推送给用户设备带外。
你应该同时使用吗?这实际上取决于客户的要求,因为它们可以缓解两个截然不同的问题。
您包含的Web API链接看起来应该是第一眼就能正确执行服务器作业。本文还包括如何使用Powershell命令生成客户端证书。
生成客户端证书:
<强>安装:强>
<强>用法:强>
X-ARR-ClientCert
标头。