может кто-нибудь помочь мне со следующей проблемой?
Сценарий. У меня есть служба Windows, работающая на виртуальной машине Azure. Сервис получает файлы, изменяет их каким-либо образом (предположим, что он добавляет настраиваемые свойства в файлы Word) и использует MIP SDK для их защиты с помощью идентификатора шаблона.
Проблема. IFileHandler.SetProtection(string)+CommitAsync(...)
завершается ошибкой за следующим исключением:
Произошла одна или несколько ошибок. ServiceDiscoveryHelper :: GetServiceDetails - Невозможно вычислить домен: лицензионные домены, удостоверение и базовый URL-адрес конечной точки облака пусты, correlationId: [9add32ba-0cb7-4d31-b9d8-0000b7c694a4]
Другая информация
RemoveProtection()+CommitAsync(...)
работают нормально.- I registered application in Azure Active Directory tenant.
- Generated secret:
<CLIENT_SECRET>
. - Granted the following permissions
- Generated secret:
- IAuthDelegate implementation
- uses ADAL to get access token using
client_credentials
authentication flow, because there is no interacting user (my app is service). - Я не знаю, должен ли я использовать параметр
identity
в потокеclient_credentials
.
- uses ADAL to get access token using
Фрагмент основного кода
MIP.Initialize(MipComponent.File);
var appInfo = new ApplicationInfo{
ApplicationId = ConfigurationManager.AppSettings["AppPrincipalId"],
ApplicationName = "App name",
ApplicationVersion = "1.0.0",
};
var authDelegate = new AuthDelegateImplementation(appInfo);
var fileProfileSettings = new FileProfileSettings("mip_data", false,
authDelegate, new ConsentDelegateImplementation(), appInfo, LogLevel.Trace);
var fileProfile = MIP.LoadFileProfileAsync(fileProfileSettings).Result;
var engineSettings = new FileEngineSettings("engine-id", "", "en-US"){
Identity = new Identity($"{appInfo.ApplicationId}@<TENANT-NAME>"){
DelegatedEmail = "<OWNER>@<TENANT-NAME>",
},
};
var fileEngine = fileProfile.AddEngineAsync(engineSettings).Result;
var fileHandler = fileEngine.CreateFileHandlerAsync("c:\\sample.docx", "0", true).Result;
fileHandler.SetProtection(new ProtectionDescriptor("<TEMPLATE-ID>"));
var success = fileHandler.CommitAsync("c:\\encrypted.docx").Result;
AuthDelegateImplementation
public string AcquireToken(Identity identity, string authority, string resource)
var authContext = new AuthenticationContext(authority + "/" + "<TENANT_ID>");
var clientCredential = new ClientCredential("<CLENT_ID>", "<CLIENT_SECRET>");
var res = await authContext.AcquireTokenAsync(resource, clientCredential);
return res.AccessToken;
}
ConsentDelegateImplementation
public class ConsentDelegateImplementation : IConsentDelegate {
public Consent GetUserConsent(string url) {
return Consent.Accept;
}
}