Мое приложение получает токен и может выполнять вызовы 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 отличается от текущего пользователя. "}}