【发布时间】:2012-03-30 12:28:39
【问题描述】:
这是我的设置:
我有一个使用 www 子域(例如 www.example.com)托管的 MVC3 站点。我的网站通过 SSL 和表单身份验证得到保护,由 ASP.NET 成员/角色提供程序提供支持。我在 /services(例如 www.example.com/services)下有提供服务功能的 HTTP 处理程序。这些通过 SSL 上的基本身份验证得到保护。我有移动设备成功访问/使用这些服务。我还创建了一个带有 api 子域(例如 api.example.com)的新站点,这将是我面向公众的 API。这些服务目前通过 WCF Web API 预览版 6 公开(最终将迁移到 ASP.NET Web API)。这些服务也通过基于 SSL 的基本身份验证得到保护。我的 ASP.NET 成员实现存储散列密码(即,它们未加密)。所有服务都提供 JSON 响应。所有这些东西都很好用。
这是我的困境:
我开始在 MVC 站点上编写一个新视图,并意识到使用 Ajax 会很棒。我的具体案例是实现级联下拉列表。我想使用 jQuery 和 api 子域下的新服务来实现这一点。起初我认为这将是一个简单的练习,然后我意识到,我没有有效的方法来调用我自己的 API。我的客户(移动设备)都在本地存储他们的用户名/密码,所以这很容易。但是,如果同一用户登录到我的站点,我有他们的用户名但没有他们的密码,因此我无法直接访问 api 子域下提供的任何服务。
在我看来,我有三个解决方案:
- 直接在 /services URI 下实现支持 MVC 站点的服务,避免使用我自己的公共 API。
- 在我的会员商店(我知道用户名/密码)中创建一个超级用户,该网站用于访问 api 子域中的服务。
- 更改我的身份验证策略。
我突然想到,我可能不应该使用我自己的公共 API,而使用我自己的私有服务会更好(这没关系,因为逻辑都是通过外观层共享的)。
这里推荐的策略是什么?我还假设如果我要使用选项 2 或 3,我将不得不使用 JSONP。这是正确的吗?
任何建议将不胜感激。如果需要更多详细信息,请发布,我会更新答案。
谢谢!
【问题讨论】:
-
tl;dr 但我猜您需要从
blah/api托管您的 api,并从api.blah重写它们的 URL。这应该允许您通过 javascript 解决任何跨域问题。 -
API 应该使用与站点其他部分相同的身份验证策略。授权令牌以 cookie 的形式编写,应通过 AJAX 发送(假设它们是为支持子域而编写的,或者您将 API 托管为虚拟目录)。
标签: c# asp.net-mvc-3 authentication wcf-web-api asp.net-web-api