如何从我的MVC站点访问我自己的API

本文关键字:访问 我自己 自己的 API 站点 MVC 我的 | 更新日期: 2023-09-27 18:27:38

这是我的设置:

我有一个MVC3网站,该网站托管有一个www子域(例如,www.example.com)。我的网站通过SSL和表单身份验证进行保护,并由ASP.NET成员资格/角色提供商支持。我有HTTP处理程序在/services(例如,www.example.com/services)下提供服务功能。这些功能通过SSL上的基本身份验证来保护。我有移动设备成功访问/使用这些服务。我还创建了一个新的网站,其中有一个api子域(例如,api.example.com),这将是我的公开的api。这些服务当前通过WCF Web API预览6公开(最终将迁移到ASP.NET Web API)。这些服务还通过SSL上的基本身份验证进行保护。我的ASP.NET成员身份实现存储散列密码(即,它们未加密)。所有服务都提供JSON响应。所有这些东西都很管用。

这是我的困境:

我开始在MVC站点上编写一个新的视图,并意识到使用Ajax会很好。我的具体案例是实现级联下拉列表。我想使用jQuery和api子域下的一个新服务来实现这一点。一开始我认为这是一个简单的练习,后来我意识到,我没有有效的方法来调用我自己的API。我的客户端(移动设备)都在本地存储他们的用户名/密码,所以这很容易。然而,如果同一个用户登录到我的网站,我有他们的用户名,但没有他们的密码,所以我没有直接的方式访问api子域下提供的任何服务。

在我看来,我有三个解决方案:

  1. 直接在/services URI下实现支持MVC站点的服务,避免使用我自己的公共API
  2. 在我的会员商店中创建一个超级用户(我知道用户名/密码),该网站使用该超级用户访问api子域中的服务
  3. 更改我的身份验证策略

我突然想到,我可能不应该使用我自己的公共API,而应该使用我的私有服务(这没关系,因为逻辑都是通过门面层共享的)。

这里推荐的策略是什么?我还假设,如果我要使用选项2或3,我必须使用JSONP。这是正确的吗?

如有任何建议,我们将不胜感激。如果需要更多的细节,请发布,我会更新答案。

谢谢!

如何从我的MVC站点访问我自己的API

如果我正确地遵循了这一点,你只需要确保你的Forms Auth cookie是在没有子域的情况下编写的,所以它应该是:.example.com,如果你使用的是单独的服务器,你可以在它们之间共享你的机器密钥。

由于表单身份验证令牌是无状态的,并且服务器端不保留任何内容,因此这应该可以正常工作。

为了简单起见,并且因为我认为使用自己的公共API不符合我的最佳利益,我在现有MVC站点中的新控制器上实现了JsonResult操作。这使我能够利用现有的表单身份验证,并避免跨域ajax请求。