Asp.net mvc 使用mvc web api针对windows广告组验证angular 4应用程序中的每条路线

Asp.net mvc 使用mvc web api针对windows广告组验证angular 4应用程序中的每条路线,asp.net-mvc,angular,asp.net-web-api,Asp.net Mvc,Angular,Asp.net Web Api,我正在使用angular 4创建intranet应用程序 我希望此应用程序只能由名为“IntranetAdmin”的广告组中的用户访问。此外,如果用户不是广告组的一部分,他们也不能直接访问应用程序的特定路径 我已经创建了一个API端点,该端点登录到used name并根据web.config中存储的AD组检查该名称 IPrincipal user = httpcontext.User; string loginName = user.Identity.Name; 若登录用户不是广告组的成员,应

我正在使用angular 4创建intranet应用程序

我希望此应用程序只能由名为“IntranetAdmin”的广告组中的用户访问。此外,如果用户不是广告组的一部分,他们也不能直接访问应用程序的特定路径

我已经创建了一个API端点,该端点登录到used name并根据web.config中存储的AD组检查该名称

IPrincipal user = httpcontext.User;
string loginName = user.Identity.Name;

若登录用户不是广告组的成员,应用程序应将用户重定向到无访问页面。此外,如果用户不是AD组的一部分,则他应该无法通过在浏览器中手动输入任何路由来访问该路由。

由于Angular完全是客户端的,这将很难实施,因为用户可以更改页面源(使用浏览器工具)以删除API的检查,并继续使用Angular视图。假设API也提供Angular应用程序使用的数据,简单地保护服务器端的数据端点,而不是Angular路由,将很容易,并且有望提供必要的安全性,因为通常来说,真正敏感的是数据而不是视图。客户端的安全性根本不可能。谢谢您的评论。是的,我将基于AD组保护数据端点。但也需要一些机制来验证访问的每个路由。因为它完全是客户端的,所以您不能。嗯,你可以试试,但你不能依赖它。假设用户可以(恶意用户也会)做任何他们想做的事情。一旦页面下载到他们的浏览器中,他们就可以根据自己的选择进行操作。他们甚至可能忽略您的HTML和JS,只使用PostMan之类的工具直接攻击您的API。确保所有受安全限制的内容都保存在服务器端,并且每次向API发出请求时都会在服务器上检查安全性。这是唯一的方法。这样,您可能会遇到这样的场景:用户设法访问角度视图,但视图无法下载任何相关数据,因为它们没有通过API的安全检查。所以他们只是得到一个空视图,这应该不会造成任何伤害。实际上,您可以将此体系结构视为一种优势,因为将来如果您更改GUI,或添加其他GUI(例如移动应用程序、桌面应用程序等),您的所有安全检查也将应用于新GUI。这不仅是最好的方法,也是唯一的方法。根据REST原则,如果您返回一个合适的HTTP状态代码,那么您的Angular应用程序就可以很容易地判断出发生了什么-例如,如果用户没有访问权限,403禁止;如果modelstate无效,400错误的请求;如果请求的项不存在,404找不到等等。在AJAX客户端接收到一个不成功的消息(即不是2xx或3xx)状态通常会触发不同的回调。我不知道angular的AJAX库是如何构造的,但我希望是这样,我猜它们可能符合Promise API。