You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI中HttpClient在Android调用IIS REST API遇未授权问题求助

.NET MAUI Android端访问IIS REST API解决未授权问题

核心原因

Windows端依托Windows域环境,HttpClient能自动传递NTLM/Kerberos凭据完成身份验证;但Android不属于Windows域,无法自动获取或传递这类凭据,导致请求被IIS拒绝。

解决方案

1. 调整IIS认证方式(推荐)

如果业务允许,在IIS服务器上开启Basic认证(必须配合HTTPS使用,避免明文传输凭据):

  • 打开IIS管理器,找到目标API站点
  • 进入“身份验证”功能,启用“Basic认证”,可保留“Windows身份验证”以兼容Windows端

之后在Android端的HttpClient中手动传入用户名密码:

var handler = new HttpClientHandler
{
    Credentials = new System.Net.NetworkCredential("域账号", "密码", "域名")
};

using var client = new HttpClient(handler);
var response = await client.GetAsync("https://your-iis-api-url/api/resource");

2. 强制Android端支持NTLM认证

若必须保留Windows身份验证,需手动配置HttpClientHandler启用NTLM支持,并传入域凭据:

var handler = new HttpClientHandler
{
    PreAuthenticate = true,
    AllowAutoRedirect = true,
    Credentials = new System.Net.NetworkCredential("username", "password", "domain")
};

// 适配部分Android版本的重定向限制
handler.MaxAutomaticRedirections = 5;

using var client = new HttpClient(handler);
var response = await client.GetAsync("http://your-iis-api-url/api/resource");

同时调整IIS的Windows身份验证设置:

  • 进入IIS站点的“Windows身份验证”→“高级设置”
  • 将“扩展保护”设置为无,允许非域设备的NTLM请求

3. 确保Android网络权限

检查Platforms/Android/AndroidManifest.xml是否添加必要网络权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

4. 采用OAuth2/JWT认证(安全最佳实践)

如果API支持,改用OAuth2或JWT令牌认证:

  • 在MAUI中通过身份验证库获取访问令牌
  • 在请求头中携带令牌:
using var client = new HttpClient();
client.DefaultRequestHeaders.Authorization = 
    new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "your-access-token");

var response = await client.GetAsync("https://your-iis-api-url/api/resource");

内容的提问来源于stack exchange,提问作者StefanP

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 17:47:06