日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

發送 HTTP 請求(C# )

更新時間:

本文介紹 API 訂閱方應用如何使用 C# 語言對 HTTP 請求加簽、驗簽。 API 網關提供了 C# SDK,即 mosng-sdk-csharp.zip。該 SDK 集成了加簽、驗簽的邏輯,同時默認支持序列化和反序列化。

前提條件

在進行本地應用開發前,您需要確保已經完成以下操作:

  • 已在 API 網關控制臺創建了一個應用,參見 創建應用

  • 已將該應用的 APPID 提供給了 API 發布者,并獲得了授權,參見 授權 API

  • 已獲取了如下服務配置信息。具體獲取方法,參見 獲取服務端信息

    • 應用的訪問密鑰(Access Key/Secret Key)

    • API 的域名地址(host)、請求路徑(path)、方法(method)、請求體(body)

操作步驟

  1. 獲取并安裝 Visual Studio,可至 Visual Studio 官方網站下載。

  2. 引入 C# SDK。

    1. 下載 SDK 及二進制文件。

      1. 請訪問 mosng-sdk-csharp.zipHttpSignatures.dll.zip 下載 SDK 和 SDK 的二進制文件。 下載“mosng-sdk-csharp.zip”壓縮包并解壓進入對應的目錄后,雙擊 SDK 包“signature.sln”文件,將 C# 的 SDK 引入Visual Studio。其中,HttpSignatures 項目為實現簽名算法的共享庫,可用于 .Net Framework 與 .Net Core 項目。“HttpSignatureTests”項目為調用示例。

    2. 解壓 mosng-sdk-csharp.zip 進入對應的目錄后,雙擊 SDK 包 signature.sln 文件,將 C# SDK 引入 Visual Studio。

      其中,HttpSignatures 項目為實現簽名算法的共享庫,可用于.Net Framework.Net Core 項目。HttpSignatureTests 項目為調用示例。

  3. 定義要加簽的 headers 和算法。

    var spec =newSignatureSpecification(){
    Algorithm="hmac-sha256",
    Headers=newstring[]{"content-length","host","date","(request-target)"},
    KeyId= keyId
    };
  4. 構建 request 對象。 您需要構建 request 對象,用于組裝請求,代碼示例如下:

    var request =newRequest();
     request.Path="/foo/Bar";
     request.Method=HttpMethod.Get;
     request.SetHeader("content-length","18");
     request.SetHeader("host","example.org");
     request.SetHeader("date","Tue, 07 Jun 2014 20:51:35 GMT");
  5. 構建一個 signer 對象。

    AuthorizationParser 對象包含 hmac-sha1、hmac-sha256、hmac-sha512 三種算法。HttpSignatureStringExtractor 對象初始化,用來加簽 request 請求 header 中的字段。

    代碼示例如下:

    var signer =new HttpSigner(newAuthorizationParser(),newHttpSignatureStringExtractor());
     signer.Sign(request, spec, keyId, privateKey);
  6. 簽名計算。

    計算簽名之后,簽名信息放在 request 的 header[“Signature”] 里。

    代碼示例如下:

    var signer =new HttpSigner(newAuthorizationParser(),newHttpSignatureStringExtractor());
     signer.Sign(request, spec, keyId, privateKey);
  7. 簽名驗證。

    取出 request 的 header[“Signature”] 里的加簽信息并查詢驗證結果。

    代碼示例如下:

    string s = signer.CalculateSignature(request, spec, privateKey);
    Console.WriteLine(s);
    Assert.AreEqual("yT/NrPI9mKB5R7FTLRyxxxx+QLQOEAvbGmauxxxx+Jg=", s);

完整樣例

說明

如果 API 開啟了密鑰認證,您還需要在工程中配置相應的 Access Key 和 Secret Key,推薦使用啟動參數和環境變量的形式。

# 客戶端請求的ak、sk,就是應用的密鑰信息
gateway.accessKey=<ytestAccessKey ID>
gateway.secretKey=<testAccessKey Secret>
apigateway.authorization=<yourAuthorization>
[Test]
publicvoidSignRequestTest2()
{
@Value("${gateway.accessKey}")
private String accessKey;

@Value("${gateway.secretKey}")
private String secretKey;

@Value("${apigateway.authorization}")
private String authorization;
  
// 定義要加簽的headers和算法
var spec =newSignatureSpecification()
{
Algorithm="hmac-sha256",
Headers=newstring[]{"content-length","host","date","(request-target)"},
KeyId= keyId
};

// http 請求
var request =newRequest();
     request.Path="/foo/Bar";
     request.Method=HttpMethod.Get;
     request.SetHeader("content-length","18");
     request.SetHeader("host","example.org");
     request.SetHeader("date","Tue, 07 Jun 2014 20:51:35 GMT");

// 簽名計算,計算之后,簽名信息放在request的 header["Signature"] 里
var signer =new HttpSigner(newAuthorizationParser(),newHttpSignatureStringExtractor());
     signer.Sign(request, spec, keyId, privateKey);
Console.WriteLine(request.GetHeader("Signature"));
Assert.AreEqual(authorization, request.GetHeader("Signature"));

// 獨立的簽名計算方法
string s = signer.CalculateSignature(request, spec, privateKey);
Console.WriteLine(s);
Assert.AreEqual("yT/NrPI9mKB5R7FTLRyFWvB+QLQOEAvbGmauC0tI+Jg=", s);
}

加簽算法

Base64(hmac-sha256(signing_string, Encoding.UTF8.GetBytes(private_key)))
Base64(hmac-sha512(signing_string, Encoding.UTF8.GetBytes(private_key)))
Base64(hmac-sha1(signing_string, Encoding.UTF8.GetBytes(private_key)))
  • signing_string:加簽的字符串,根據 SignatureSpecification 里的 Headers 里定義的頭生成。

  • secret_key:私鑰,用 UTF-8 編碼轉成字節數組。

限制說明

目前沒有對 HTTP 請求的 body 做摘要(digest)加簽。