ICertCredentials.Signature

Синтаксис Fore

Signature: String;

Синтаксис Fore.NET

Signature: String;

Описание

Свойство Signature определяет блок данных, подписанный цифровой подписью.

Комментарии

Сертификат, который используется для проверки цифровой подписи, должен быть сохранён вместе с описанием репозитория, к которому осуществляется подключение. Для сохранения сертификата используется приложение PP.Util.exe, входящее в состав «Форсайт. Аналитическая платформа».

Пример Fore

Для выполнения указанного примера необходимо иметь файл с закрытым ключом сертификата, который будет использоваться для задания цифровой подписи. Сам сертификат должен быть сохранен в репозитории, к которому осуществляется подключение.

Function Connect(Repository: String; PrivateKeyPath: String): IMetabase;
Var
    MbDef: IMetabaseDefinition;
    Package: ISecurityPackage;
    Provider: ICertProvider;
    Cookie, Code, Signature: String;
    FStream: IFileStream;
    Signer: ICertSigner;
    CertCreds: ICertCredentials;
    Mb: IMetabase;
    MbManager: IMetabaseManager;
Begin
    MbManager := MetabaseManagerFactory.Active;
    MbDef := MbManager.Definitions.FindById(Repository);
    If MbDef <> Null Then
        Package := MbManager.Packs.FindById(MbDef.SecurityPackage).Package;
        //Поставщик сертификатов
        Provider := Package.CertProvider;
        Provider.NewCode(Cookie, Code);
        //Закрытый ключ
        FStream := New FileStream.Create(PrivateKeyPath, FileOpenMode.Read, FileShare.DenyNone);
        Signer := Provider.OpenSigner("sp", FStream);
        //Подписание блока данных цифровой подписью
        Signature := Signer.Sign(Code);
        //Учетные данные для подключения с помощью сертификата
        CertCreds := Package.CreateCredentials(AuthenticationMode.Certificate) As ICertCredentials;
        CertCreds.UserName := "test";
        CertCreds.RolesStr := "АДМИНИСТРАТОРЫ";
        CertCreds.Cookie := Cookie;
        CertCreds.Signature := Signature;
        CertCreds.Certificate := "sp";
        //Подключение
        Mb := MbDef.Open(CertCreds);
        If Mb <> Null Then
            Return Mb;
        Else
            Return Null;
        End If;
    Else
        Return Null;
    End If;
End Function Connect;

При выполнении указанной функции осуществляется проверка наличия описания репозитория, указанного в первом параметре. Если репозиторий существует, то осуществляется подключение к нему с использованием цифровой подписи. Для подписи цифровой подписью необходимо иметь закрытый ключ, путь к которому передается во втором параметре функции. При удачном подключении функция вернёт открытое соединение с репозиторием, иначе - Null.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.Metabase;

Function Connect(Repository: String; PrivateKeyPath: String): IMetabase;
Var
    MbManagerCls: MetabaseManagerFactory = New MetabaseManagerFactoryClass();
    MbDef: IMetabaseDefinition;
    Package: ISecurityPackage;
    Provider: ICertProvider;
    Cookie, Code, Signature: String;
    FStream: FileStream = New FileStream(PrivateKeyPath, FileMode.Open, FileAccess.Read);
    Signer: ICertSigner;
    CertCreds: ICertCredentials;
    Mb: IMetabase;
    MbManager: IMetabaseManager;
Begin
    MbManager := MbManagerCls.Active;
    MbDef := MbManager.Definitions.FindById(Repository);
    If MbDef <> Null Then
        Package := MbManager.Packs.FindById(MbDef.SecurityPackage).Package;
        //Поставщик сертификатов
        Provider := Package.CertProvider;
        Provider.NewCode(Var Cookie, Var Code);
        Signer := Provider.OpenSigner("sp", FStream);
        //Подписание блока данных цифровой подписью
        Signature := Signer.Sign(Code);
        //Учетные данные для подключения с помощью сертификата
        CertCreds := Package.CreateCredentials(AuthenticationMode.amCertificate) As ICertCredentials;
        CertCreds.UserName := "test";
        CertCreds.RolesStr := "АДМИНИСТРАТОРЫ";
        CertCreds.Cookie := Cookie;
        CertCreds.Signature := Signature;
        CertCreds.Certificate := "sp";
        //Подключение
        Mb := MbDef.Open(CertCreds, ApplicationMode.amWin, LocaleCodeID.lcidRussian);
        If Mb <> Null Then
            Return Mb;
        Else
            Return Null;
        End If;
    Else
        Return Null;
    End If;
End Function;

См. также:

ICertCredentials