当前位置: 首页 > 面试题库 >

AngularJS + ASP.NET Web API + ASP.NET MVC身份验证

安高义
2023-03-14
问题内容

我是AngularJS的新手,正在尝试为我的新Web应用程序对其进行评估。

需求:

我将有一个ASP.NET Web API,它将从Android,iPhone和Web应用程序(ASP.NET MVC)中使用。ASP.NET
Identity将在Web API中实现。这三个应用程序都将调用Web API的login方法来获取auth令牌。

问题:

我的问题是当Angular进行调用以获取HTML模板/视图,JavaScript文件时,如何获得ASP.NET MVC 服务器端身份验证
工作(与Web API同步,因此我不必分别登录ASP.NET
MVC)或其他资源。我在AngularJS上浏览了许多文章和博客,但仍然找不到适合我要求的安全模型。

可能的解决方案:

将登录调用直接调用ASP.NET MVC应用程序而不是Web API是一个好主意,并且ASP.NET MVC应用程序将调用Web
API进行登录,并在进行身份验证之后,将auth令牌保存在会话中并创建一个 FormsAuthentication cookie
和cookie数据中的数据将保存加密的auth令牌。此外,在HTML的 ng-init 中将 auth令牌
设置为AngularJS范围内的令牌。现在,当AngularJS尝试调用ASP.NET
MVC应用程序以获取HTML时,然后通过将cookie中解密的数据与会话中的auth数据进行匹配来对用户进行身份验证/授权。另外,AngularJS将
在标头中 发送 auth令牌,以 直接 调用Web API方法 ,以用于随后通过Web API进行数据操作的所有后续调用。


问题答案:

我用非常严格的向前解决方案解决了这个问题。我只是确保在WebApiConfig的Register方法中有以下两行代码:

config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

而已。现在,我的MVC控制器在寻找会话cookie以进行授权,而我的Web API控制器在每个请求的标头中寻找auth令牌。此外,Web
API会响应登录/身份验证请求(例如)发送令牌(JSON)和会话cookie本身http:\\www.mydomain.com\token

因此,现在我将登录请求发送到Web
API以获取令牌以及会话cookie。会话Cookie将在每个请求时自动发送,因此我不必担心MVC控制器的授权。对于Web
API调用,我将在每个请求的标头中发送auth令牌,因为Web API控制器不关心与请求一起发送的会话cookie。



 类似资料:
  • 问题内容: 几个不同的问题和一些不同的教程中都涉及到了这一点,但是我所遇到的所有以前的资源并没有完全解决问题。 简而言之,我需要 通过POST从登录到 为用户提供提供路由的“已登录” GUI /组件状态 用户注销/注销时能够“更新” UI。 这是最令人沮丧的 保护我的路由以检查身份验证状态(他们是否需要),并将用户相应地重定向到登录页面 我的问题是 每次导航到另一个页面时,我都需要打电话以确定用户

  • 我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。 到目前为止,我使用的是设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。 有

  • 问题内容: 因为在AngularJS中使用CORS和http身份验证可能会比较棘手,所以我编辑了问题以分享一个经验教训。首先,我要感谢igorzg。他的回答对我很有帮助。场景如下:您想使用AngularJS $ http服务将POST请求发送到另一个域。获取AngularJS和服务器设置时,需要注意一些棘手的事情。 第一:在您的应用程序配置中,您必须允许跨域调用 第二:您必须指定withCrede

  • 问题内容: 我是AngularJS的新手,在以下情况下我对如何使用angular-“ ui-router”感到有些困惑: 我正在构建一个包含两个部分的Web应用程序。第一部分是带有登录和注册视图的主页,第二部分是仪表板(成功登录后)。 我为home部分创建了一个带有角度应用程序和配置的,用于处理和查看,还有一个针对仪表板部分的文件,其应用程序和配置用于处理许多子视图。 现在,我完成了仪表板部分,并

  • 身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工

  • 问题内容: 我正在尝试在Node.js中使用Socket.IO,并试图允许服务器为每个Socket.IO客户端赋予一个身份。由于套接字代码不在http服务器代码的范围内,因此无法轻松访问已发送的请求信息,因此我假设在连接期间需要将其发送出去。什么是最好的方法 1)将有关谁通过Socket.IO连接到服务器的信息 2)验证他们说的是谁(如果正在使事情变得更容易,我目前正在使用Express) 问题答