这里是我的设置:如何从我的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子域下提供的任何服务。
在我看来,我有三个解决方案:
- 实现直接支持MVC站点下/服务URI服务,避开消费我自己的公共API。
- 在我的会员店(我知道用户名/密码)中创建一个超级用户,该站点用来访问api子域中的服务。
- 更改我的身份验证策略。
在我看来,我可能不应该利用我自己的公共API,并会更好地使用我自己的私人服务(这是可以的,因为逻辑全部通过门面层共享)。
这里推荐的策略是什么?我还假设,如果我要使用选项2或3,则必须使用JSONP来完成。它是否正确?
任何意见将不胜感激。如果需要更多详细信息,请发帖,我将更新答案。
谢谢!
TL;博士,但我猜你需要从'嗒嗒/ api'托管的API,并从'api.blah'重写URL到他们。这应该允许你通过javascript来传递任何跨域问题。 – 2012-03-14 03:08:31
API应该使用与网站其余部分相同的身份验证策略。授权令牌被写为cookie,并且应该通过AJAX发送(假设它们被写为支持子域或将您的API作为虚拟目录托管)。 – Brian 2012-03-14 03:14:40