iis - ASP.NET Core 将默认凭据传递给 HttpClient
问题描述
如何将 ASP.NET Core 中的 DefaultCredentials 传递给 HttpClient?
当我在 VisualStudio 中本地运行它时,它工作正常。当前用户有权请求“www.mycompany.com”。但是,一旦我将它发布到 IIS,我就会得到 401(未授权),因为 HttpClient 在 DefaultCredentials 中获取了 web-server-user(未授权)。
Windows 身份验证在 VisualStudio 和 IIS 中处于活动状态。
我的 C# 代码:
HttpClient Client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
Client.BaseAddress = new Uri("www.mycompany.com");
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Client.DefaultRequestHeaders.Add("Application-Name", Assembly.GetExecutingAssembly().GetName().Name);
HttpResponseMessage response = Client.GetAsync("/classes").Result;
编辑
我知道它在本地与当前用户一起运行,但我不知道如何授权应用程序池......
编辑2
我没有完全正确地解释它。我想将本地用户的身份验证传递给 HttpClient。只有本地用户有权提出请求
解决方案
我知道它在本地与当前用户一起运行,但我不知道如何授权应用程序池......
正如 poke 和 lex 所说,如果您托管在 IIS 上,则 DefaultCredentials 将是应用程序池标识而不是用户帐户。
如果您想知道如何修改应用程序池标识,我建议您可以按照以下步骤操作:
1.打开IIS管理控制台。
2.选择应用程序池和高级设置
3.修改应用程序池标识以使用自定义域帐户。
更新:
如果您想在用户凭据中使用登录来访问其他 api,我可以尝试使用Impersonation。
var user = (WindowsIdentity)User.Identity;
WindowsIdentity.RunImpersonated(user.AccessToken, () =>
{
var impersonatedUser = WindowsIdentity.GetCurrent();
var message =
$"User: {impersonatedUser.Name}\t" +
$"State: {impersonatedUser.ImpersonationLevel}";
//ViewBag.UseImper = message;
HttpClient Client = new HttpClient(new HttpClientHandler() { UseDefaultCredentials = true });
//Client.BaseAddress = new Uri("http://localhost:44331");
Client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Client.DefaultRequestHeaders.Add("Application-Name", Assembly.GetExecutingAssembly().GetName().Name);
var response = Client.GetAsync("http://127.0.0.1:44319/api/values").Result;
int i = 0;
});
推荐阅读
- symfony - 让 Symfony 表单使用简单的 GET 名称
- php - 分解数据数组
- javascript - React-Redux 程序返回“TypeError: Cannot read property 'map' of undefined”
- php - htaccess 重写 - 文件名无法识别
- java - Firebase - 实时数据库为用户设置附加值引发异常
- c++ - 向量的初始化
- java - 带有 c 规则的 Mullers 方法总是打印 NaN
- sql - 如何过滤 Django 模型以仅包含出现在子表(带有 ForeignKey)表中的模型?
- ios - lldb - 如何覆盖字典中的值?
- command-prompt - 在命令提示符下删除目录