如何在Xamarin中使用Windows身份验证连接SQL Server?
Keyword not supported: 'authentication'报错根源为Xamarin环境默认使用的System.Data.SqlClient库不支持Authentication连接字符串关键字,该关键字仅在2.0及以上版本的Microsoft.Data.SqlClient库中提供支持。
解决方案
步骤1:替换依赖库
卸载项目中引用的System.Data.SqlClient,安装最新稳定版的Microsoft.Data.SqlClient,该库已经适配Xamarin的Android、iOS目标平台。
步骤2:调整MSAL令牌请求配置
请求访问令牌时,scope设置为https://database.windows.net/.default,确保拿到的令牌具备SQL Server访问权限,MSAL会自动缓存有效令牌,用户只需完成一次登录即可。
步骤3:调整数据库连接代码
不需要在连接字符串中加Authentication相关配置,直接将MSAL获取到的访问令牌赋值给SqlConnection的AccessToken属性即可,等效于桌面端Trusted_Connection=True的效果,会使用当前登录的用户身份完成数据库认证。
示例代码如下:
// 先通过MSAL获取到用户的访问令牌 var accessToken = await YourMSALService.GetUserAccessTokenAsync(); using (SqlConnection con = new SqlConnection(@"Server=servername;Database=dbname;")) { // 赋值访问令牌 con.AccessToken = accessToken; SqlCommand cmd = new SqlCommand("SELECT * FROM tblName", con); con.Open(); // 执行业务逻辑 con.Close(); }
如果使用的是本地部署的SQL Server而非Azure SQL,需要提前配置SQL Server实例支持Azure AD身份验证,确保用户的AD账号具备对应数据库的访问权限即可正常使用。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

