我有这种情况,外部网站将通过网络将一些数据发送到我的网络应用程序,然后我必须处理该信息并在我的应用程序中完成一个过程。完成流程后,我需要返回原始的外部网站,并提供一些信息。
我的问题是关于安全性,我怎么知道提出请求的外部网站实际上是网站应该提出请求?如果你能指出我正确的方向会很棒!
我正在使用ASP.NET MVC4。
答案 0 :(得分:1)
对于此方案,证书身份验证最适合。我有许多外部客户端正在使用我的服务,并且证书身份验证正在按预期工作。
#Mick Wasson has written this post:
http://www.asp.net/web-api/overview/security/working-with-ssl-in-web-api
您可以从第三方购买证书,如:
答案 1 :(得分:0)
以下是可用选项。如果您的网络应用是公共网络服务,基本或代币可能是不错的选择。
调用者添加包含用户名和密码的HTTP授权标头。这些值基本上是纯文本的,仅使用base64编码进行简单的混淆。这通常需要安全套接字层(SSL)传输安全性(即端点) 暴露HTTPS地址)以保护明文用户名和密码。
提供一种更方便的方法,将用户名和密码放在HTTP标头中,为这些值提供加密。这是为了避免使用HTTPS。
使用身份验证服务器(如Windows Active Directory)提供集成的无缝凭据验证。这类似于Windows网络上与域集成以进行用户身份验证的Intranet站点。许多内部SharePoint站点使用此方法,以便公司的用户在访问Intranet时不必重新输入用户名和密码。
依靠调用者提供的证书来识别用户。这在公共网站或服务中不是很有用,但它非常适用于已知用户或设备的应用程序。这种方法的一个例子是基于设备的内部便携式 用于跟踪库存的仓储应用程序,或者可能是销售团队使用的一组iPad。在公司的组织结构中,用户群相对较小且定义明确。每个用户或设备都会获得一个证书,该证书可以在每次呼叫您的站点或服务时识别他(或它)。
在涉及第三方令牌发行者时使用(例如,OpenID,OAuth)。这样可以减轻您的服务负担,即存储和验证用户的凭据。以下是它的工作原理(一般来说):
主叫方首先使用您的服务信任的令牌颁发者验证用户名和密码。成功验证后,令牌发行者向呼叫者提供令牌。一旦呼叫者拥有该令牌,它就会使用它来呼叫您的服务。由于您的服务信任呼叫者用于凭证验证的发卡行,因此您的服务可以信任该令牌可以安全地识别用户,因此无需担心验证用户凭证本身。
来源: ASP.NET Web API 2: Building a REST Service from Start to Finish。