validation站点/应用程序以访问Web API服务

简短问题:我在.NET中使用Web API服务,并且只使用HTML和AngularJS创建了一个站点。

如何仅通过我的网络授权我的服务?


我正在寻找一个似乎很常见的问题的安全答案,但事实并非如此。 我在后期阅读了很多答案,想法和各种事情,但我找不到解决方案。

让我们假设我有一个来自MS的Web Api服务(最新的服务)。 所以我必须使用需要消耗它的应用程序。 我们来定义两个场景。

场景1:

在同一个IIS中,我有一个ASP.NET MVC 3/4,其特点是所有MVC工作都在客户端,由AngularJS制作,因此App直接从JavaScript指向Web Api服务。

场景2:

我有一个第三方应用程序直接指向Web Api服务,并且位于其他网络/站点/任何但相关的任何内容。

所以,我的问题是:

如何validation两个系统,以便Web Api服务提供对两个系统的访问(我不在乎是否相同),并且不向例如具有REST客户端的人提供访问权限,并且登录到具有用户/通行证授权的网站? 我希望这两个例子都能说明我感兴趣的观点。

请在下面评论您需要以更好的方式改进此问题!

顺便说一句,不,不能使用混淆。 我想到了一个令人耳目一新的令牌,但我无法理解。

我将如何使用您的方案1设置身份validation:

我将强制静态文件通过服务器以确保身份validation

Web.config文件

            

这将允许我在我的web.config中设置 ,如:

    

要么

     

另外,我将设置我的登录页面:

   

对于场景2

您可能需要启用CORS,如果是这种情况,您需要:

设置config选项config.EnableCors(); 在你的Register方法中; 您还需要通过使用[EnableCors]属性以及控制器的声明来启用ApiController中的CORS,以下是我如何操作的示例:

  [EnableCors(origins: "http://localhost:49595", headers: "*", methods: "*")] public class ValuesController : ApiController { ... 

最后,为了保护WebApi,我们需要在控制器中使用属性[Authorize] ,并且很可能需要定义自定义身份validation方法来授权第二个调用者。 您可以按照以下步骤操作:

  • 如何设置WebApi自定义授权

不完全是问题的答案,但我想说的是评论太久了,所以……

有多种方法可以保护RESTful服务 ,但是如果要限制对它的访问,则主要有两种方法:

  • 仅从内部网络或某种VPN使用该服务(即控制访问该服务的环境,并允许仅从某些特定来源访问);
  • 让服务暴露给公众,然后让应用程序或服务器删除任何不符合某些要求的请求(即未经过身份validation,缺少令牌,错误签名等)。

根据您的工作情况,以上都不适用。

你想要的(我从你的问题中理解)是将访问你的服务的客户限制为两个。 在我的头脑中,我只能想到相互认证的HTTPS。 您使用客户端证书来validation客户端。 IIS将处理连接,因此如果您的客户端在未提供证书的情况下发出请求,则拒绝该请求。 除非他们拥有您提供的客户证书,否则任何人都无法访问您的服务。

所以这是为每个客户发放一个证书的问题。 这适用于第三方应用,但由于浏览器直接访问您的API,因此可能无法实施。 这意味着您需要为访问MVC应用程序的每个浏览器安装证书,或者在MVC服务器端移动对API的访问权限,而不再直接从AngularJS调用它。 如果你可以做其中任何一个都没关系,否则它会回到绘图板……

希望这可以帮助! 如果您找到合适的解决方案,请将其作为答案发布在SO上。