我有一个 C# 控制台应用程序,它使用下面的连接字符串,它工作正常,当我运行它时,它会要求输入密码,一旦经过身份验证,它就可以完美工作,我可以访问动态 crm 在线数据库。但是现在我想移动代码并使用 Azure Function,在 Visual Studio 中它的工作方式与控制台应用程序中相同,但交互式 Azure AD 身份验证在发布到 Azure 时将不起作用。有谁知道如何实现这一点。我找不到任何可以看到任何演示或文档的文章。
string ConnectionStringTDS = @"Driver={ODBC Driver 17 for SQL Server};SERVER=*******.crm.dynamics.com;DATABASE=******;Authentication=ActiveDirectoryInteractive;UID=XRMDe**@****.com";
我已启用 TDS 使用 SQL 查询访问数据库。我的帐户已启用 MFA。使用服务主体。
使用它来获取标准 SQL 连接的令牌。我正在使用 EntityFramework Core 来检索数据,当然它是只读的,但我可以执行诸如查询记录Where CreatedOn=ModifiedOn 之类的操作,目前我在 FetchXml 中无法执行此操作。我还小心地像 FetchXml 一样,一次只获取 5K 记录。 Dataverse 将限制昂贵的查询。
如果范围未设置为 dataverse url,当您尝试访问数据时将会收到错误。
string dataverseUrl = "https://mycompany.crm3.dynamics.com";
string resourceId = dataverseUrl + "/";
string scopes = [$"{resourceId}/.default"]; //Yes it’s, double //
var authority = $"https://login.microsoftonline.com/{aadTenantId}";
var app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.Build();
var result = await app.AcquireTokenForClient(scopes).ExecuteAsync();
sqlConnectionString = $"Server={dataverseUrl.Replace("https://", "")};Database={database};Encrypt=True;TrustServerCertificate=False;Persist Security Info=False";
sqlConnection.ConnectionString = sqlConnectionString;
sqlConnection.AccessToken = result.AccessToken;