0

这里是我的设置:如何从我的MVC网站访问我自己的API?

我有一个MVC3网站与一个www子域(例如www.example.com)托管。我的网站通过SSL进行安全保护,并通过ASP.NET会员/角色提供商进行身份验证。我有HTTP处理程序提供/服务下的服务功能(例如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. 实现直接支持MVC站点下/服务URI服务,避开消费我自己的公共API。
  2. 在我的会员店(我知道用户名/密码)中创建一个超级用户,该站点用来访问api子域中的服务。
  3. 更改我的身份验证策略。

在我看来,我可能不应该利用我自己的公共API,并会更好地使用我自己的私人服务(这是可以的,因为逻辑全部通过门面层共享)。

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

任何意见将不胜感激。如果需要更多详细信息,请发帖,我将更新答案。

谢谢!

+0

TL;博士,但我猜你需要从'嗒嗒/ api'托管的API,并从'api.blah'重写URL到他们。这应该允许你通过javascript来传递任何跨域问题。 – 2012-03-14 03:08:31

+0

API应该使用与网站其余部分相同的身份验证策略。授权令牌被写为cookie,并且应该通过AJAX发送(假设它们被写为支持子域或将您的API作为虚拟目录托管)。 – Brian 2012-03-14 03:14:40

回答

0

为了简化和因为我决定这是不是我最感兴趣的消费我自己的公共API,我实现了在现有的MVC网站一个新的控制器上JsonResult动作。这使我可以利用现有的表单身份验证并避免跨域的Ajax请求。

0

,如果im以下这个正确的,你只需要确保你的窗体身份验证cookie将无子域书面所以这将是:.example.com的,如果你使用的是单独的服务器,你分享他们整个机器的关键。

由于窗体身份验证令牌是无状态的,并没有什么保存在服务器端,这应该能正常运行。

相关问题