ASP MVC 5在不同的域上运行HTML5客户端和Web API服务器

时间:2013-12-03 18:17:18

标签: jquery asp.net-mvc security asp.net-web-api

我打算将我的ASP.NET MVC5项目拆分为2个项目。

第1部分:将通过EF6等进行业务逻辑数据访问的WEB API服务器。

使用Razor Views&amp ;;的第2部分ASP.NET MVC 5客户端JQuery Ajax调用服务器(不是纯粹的单页应用程序 - SPA)

在不同的IIS服务器上运行2个部分。 SQL服务器不是(可能不是)直接从客户端访问

我可以从客户端获取凭据并将其传递给web api服务器以对用户进行身份验证并获取令牌以访问服务器api。

问题是:是否可以进行身份​​验证&使用该服务器令牌在客户端授权。

由于客户端没有本地的用户数据库,因此没有用户角色或成员资格。

如何根据服务器端凭据授权某些客户端MVC剃刀视图或控制器。

我是否必须在客户端实现通过api从服务器提取用户角色等的自定义成员资格提供程序?

我知道要解决跨域问题。

任何想法?

提前致谢。

1 个答案:

答案 0 :(得分:1)

首先,客户端永远不能直接访问SQL Server实例,这就是web api / service的重点。

对于使用Web服务进行身份验证,您需要使用访问令牌。当您构建新的MVC 5 web api项目时,如果您选择个人用户帐户身份验证,VS将为您构建大量帐户信息。然后,您可以使用类似控制哪些控制器和操作需要身份验证的属性。您甚至可以更精细地定义哪些角色可以访问某些控制器或操作。在客户端,它可能看起来像这样:

var login = function () {
   var url = "/Token";
   var data = $('formData').serialize();
   data = data + "&grant_type=password";
   $.post(url, data)
     .success(saveAccessToken);  //once the token is saved, it will need to appended to every request

   return false();
}

$('#login').click(login);

如果您正考虑从控制器内部的服务器端进行身份验证,请使用WebClient Class与Web服务进行交互,类似于上面客户端脚本的方式。

最后,针对跨域问题。您应该查看Nuget Package。该软件包将处理服务器端代码接受请求所需的大多数配置。有关CORS的一些背景知识,请查看this site。希望有所帮助!