.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
相关产品推荐
相关产品推荐

