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

在Xamarin UWP应用中如何获取当前Windows登录用户详情

获取Xamarin UWP应用中当前Windows AD登录用户详情的解决方案

我明白你在Xamarin UWP应用里获取AD登录ID时遇到了返回空的问题,之前尝试的方案可能因为权限配置或者API适配的问题没生效。下面给你一套可行的步骤:

一、先检查UWP项目的权限配置

这是很多人忽略的关键点,权限不足会直接导致获取用户信息失败:

  • 打开你的UWP项目中的Package.appxmanifest文件
  • 切换到「功能」选项卡
  • 勾选用户信息(User Information)权限;如果你的应用运行在企业域环境下,还可以额外勾选企业身份验证(Enterprise Authentication),确保应用能访问AD相关数据

二、创建平台特定的用户信息服务

因为Xamarin.Forms没有跨平台的AD用户信息API,我们需要借助UWP原生API实现,用DependencyService来调用:

1. 在共享项目中定义接口

public interface IUserInfoService
{
    Task<string> GetCurrentADUserId();
}

2. 在UWP项目中实现接口

推荐使用微软推荐的Windows.System.User API(替代已弃用的UserInformation类):

using Windows.System;
using Xamarin.Forms;

[assembly: Dependency(typeof(UwpUserInfoService))]
namespace YourAppNamespace.UWP
{
    public class UwpUserInfoService : IUserInfoService
    {
        public async Task<string> GetCurrentADUserId()
        {
            try
            {
                // 获取当前系统用户
                User currentUser = User.GetDefault();
                
                // 请求用户的AD属性:UserPrincipalName是AD登录ID(格式如user@domain.com),SID是安全标识符
                var userProperties = await currentUser.GetPropertiesAsync(new[] { "UserPrincipalName", "SID" });
                
                // 优先返回UserPrincipalName,这是标准的AD登录标识
                if (userProperties.TryGetValue("UserPrincipalName", out object upn))
                {
                    return upn.ToString();
                }
                
                //  fallback到SID(如果UPN无法获取)
                if (userProperties.TryGetValue("SID", out object sid))
                {
                    return sid.ToString();
                }

                // 兼容旧API的备用方案(如果新API在某些环境下不生效)
                var domainName = Windows.System.UserProfile.UserInformation.GetDomainName();
                var userName = Windows.System.UserProfile.UserInformation.GetUserName();
                return $"{domainName}\\{userName}";
            }
            catch (UnauthorizedAccessException)
            {
                // 权限不足时返回null,你可以在这里添加错误提示逻辑
                return null;
            }
        }
    }
}

三、在共享项目中调用服务

在需要获取用户ID的地方,通过DependencyService调用我们实现的服务:

var userInfoService = DependencyService.Get<IUserInfoService>();
string adUserId = await userInfoService.GetCurrentADUserId();

// 处理获取到的ID,比如打印或存储
if (!string.IsNullOrEmpty(adUserId))
{
    // 你的业务逻辑
}
else
{
    // 提示用户权限不足或无法获取信息
}

可能的问题排查

  • 如果还是返回空,确认设备是否加入了Active Directory域,并且当前用户是域用户
  • 检查Package.appxmanifest是否正确保存了权限配置,有时候需要重启Visual Studio才能生效
  • 测试时不要用模拟器,尽量用真实的域环境设备测试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:27:34