ASP MVC 5 在不同域上运行 HTML5 客户端和 Web API 服务器
Posted
技术标签:
【中文标题】ASP MVC 5 在不同域上运行 HTML5 客户端和 Web API 服务器【英文标题】:ASP MVC 5 Running HTML5 Client and Web API server on different domains 【发布时间】:2013-12-03 18:17:18 【问题描述】:我打算将我的 ASP.NET MVC5 项目拆分为 2 个项目。
第 1 部分:通过 EF6 等进行业务逻辑数据访问的 WEB API 服务器。
第 2 部分 ASP.NET MVC 5 客户端,带有 Razor 视图和对服务器的 JQuery Ajax 调用(不是纯单页应用程序 - SPA)
2 部分在不同的 IIS 服务器上运行。 SQL Server 不能(可能不能)直接从客户端访问
我可以从客户端获取凭据并将其传递给 web api 服务器以验证用户并获取令牌以访问服务器 api。
问题是:是否可以在客户端使用该服务器令牌进行身份验证和授权。
由于客户端没有本地用户数据库,因此没有用户角色或成员资格。
如何根据服务器端凭据授权某些客户端 MVC 剃须刀视图或控制器。
我是否必须在客户端实现一个自定义成员资格提供程序,通过 api 从服务器中提取用户角色等?
我知道会有跨域问题需要解决。
有什么想法吗?
提前致谢。
【问题讨论】:
【参考方案1】:首先,客户端永远不能直接访问 SQL Server 实例,这就是 Web api/服务的重点。
就网络服务的身份验证而言,您需要使用访问令牌。当您构建一个新的 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。希望对您有所帮助!
【讨论】:
以上是关于ASP MVC 5 在不同域上运行 HTML5 客户端和 Web API 服务器的主要内容,如果未能解决你的问题,请参考以下文章
如果项目已经在数据库中,请在视图中执行不同的 ActionResult - ASP.NET MVC4 EF5 HTML5
在 ASP .NET MVC 5.1/HTML 5 特定中显示日期时间选择器而不是日期选择器
通过不同域上的 REST Web 服务进行用户身份验证 - asp.net
是否可以在不同的 AppDomain 中运行 ASP.NET MVC 路由?