Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用控制器的单页应用程序-如何使用ASP.NET身份进行安全保护?_Asp.net Mvc_Breeze_Single Page Application_Asp.net Identity - Fatal编程技术网

Asp.net mvc 使用控制器的单页应用程序-如何使用ASP.NET身份进行安全保护?

Asp.net mvc 使用控制器的单页应用程序-如何使用ASP.NET身份进行安全保护?,asp.net-mvc,breeze,single-page-application,asp.net-identity,Asp.net Mvc,Breeze,Single Page Application,Asp.net Identity,我有一个单页应用程序,它使用一个标准控制器(不是ApiController)来检索所有HTML视图,这是通过ajax完成的。但是,WebApi使用breezejs供客户端与后端数据库通信。我正在实现ASP.NET身份安全-我应该使用MVC cookie身份验证还是承载令牌?我需要解决方案来说明一个单独的登录页面,并需要一个干净的服务器端重定向。免责声明 这是一个相对简单的问题,因为它非常具体,通过理解Web API和MVC控制器之间的身份验证差异,这应该是相当直接的 假设 您的Web API项目

我有一个单页应用程序,它使用一个标准控制器(不是ApiController)来检索所有HTML视图,这是通过ajax完成的。但是,WebApi使用breezejs供客户端与后端数据库通信。我正在实现ASP.NET身份安全-我应该使用MVC cookie身份验证还是承载令牌?我需要解决方案来说明一个单独的登录页面,并需要一个干净的服务器端重定向。

免责声明 这是一个相对简单的问题,因为它非常具体,通过理解Web API和MVC控制器之间的身份验证差异,这应该是相当直接的

假设
  • 您的Web API项目具有自己的身份验证,并且不会与MVC项目进行对话以获取会话用户或任何东西
  • 您的ASP.NET MVC控制器位于使用表单身份验证并将用户存储在会话cookie中的项目中
  • 当我在你们理解下面引用MVC时,这些都是在引用ASP.NET MVC
  • 推荐 我要做的是让您的MVC项目使用OAuth进行身份验证,并将用户存储在会话中的cookie中,您可以设置和获取该cookie。然后,可以使用Authorize属性修饰服务于视图的控制器操作。这将在用户尝试访问不允许访问的视图时将用户重定向到登录页面(只要在web.config中设置了该视图)

    对于Web API项目,您不能依赖会话,因为这听起来像是将两个项目解耦。这是我的建议-

    当您的用户在MVC项目中成功通过身份验证时,向Web API请求一个打开的登录方法。这将执行一些逻辑测试,然后使用某种会话令牌将用户存储在DB中,或者自动将用户写入DB

    现在,存储在MVC项目会话中的用户可以将其传递给客户端,并将其附加到Web API的Breeze调用中,并使用该调用进行身份验证。您需要明确设置该令牌的使用时间,但将其附加到Breeze.js调用中非常容易,例如-

     var query = breeze.EntityQuery.from('myService').withParameters({'tokenId': thisTokenId});
    
    现在,您的查询将使用一个tokenId参数命中API,该参数可用于身份验证

    编辑

    如果您想将ASP.NET MVC项目设置为使用OAuth,您可以跟随此链接-


    记住,基于表单的身份验证只意味着(简而言之)您将为用户提供某种形式的表单登录方式。

    如果您的WebAPI正在处理安全问题,那么您使用MVC控制器试图实现什么?您想保护视图不被打开?是的,我想保护站点(视图),和web api。您是如何登录的?个人用户帐户使用ASP.NET身份数据库,但将来将针对Yahoo、Facebook等进行身份验证。好的,我添加了一个我认为应该对您有帮助的答案。如果它不能直接解决您的问题,请让我知道。我还更新了您的问题,将Breeze.js标记包含在cas中e任何其他人将来都在寻找类似的答案。当你说在配置中设置登录页面时,你是在说什么?因为我认为我不需要表单身份验证。新的MVC身份示例是这样做的:app.UseCookieAuthentication(新的CookieAuthenticationOptions{AuthenticationType=DefaultAuthenticationTypes.ApplicationOkie,LoginPath=new PathString(“/Account/Login”)});SPA示例使用了不同形式的安全性—app.UseCookieAuthentication(new CookieAuthenticationOptions());app.useExternalSigningOkie(DefaultAuthenticationTypes.ExternalCookie);app.UseAuthBealerTokens(OAuthOptions);因此,我想在这两种情况下我都需要使用OAuthBealerTokens进行身份验证。我想你的建议仍然是正确的,我只需要了解登录页面重定向以及web api端(breeze)是如何实现的will authentication Corrective在答案底部添加了一个编辑-forms authentication只意味着你提供了一个表单供用户登录,在这种情况下可能是一个允许匿名用户点击的页面。PW我可能需要一些澄清-我不理解将令牌ID传递给breezejs。breeze做了什么如何使用令牌?我也不清楚“向Web API请求打开登录方法。这将进行一些逻辑测试,然后使用某种会话令牌将用户存储在DB中,或者自动将用户写入DB。”那么,你是说要有一些后端breeze代码来检查每个breeze呼叫上的令牌吗?不只是对两者使用承载令牌身份验证就可以做同样的事情而不必这样做吗?