【问题标题】:Moving Asp.Net WebAPI into a Separate Site from Asp.Net MVC site for AngularJS App将 Asp.Net WebAPI 从 AngularJS 应用程序的 Asp.Net MVC 站点移到单独的站点
【发布时间】:2018-06-02 04:47:53
【问题描述】:

我们有一个使用 AngularJS 作为前端的 Asp.Net MVC 5.0 项目。该项目在同一个项目中有 WebAPI 控制器,它被部署到同一个网站。该应用程序是使用个人用户帐户项目模板构建的,并使用 Asp.Net 身份和声明。有文件上传模块,用户通过 webapi 和 ng-file-upload 插件上传一些 100MB 以上的文件。由于用户群的增加,我们希望通过将 API 单独分离到新服务器中的单独站点并在需要时对其进行扩展来快速提高上传速度。由于 API 控制器目前在使用 OWIN cookie 身份验证的 ASP.Net MVC 解决方案下,因此 API 由 cookie 身份验证中间件授权。 将 API 放入单独站点的快速方法是什么?我相信我们需要基于 MVC 站点实现 OAUTH 令牌,并通过启用 CORS 使新的 API 站点使用令牌。如果我们这样做,我们不确定是否需要删除基于 cookie 的身份验证并使用新的基于令牌的身份验证重新实现身份验证。通过仍然对 Asp.Net MVC 站点使用基于 cookie 的身份验证并将 api 分离到一个新站点中,我们可以采取任何其他方法吗?

注意-我们还计划使用此 API 构建移动应用程序,因此我们认为我们必须将 webapi 分离到一个单独的站点并引入基于 OAuth 令牌的授权。

提前致谢!

问候, 巴拉

【问题讨论】:

    标签: angularjs asp.net-mvc asp.net-web-api2


    【解决方案1】:

    如果您的 mvc 站点只是客户端代码,没有任何主要的后端 c#。这不需要安全性,因为您的数据来自需要保护的 API。如果您不想将两者分开在不同的域中。 Angular 需要读取从服务器发送的用户信息,这就是为什么只有 HTTPs 加密的 cookie 不起作用的原因。如果它们将是不同的服务器和域,再加上您需要 API 的多个使用者,您应该使用刷新令牌和整个事情转移到基于 oAuth 和不记名令牌的登录。通过这种方式,您可以将 api 扩展到多个负载均衡器并仍然使用不记名令牌,这将是无状态的。话虽如此,您仍然可以通过将令牌存储在 cookie 中来实现此目的,angular 可以解析和使用这些值,而 api 可以验证令牌的签名并使用这些值。他们必须在同一个域上,以便他们可以共享 cookie。这可以在不使用 cookie 的情况下完成,也可以简单地使用 LocalStorage。

    【讨论】:

    • MVC 站点是混合的,它有一些模块的后端 C# 代码,并为一些模块使用 AngularJS。这就是它使用 cookie 身份验证的原因,并且由于 API 位于同一站点下,因此在 cookie 身份验证发生后可以访问它。那么,如果我们在 MVC 站点中启用 OAuth 令牌身份验证并将 API 分离到不同服务器中的新域中,它仍然可以发送令牌吗?如果是这样,在 MVC 站点的 cookie 身份验证后如何获取令牌以将其发送到新的 API 站点?有什么指点吗?
    • 使用 cookie,因为它们在同一个父域的两个域之间共享。您甚至可能不需要为此使用 oAuth。您可以简单地在 api 和 mvc 中使用相同的机器密钥,这将允许 mvc 加密的 cookie 被 api 解密。我个人不推荐这个解决方案,因为它的方向是错误的,但它会完成工作。甚至不需要 oAuth,常规的 cookie 身份验证都可以在两者中使用。 (他们必须共享机器密钥和域)
    • 那么,你的意思是如果 mvc site(parentsite.com) 并且 api 是 api.parentsite.com 在不同的服务器上并使机器密钥相同,它会起作用吗?会话呢?它在 api 服务器中不可用吗?相同的 cookie 将如何在 api server 中进行身份验证?
    • 正确,但是会话不起作用,您必须使用 cookie 或数据库来存储任何额外信息。这两个网站共享的唯一内容是 cookie。拥有相同的机器密钥将允许彼此解密 cookie 并使用其内容。
    • 对不起,我还是不清楚。 cookie 将具有会话 id 来识别用户权限,那么另一个服务器(哪个 API)将如何仅通过 cookie 来识别用户?
    猜你喜欢
    • 2015-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多