具有 TDS(表格数据流)和启用 MFA 身份验证的 Azure 函数

问题描述 投票:0回答:2

我有一个 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。使用服务主体。

azure azure-active-directory azure-functions crm dynamics-crm-online
2个回答
0
投票

您需要应用程序用户,即 OAuth2 身份验证才能与 Dynamics 连接。使用用户名和密码以及登录提示不是方法。

启用 TDS 端点不会帮助您通过 Azure 函数上的 C# 进行连接

看看这篇文章。

  1. 在 Azure AD 中创建应用程序注册(客户端 ID 和密钥)
  2. 在 Dynamics 中创建应用程序用户。(分配正确的安全角色)
  3. 使用此 clientId 和 Secret 在 C# 中获取身份验证 Token。
  4. 使用 .netcore SDK for Dynamics 执行 CURD 操作

.net核心示例


0
投票

使用它来获取标准 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;
© www.soinside.com 2019 - 2024. All rights reserved.