2015-12-07 3 views
2

Я пытаюсь написать интерфейс к нашей установке Phabricator, чтобы позволить внутренней системе улучшения создавать задачи. Однако я не могу понять, почему я продолжаю получать ошибку сертификата.Phabricator conduit.connect C# Ошибка сертификата

"{\"result\":null,\"error_code\":\"ERR-INVALID-CERTIFICATE\",\"error_info\":\"Your authentication certificate for this server is invalid.\"}" 

Следующий мой код;

private void CreateSession() 
    { 
     int token = (int)((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds); 

     var result = this.Do(
      "conduit.connect", 
      new 
      { 
       client = this.ClientName, 
       clientVersion = this.ClientVersion, 
       clientDescription = "HIS to Fabricator Connector", 
       user = this.User, 
       authToken = token, 
       authSignature = SHA1HashStringForUTF8String(token + this.Certificate) 
      }); 
     this.m_SessionKey = result.sessionKey; 
     this.m_ConnectionID = result.connectionID; 
    } 

public static string SHA1HashStringForUTF8String(string s) 
    { 
     byte[] bytes = Encoding.UTF8.GetBytes(s); 

     var sha1 = SHA1.Create(); 
     byte[] hashBytes = sha1.ComputeHash(bytes); 

     return HexStringFromBytes(hashBytes); 
    } 

public static string HexStringFromBytes(byte[] bytes) 
    { 
     var sb = new StringBuilder(); 
     foreach (byte b in bytes) 
     { 
      var hex = b.ToString("x2"); 
      sb.Append(hex); 
     } 
     return sb.ToString(); 
    } 

Это возвращает следующий JSON;

"{\"client\":\"HIS\",\"clientVersion\":\"1\",\"clientDescription\":\"HIS to Fabricator Connector\",\"user\":\"KYLIE\",\"authToken\":1449486922,\"authSignature\":\"ec020edbd5082d3971c2c11ef4f4917244fc4a78\"}" 

Я думаю, что проблема заключается в сертификате, который я передаю. Я использую;

api-3ydcae2gtmf6u6uer2zow465j6px 

, который я получил на странице токенов API кабелепровода.

Любые указатели?

ответ

1
  1. Вы должны получить маркер через .../канал/маркер
  2. Используйте этот маркер для запроса .../API/conduit.getcertificate

В результате вы получаете сертификат - > прибыль! :)

PS: для запроса сертификата не является ни api, ни clic-token! ;)