目前,我有一个销售小部件的 MVC Web 应用程序。用户使用表单身份验证登录我们的系统,然后可以根据他们所属的组执行各种功能(即下订单、查看订单、取消订单等)。
我们的任务是编写一个 API,让第三方能够在我们的系统中创建和查看订单。每个第三方都有自己的用户名,并且根据其所属的组,将仅限于某些 API 方法。
我们正在考虑使用 Web Api 作为提供 API 的机制。我们还希望能够从 MVC Web 应用程序使用此 api。不幸的是,我们遇到了 Web Api 身份验证问题。使用 DelegatingHandler,我们为 WebApi 实现了基于 SSL 的基本身份验证。这对我们的第三方来说非常有用。但是,当尝试从 MVC 应用程序使用 Api 时,我们收到 401 访问被拒绝错误,因为用户在 MVC 应用程序中使用表单身份验证进行了身份验证,但我们无法将这些凭据传递到 Web Api。有没有办法将 Forms Auth 凭据从我们的 MVC 应用程序传递到我们的 Web api 应用程序?
IIS 设置
名为 WidgetStore 的网站,带有两个 Web 应用程序
- WidgetStore\UI - 使用表单身份验证
- WidgetStore\Api - 使用基本身份验证
有没有办法将 Forms Auth 凭据从我们的 MVC 应用程序传递到我们的 Web api 应用程序?
当然,我们以以下调用 Web API 的 MVC 控制器操作为例:
[Authorize]
public ActionResult CallWebApi()
{
var baseAddress = new Uri("https://example.com");
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
{
var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName].Value;
cookieContainer.Add(baseAddress, new Cookie(FormsAuthentication.FormsCookieName, authCookie));
var result = client.GetAsync("/api/values").Result;
result.EnsureSuccessStatusCode();
// now you can read the result.Content ...
}
}
这假设您还在 Web API 项目的 web.config 中启用了表单身份验证,并且 cookie 名称与 MVC 项目中使用的名称相同。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)