gpt4 book ai didi

asp.net-mvc - .NET WebApi 身份验证

转载 作者:行者123 更新时间:2023-12-02 13:34:36 26 4
gpt4 key购买 nike

目前,我有一个销售小部件的 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 - 使用基本身份验证

最佳答案

Is there a way to pass the Forms Auth credentials from our MVC app to our Web api app?

当然,我们以以下调用 Web API 的 MVC Controller 操作为例:

[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 项目中使用的名称相同。

关于asp.net-mvc - .NET WebApi 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12514602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com