asp.net-mvc – Web Api安全客户端和用户
对于创建Web API非常新,我目前正在尝试保护我的API并提出几个问题
基本上我有一个Web API和一个MVC应用程序. API目前有一个名为Account的控制器,它有两种方法Register和Login. MVC应用程序具有相同的控制器和动作,但只是调用api方法. 现在基本上他们看到它的方式,我只希望我的MVC应用程序使用Web API,所以生病了MVC应用程序webconfig中的api密钥每次传递给API?用户还需要在传递用户详细信息的同时进行身份验证吗? 这是否意味着我需要设置两个AuthAttributes?一个用户和一个api详细信息? 编辑 更进一步的这个例子,并展示我需要的东西 我有一个WebUI,它有一个名为CreateTeam的控制器.这会将Team模型传递给api Controller方法CreateTeam,api方法要求用户有权创建团队.现在这个工作正常,但…. 我的api上还有一个名为LeaguesController的控制器,它有一个方法AddNewTeamsToLeagues.现在我有一个控制台应用程序,每小时运行一次,在api上调用此方法,以便向联盟添加新的团队.现在我不希望任何人在api上调用此方法,我只希望控制台应用程序能够使用它.什么是保证这一点的最佳方法? 解决方法
一种解决方案是使用[AntiForgeryValidation]生成的令牌(Razor助手是@
Html.AntiForgeryToken).您可以使用以下令牌(在MVC视图中生成)来协助验证(如果您愿意)(或者非常有帮助)或使用您自己的:
<input name="__RequestVerificationToken" type="hidden" value="some-generated-value" /> 如果您正在使用jQuery,则可以覆盖默认的Ajax选项(jQuery.ajaxSetup() – API documentation)以自动将其添加到您的请求标头并对其进行验证(无论您需要什么实现).您还可以明确地发送用户名和其他任何您想要验证的用户. 然后,您可以使用AntiForgery.Validate(cookieValue,request.Headers [“__ RequestVerificationToken”]);来使您的Web API具有针对此信息(以及您想要的任何其他内容)验证的过滤器. 不幸的是,在MVC6 / Web API3之前,两种控制器类型具有完全不同的实现,因此您可能必须自己编写客户过滤器来处理身份验证. MVC和Web API都有专用的[Authorize]属性,但它们具有不同的名称空间(System.Web.Http.AuthorizeAttribute vs System.Web.Mvc.AuthorizeAttribute). 希望这可以帮助.如需进一步阅读,请查看this blog post. – 编辑以回复有关您的控制台应用程序的更新评论 – 您始终可以创建仅允许本地连接,特定IP地址,某些LDAP / AD安全组等访问特定控制器/控制器操作的过滤器.在您的控制台应用程序的情况下,您需要决定如何保护它;一旦你决定你可以从那里去.因此,假设您只想允许AD安全组的特定成员访问控制器,您可以将过滤器放在一起,如下所示: namespace YourAppName.Filters { public class AuthorizeADAttribute : AuthorizeAttribute { public string Groups { get; set; } protected override bool AuthorizeCore(HttpContextBase httpContext) { if (base.AuthorizeCore(httpContext)) { var groups = Groups.Split(',').ToList(); var context = new PrincipalContext(ContextType.Domain,"YourDomainHere"); var userPrincipal = UserPrincipal.FindByIdentity( context,IdentityType.SamAccountName,httpContext.User.Identity.Name); foreach (var group in groups) if (userPrincipal.IsMemberOf(context,IdentityType.Name,group)) return true; } return false; } protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (filterContext.HttpContext.User.Identity.IsAuthenticated) { var result = new ViewResult(); result.ViewName = "NotAuthorized"; result.MasterName = "_Layout"; filterContext.Result = result; } else base.HandleUnauthorizedRequest(filterContext); } } } 然后将其应用于控制器或控制器内部的方法,如下所示: [AuthorizeAD(Groups = "SecurityGroupToAuth,League Admins,Console App Group")] public YourViewModelHere AddNewTeamsToLeagues() { // do stuff } 因此,回答您的初始问题:您可能需要两种不同的属性/过滤器用于不同类型(在处理AntiforgeryToken和控制台应用程序之间).遗憾的是,在不知道您的应用程序和控制台应用程序是如何托管的情况下(不同的机器,同一子网,在同一网络上等),我无法提供更多信息,但希望这有助于指明您创建自己的过滤器/属性的正确方向(S). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ASP.NET MVC 4和Entity Framework 5.0中的MySQL连接 – 多个
- ASP.NET – 在postBack之后将屏幕滚动到之前的位置
- asp.net-mvc – 实体框架数据库 – 第一个uniqueidentity结
- asp.net-mvc-5 – 带有LDAP身份验证的OWIN
- asp.net-mvc – 在需要时在CQRS中提供同步行为?
- asp.net – 在.css文件中引用应用程序相对虚拟路径
- asp.net – 跟踪当前在线用户的最佳方式
- 为什么我的ASP.NET页面将前缀’ctl00_ctl00’添加到html元素
- asp.net – MS Web部署跳过删除规则不跳过
- asp.net-mvc-4 – DataAnnotation的必需属性
- asp.net-mvc – NLog在所有aspnet布局渲染器上抛
- asp.net-mvc – Controller如何知道MVC中DeleteC
- asp.net下使用jquery 的ajax+WebService+json 实
- ASP文本框CSS和数据绑定表达式问题
- asp.net-mvc – 将布尔属性编辑器转换为MVC视图中
- asp.net – 使用jquery调用webmethod时始终获得“
- asp.net – 如何从AJAX调用非静态方法?
- 新浪出输入法了,深蓝词库转换更新到1.3.1——增
- ASP.NET有一个复选框列表,在4×5网格中有我很好的
- ASP.NET Core 2.1身份:如何删除默认UI剃刀页面?