C# 验证网站/应用程序以访问Web API服务
简短问题: 我在.NET中有一个Web API服务,还有一个只使用HTML和AngularJS创建的站点 如何仅授权我的网站使用我的服务?C# 验证网站/应用程序以访问Web API服务,c#,asp.net,asp.net-mvc,web-services,angularjs,C#,Asp.net,Asp.net Mvc,Web Services,Angularjs,简短问题: 我在.NET中有一个Web API服务,还有一个只使用HTML和AngularJS创建的站点 如何仅授权我的网站使用我的服务? 我正在寻找一个安全的答案来解决一个看似常见但却并非如此的问题。在最近的几天里,我读了很多答案、想法和各种各样的东西,但我找不到解决办法 让我们假设我有一个来自MS的Web Api服务(最新的一个)。 因此,我必须使用需要的应用程序。让我们定义两个场景 场景1: 在同一个IIS中,我有一个ASP.NET MVC 3/4,其特殊性是所有MVC工作都在客户端,由
我正在寻找一个安全的答案来解决一个看似常见但却并非如此的问题。在最近的几天里,我读了很多答案、想法和各种各样的东西,但我找不到解决办法 让我们假设我有一个来自MS的Web Api服务(最新的一个)。 因此,我必须使用需要的应用程序。让我们定义两个场景 场景1: 在同一个IIS中,我有一个ASP.NET MVC 3/4,其特殊性是所有MVC工作都在客户端,由AngularJS制作,因此应用程序直接从JavaScript指向Web Api服务 场景2: 我有一个直接指向WebAPI服务的第三方应用程序,它位于其他网络/站点/任何不相关的地方 所以,我的问题是: 如何对两个系统进行身份验证,以使Web Api服务能够访问这两个系统(我不在乎这两个系统是否相同),而不允许使用REST客户端的人访问,并以用户/通过授权登录到站点?我希望这两个例子给出了我感兴趣的观点 请在下面评论您需要以更好的方式改进此问题的任何内容 顺便说一下,不,不能使用模糊处理。
我想到了一个让人耳目一新的标记,但我想不出来。这不完全是对这个问题的回答,但我想说的话太长,无法发表评论,所以 有,但如果您想限制对它的访问,主要有两种方法:
- 仅从内部网络或通过某种VPN使用服务(即控制访问服务的环境,仅允许从某些特定来源访问)李>
- 将服务公开给公众,然后让应用程序或服务器删除任何不符合某些要求的请求(即未经身份验证、缺少令牌、错误签名等)
希望这有帮助!如果您找到合适的解决方案,请将其作为答案发布在SO上。我将如何使用您的方案1设置身份验证: 我将强制静态文件通过服务器以确保身份验证 Web.config
<compilation>
<buildProviders>
<add extension=".html" type="System.Web.Compilation.PageBuildProvider" />
<add extension=".htm" type="System.Web.Compilation.PageBuildProvider" />
</buildProviders>
</compilation>
<system.webServer>
<handlers>
<add name="HTML" path="*.html" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
<add name="HTM" path="*.htm" verb="GET, HEAD, POST, DEBUG" type="System.Web.UI.PageHandlerFactory" resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>
最后,为了保护WebApi,我们需要在控制器中使用属性[Authorize]
,并且很可能需要定义自定义身份验证方法来授权第二个调用者。您可以按照以下步骤操作:
,其中?
表示未知或unauthenticated@Purushoth如果你能支持这个答案,我想授权视频文件夹中的视频,当我像这样使用时,我仍然能够访问视频,这只适用于我提供内容/视频时,它试图重定向到登录页面。当我喜欢url中的内容/videos/bigbugbunny.mp4时,可以访问这些视频。
<authorization>
<allow roles="demo" />
</authorization>
<authorization>
<deny users="?" />
</authorization>
<authentication mode="Forms">
<forms path="/" loginUrl="~/login"..
[EnableCors(origins: "http://localhost:49595", headers: "*", methods: "*")]
public class ValuesController : ApiController
{
...