Есть ли способ зарегистрировать актив данных в каталоге данных Azure через API без входа пользователя? - PullRequest
1 голос
/ 01 ноября 2019

Мое приложение получает токен и может выполнять вызовы API в АЦП, например, поиск. Но запрос на регистрацию нового актива не выполняется, поскольку поле «LastRegisterdBy» не должно быть пустым или пустым и должно соответствовать текущему пользователю. Однако токен не содержит никакой пользовательской информации (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)

вместо

AcquireTokenAsync(resourceUri, clientId, new Uri(redirectUri), new PlatformParameters(PromptBehavior.Always)).

Таким образом, никто не должен вводить свои учетные данные. Цель состоит в том, чтобызапустите код в пакете 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 '. Подробности: значение не может быть нулевым, пустым или полностью состоять из пробелов. "}}

Wit upn =" test @ user ":

{" error ": {" code":" InvalidLastRegisteredBy "," message ":" LastRegisteredBy отличается от текущего пользователя. "}}

1 Ответ

0 голосов
/ 01 ноября 2019

Я нашел решение, оно довольно простое:

Имя пользователя приложения: clientIDFromAzureAppRegistration + "@" + tenantId.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...