Ниже приведен пример использования операции OpenMetabase для подключения к репозиторию с использованием цифровой подписи. В репозитории должен быть сохранен сертификат с идентификатором «SPCERT». Запрашиваемый блок данных подписывается с помощью pfx-сертификата с наименованием «sp.pfx».
{ "OpenMetabase" : { "tDef" : { "id" : "WAREHOUSE" }, "tCreds" : { "pass" : "", "verifier" : { "mbUser" : { "id" : "Warehouse" }, "user" : { "id" : "user@test.ru" }, "certificate" : "SPCERT", "cookie" : "1437524055", "signature" : "AjTHCXJx6hs28GFsUNqrQlHoRSM6Zrj6Ax40n1nO+uE5zhVL9c8e5WFq4FUalSLWGIVWU0ymkEfVu62gzSn35yAen1kbtjOeQagbX0kG5MQhjVYMk8IVV8bLRIAUbuDah4vxlqTBjvPRsTFy5QU1pr0cYZdmHwdQSPKu7kZ9jS\/b1TOkPyRm8QrywVAU5MdqqR5oCN9qzAvDktTJXPU2a4BL0lRCAJuy0aYTXRU07J0Z5Jek2rUTQpJ1Qn7+zxew23SG\/M1Ma8w6k9+YQn5pokh43xbkpKPScbQOeho+NNpHFP\/yGN6PmeCCvltjOiuiGyn2XeSkMvSpmGVP+Z4NCQ==" } }, "tArg" : "" } }
{ "OpenMetabaseResult" : { "id" : "S1!M" } }
Параметры, необходимые для подключения, передаются в качестве входных параметров функции. Результат выполнения операции является результатом работы функции.
public static MbId MetabaseConnectWithDigitalSign(string mbDefinitionId, string repoUser, string dbLoginUser)
{
var somClient = new SomPortTypeClient(); //Прокси-объект для выполнения операций
//Получение блока данных, который будет подписан цифровой подписью
var verifierCode = somClient.GetVerifierCode(new GetVerifierCode() { });
//Открытие pfx-сертификата и получение из него ключа подписи
var x509 = new X509Certificate2(@"../../sp.pfx");
RSACryptoServiceProvider rsa = x509.PrivateKey as RSACryptoServiceProvider;
//Вычисление MD5-хеш от полученных ранее данных и подписание этого хеша цифровой подписью RSA
var sign = rsa.SignData(verifierCode.verifierCode, new MD5CryptoServiceProvider());
//Параметры выполнения операции
var tOpen = new OpenMetabase()
{
tArg = new OpenMetabaseArg() { },
tCreds = new UserCreds() //Учётные данные, с которыми производится подключение
{
verifier = new VerifierCodeLogonData()
{
//Пользователь, под которым входим в репозиторий. Этого пользователя может не быть в СУБД
user = new UserId() { id = repoUser },
//Пользователь, под которым подключаемся к БД репозитория. Пароль защищённо хранится в реестре на BI-сервере
mbUser = new UserId() { id = dbLoginUser },
//Ранее полученное значение, используемое для установления соответствия между цифровой подписью и блоком данных
cookie = verifierCode.cookie,
//Цифровая подпись, которую должен проверить сервер
signature = sign,
//Сертификат, который будет использоваться для проверки цифровой подписи. Должен быть сохранён в базе репозитория
certificate = "SPCERT"
},
pass = string.Empty
},
tDef = new MbDef() //Описание репозитория, к которому производится подключение
{
id = mbDefinitionId
}
};
//Подключение к репозиторию
MbId mb = somClient.OpenMetabase(tOpen);
return mb;
}
См. также: