有没有一种方法可以在没有用户登录的情况下通过api在Azure数据目录中注册数据资产



我的应用程序获得一个令牌,可以像搜索一样对ADC进行api调用。但是注册新资产的请求失败,因为字段"LastRegisterdBy"不能为null/空,并且必须与当前用户相对应。但是,令牌不包含任何用户信息(AccessToken((。Result.UserInfo.DisplayableId为null(。

我主要遵循MS提供的入门项目(https://github.com/Azure-Samples/data-catalog-dotnet-get-started/blob/master/Program.cs)

但我使用

AcquireTokenAsync(resourceUri, clientCredential).ConfigureAwait(false)

而不是

CCD_ 2。

因此,没有人需要输入他的证书。目标是在ssis包中运行代码,该包将每周执行一次,以自动捕获数据中的任何更新。

这是我的代码大纲:

class Program
{
static string clientIDFromAzureAppRegistration = "";
static string clientSecret = "";
static AuthenticationResult authResult = null;
static string catalogName = "catalog";
static void Main(string[] args)
{
var authResult = AccessToken();
string upn = authResult.Result.UserInfo.DisplayableId;
var id = RegisterDataAsset(authResult, SampleJson("test", upn));
}
static async Task<AuthenticationResult> AccessToken()
{
if (authResult == null)
{
//Resource Uri for Data Catalog API
string resourceUri = "https://api.azuredatacatalog.com";
//To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/en-us/library/azure/mt403303.aspx#clientID   
string clientId = clientIDFromAzureAppRegistration;
string clientS = clientSecret;
// Create an instance of AuthenticationContext to acquire an Azure access token
var authority = "https://login.microsoftonline.com/52497ec2-0945-4f55-8021-79766363dd96";
var authContext = new AuthenticationContext(authority);
var clientCredential = new ClientCredential(clientId, clientS);
// Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
//  AcquireToken takes a Client Id that Azure AD creates when you register your client app.
authResult = await authContext.AcquireTokenAsync(resourceUri, clientCredential).ConfigureAwait(false);
}
return authResult;
}
static string RegisterDataAsset(Task<AuthenticationResult> authResult, string json){
...
}
static HttpWebResponse SetRequestAndGetResponse(HttpWebRequest request, Task<AuthenticationResult> authResult, string payload = null){
...
}
static string SampleJson(string name, string upn){
...}

其中upn=authResult.Result.UserInfo.DisplayableId;我得到:

{"error":{"code":"InvalidPropertyValue","message":"其中一个属性的输入值无效。路径:'properties.lastRegisteredBy.upn'。详细信息:值不能为null、空或完全由空格组成。"}

Wit upn="test@user":

{"error":{"code":"InvalidLastRegisteredBy","message":"LastRegisteredBy与当前用户不同。"}}

我找到了解决方案,它很简单:

应用程序的用户名为:clientIDFromAzureAppRegistration+"@"+tenantId。

相关内容

最新更新