Skip to content

TBCBank/TBC.OpenBanking.Jws

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

TBC.OpenBanking.Jws

NuGet version (TBC.OpenBanking.Jws) NuGet version (TBC.OpenBanking.Jws.Http) CI CodeQL

JSON แƒ•แƒ”แƒ‘แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜

แƒกแƒแƒฅแƒแƒ แƒ—แƒ•แƒ”แƒšแƒแƒจแƒ˜ แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒกแƒแƒฅแƒแƒ แƒ—แƒ•แƒ”แƒšแƒแƒก แƒ™แƒแƒœแƒแƒœแƒ›แƒ“แƒ”แƒ‘แƒšแƒแƒ‘แƒแƒกแƒ—แƒแƒœ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒ“แƒแƒœแƒ”แƒ แƒ’แƒ•แƒ NextGenPSD2 XS2A แƒฉแƒแƒ แƒฉแƒแƒก แƒกแƒแƒคแƒฃแƒซแƒ•แƒ”แƒšแƒ–แƒ”. แƒขแƒ”แƒฅแƒœแƒ˜แƒ™แƒฃแƒ แƒ˜ แƒ—แƒ•แƒแƒšแƒกแƒแƒ–แƒ แƒ˜แƒกแƒ˜แƒ— แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก RESTful API-แƒก, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒแƒฅแƒ•แƒ”แƒงแƒœแƒ”แƒ‘แƒก แƒแƒœแƒ’แƒแƒ แƒ˜แƒจแƒ˜แƒก แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ” แƒกแƒแƒ’แƒแƒ“แƒแƒฎแƒ“แƒ แƒ›แƒแƒ›แƒกแƒแƒฎแƒฃแƒ แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒ˜ (แƒแƒ›แƒกแƒ›แƒž), แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒแƒ“ Account Servicing Payment Service Provider (ASPSP) แƒ“แƒ แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒช แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒ›แƒฎแƒแƒ แƒ˜แƒก แƒžแƒ แƒแƒ•แƒแƒ˜แƒ“แƒ”แƒ แƒก (แƒ›แƒ›แƒž), แƒ˜แƒœแƒ’แƒšแƒ˜แƒกแƒฃแƒ แƒแƒ“ Third Party Provider (TPP).

API-แƒก แƒฃแƒกแƒแƒคแƒ แƒ—แƒฎแƒแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ–แƒœแƒ˜แƒ—, แƒกแƒฎแƒ•แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒ”แƒ‘แƒ—แƒแƒœ แƒ”แƒ แƒ—แƒแƒ“, แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ. แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒคแƒแƒ แƒ’แƒšแƒ”แƒ‘แƒจแƒ˜ แƒ˜แƒœแƒคแƒแƒ แƒ›แƒแƒชแƒ˜แƒ˜แƒก แƒ’แƒแƒชแƒ•แƒšแƒ˜แƒกแƒแƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ (Request) แƒ“แƒ แƒžแƒแƒกแƒฃแƒฎแƒ˜ (Response) แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒแƒ“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒ›แƒแƒ›แƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒ แƒ›แƒแƒžแƒแƒกแƒฃแƒฎแƒ”แƒก แƒ›แƒ˜แƒ”แƒ . แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ "JSON แƒ•แƒ”แƒ‘แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก (JWS) แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒ แƒฆแƒ˜แƒ แƒคแƒ˜แƒœแƒแƒœแƒกแƒ”แƒ‘แƒ˜แƒก แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒแƒจแƒ˜" แƒกแƒแƒฎแƒ”แƒšแƒ›แƒซแƒฆแƒ•แƒแƒœแƒ”แƒšแƒแƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒแƒ•แƒ˜แƒก แƒ›แƒฎแƒ แƒ˜แƒ• แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒจแƒ˜ แƒ”แƒคแƒฃแƒซแƒœแƒ”แƒ‘แƒ "Open Banking Europe. JSON Web Signature Profile for Open Banking" แƒ“แƒ "RFC 7515 - JSON Web Signature (JWS)"-แƒก.

แƒ แƒ”แƒžแƒแƒ–แƒ˜แƒขแƒแƒ แƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ  แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒžแƒ แƒแƒ”แƒฅแƒขแƒก แƒ“แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒก

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ TBC.OpenBanking.Jws

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ–แƒ”แƒ›แƒแƒฎแƒกแƒ”แƒœแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ— แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ“แƒ HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ–แƒ” แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ.

แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ C#-แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ” แƒ“แƒ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜แƒ .NET Standard 2.0-แƒ—แƒแƒœ. แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ Microsoft-แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ–แƒ”.

แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒฅ SampleConsole

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ TBC.OpenBanking.Jws.Http

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ•แƒœแƒแƒ“ แƒแƒ›แƒแƒ แƒขแƒ˜แƒ•แƒ”แƒ‘แƒก TBC.OpenBanking.Jws แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒแƒก.

แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒ“แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜แƒ C#-แƒ˜แƒก แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒ แƒ”แƒ‘แƒ˜แƒก แƒ”แƒœแƒแƒ–แƒ” แƒ“แƒ แƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒแƒ“แƒ˜แƒ .NET Standard 2.0-แƒ—แƒแƒœ. แƒ“แƒแƒ›แƒแƒ™แƒ˜แƒ“แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ™แƒแƒ›แƒžแƒแƒœแƒ˜แƒ Microsoft-แƒ˜แƒก แƒฌแƒแƒ แƒ›แƒแƒ”แƒ‘แƒฃแƒš แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ”แƒ‘แƒ–แƒ”.

แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒแƒ  แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“ แƒ™แƒšแƒแƒกแƒก

  • class TBC.OpenBanking.Jws.Http.JwsMessageHandler DelegatingHandler-แƒ˜แƒก แƒจแƒ•แƒ˜แƒšแƒแƒ‘แƒ˜แƒšแƒ˜ แƒ™แƒšแƒแƒกแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒจแƒ˜แƒช แƒ’แƒแƒœแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ TBC.OpenBanking.Jws-แƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ
  • class TBC.OpenBanking.Jws.Http.JwsClientOptions IOptions แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก (Microsoft.Extensions.Options) แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒก, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒซแƒšแƒ”แƒ•แƒ— แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒ แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜ แƒ›แƒแƒ แƒ—แƒแƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ

JwsMessageHandler-แƒ˜แƒก แƒ™แƒšแƒแƒกแƒ˜ แƒ˜แƒซแƒšแƒ”แƒ•แƒ แƒกแƒแƒจแƒฃแƒแƒšแƒ”แƒ‘แƒแƒก แƒฉแƒแƒฏแƒ“แƒ”แƒ— Request-แƒ˜แƒก แƒ“แƒ Response-แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒจแƒ˜ แƒ“แƒ แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ Request-แƒก แƒ“แƒแƒแƒ“แƒแƒ— แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ, แƒฎแƒแƒšแƒ Response-แƒก แƒ›แƒแƒงแƒแƒšแƒ˜แƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ—.

Request-response handler pipeline

แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒฅ WebApiHttpClientExample

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ”แƒ‘แƒ˜แƒก แƒžแƒ แƒแƒ”แƒฅแƒขแƒ”แƒ‘แƒ˜

แƒ แƒ”แƒžแƒแƒ–แƒ˜แƒขแƒแƒ แƒ˜แƒจแƒ˜ แƒ›แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜แƒ แƒกแƒแƒ›แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜

SampleConsole

แƒ”แƒก แƒแƒ แƒ˜แƒก TBC.OpenBanking.Jws แƒ‘แƒ˜แƒ‘แƒšแƒ˜แƒแƒ—แƒ”แƒ™แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜.

แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒคแƒแƒ˜แƒšแƒ”แƒ‘แƒ˜:

  • "HttpRequest-001.txt" โ€“ แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒแƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก
  • "HttpResponse-001.txt" โ€“ แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒคแƒแƒ˜แƒšแƒ˜ แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก แƒกแƒแƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ HTTP แƒžแƒแƒกแƒฃแƒฎแƒก
  • keyandcert.pfx โ€“ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ“แƒ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ•แƒ”แƒšแƒ˜ แƒคแƒแƒ˜แƒšแƒ˜. แƒ”แƒก แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก
  • rootCACert.crt โ€“ แƒซแƒ˜แƒ แƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜.

แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ! แƒ˜แƒ›แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก, แƒ แƒแƒ› แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒฃแƒจแƒ”แƒชแƒ“แƒแƒ›แƒแƒ“ แƒ˜แƒ›แƒฃแƒจแƒแƒแƒก, "rootCACert.crt" แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ•แƒแƒ—แƒแƒ•แƒกแƒแƒ— Windows-แƒ˜แƒก "Trusted Root Certificate Authorities"-แƒก แƒกแƒแƒ—แƒแƒ•แƒกแƒจแƒ˜. แƒกแƒแƒฅแƒ›แƒ” แƒ˜แƒ›แƒแƒจแƒ˜แƒ, แƒ แƒแƒ› แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒจแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒจแƒ”แƒ“แƒ˜แƒก แƒ˜แƒ› แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒก แƒ›แƒ”แƒฌแƒงแƒ•แƒ˜แƒšแƒ” แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒ˜แƒฅแƒ›แƒœแƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ. แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒแƒกแƒ”แƒ•แƒ” แƒ›แƒแƒฌแƒ›แƒ“แƒ”แƒ‘แƒ แƒกแƒแƒœแƒ“แƒแƒ แƒ—แƒฃ แƒแƒ แƒ แƒแƒ› แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก "แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜". แƒ—แƒฃ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒแƒ  แƒแƒ แƒ˜แƒก แƒกแƒแƒœแƒ“แƒ, แƒฎแƒ“แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒชแƒ“แƒแƒ›แƒ.

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ˜แƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ›แƒ“แƒ”แƒ•แƒ แƒแƒ‘แƒ แƒแƒกแƒ”แƒ—แƒ˜แƒ:

  1. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒžแƒ˜แƒ แƒแƒ“ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒก แƒ“แƒ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒก "keyandcert.pfx" แƒคแƒแƒ˜แƒšแƒ˜แƒ“แƒแƒœ
  2. HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ
    1. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ“แƒ แƒžแƒแƒ แƒกแƒแƒ•แƒก "HttpRequest-001.txt" แƒคแƒแƒ˜แƒšแƒก. แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก (headers) แƒ“แƒ แƒขแƒแƒœแƒ˜แƒก (body) แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก
    2. แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ TBC.OpenBanking.Jws แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก
    3. แƒฅแƒ›แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒš แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก โ€“ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜: "digest", แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒขแƒแƒœแƒ˜แƒก แƒฐแƒ”แƒจแƒ˜ แƒ“แƒ "x-jws-signature", แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ
    4. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜ "SignedRequest.txt"
  3. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ
    1. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ“แƒ แƒžแƒแƒ แƒกแƒแƒ•แƒก "SignedRequest.txt" แƒคแƒแƒ˜แƒšแƒก. แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก (headers) แƒ“แƒ แƒขแƒแƒœแƒ˜แƒก (body) แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก
    2. แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ TBC.OpenBanking.Jws แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก
  4. HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ
    1. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ“แƒ แƒžแƒแƒ แƒกแƒแƒ•แƒก "HttpResponse-001.txt" แƒคแƒแƒ˜แƒšแƒก. แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก (headers) แƒ“แƒ แƒขแƒแƒœแƒ˜แƒก (body) แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก
    2. แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ TBC.OpenBanking.Jws แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒฅแƒ›แƒœแƒ˜แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก
    3. แƒฅแƒ›แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒš แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก โ€“ แƒแƒ แƒกแƒ”แƒ‘แƒฃแƒš แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒก แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜: "digest", แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒขแƒแƒœแƒ˜แƒก แƒฐแƒ”แƒจแƒ˜ แƒ“แƒ "x-jws-signature", แƒกแƒแƒ“แƒแƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ
    4. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ˜แƒœแƒแƒฎแƒแƒ•แƒก แƒคแƒแƒ˜แƒšแƒจแƒ˜ "SignedResponse.txt"
  5. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ
    1. แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ แƒ™แƒ˜แƒ—แƒฎแƒฃแƒšแƒแƒ‘แƒก แƒ“แƒ แƒžแƒแƒ แƒกแƒแƒ•แƒก "SignedResponse.txt" แƒคแƒแƒ˜แƒšแƒก. แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ”แƒ‘แƒ˜แƒก (headers) แƒ“แƒ แƒขแƒแƒœแƒ˜แƒก (body) แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก
    2. แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒ— แƒ“แƒ TBC.OpenBanking.Jws แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒแƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก

แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜ แƒ’แƒแƒขแƒแƒ แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒงแƒ•แƒ”แƒšแƒ แƒ˜แƒก แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒช แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ— TBC.OpenBanking.Jws แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒกแƒแƒก

TBC.OpenBanking.Jws แƒ™แƒšแƒแƒกแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒก แƒ›แƒ˜แƒฎแƒ”แƒ“แƒ•แƒ˜แƒ—

HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ

JWS แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ— HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒกแƒแƒฌแƒ”แƒ แƒแƒ“ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜

  1. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฎแƒ”แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ•แƒแƒฌแƒ”แƒ แƒแƒ—(แƒแƒ›แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒšแƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ“แƒแƒœ) แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒ˜ TBC.OpenBanking.Jws.HttpRequestData
  2. แƒฎแƒ”แƒšแƒ›แƒแƒ›แƒฌแƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ“แƒ แƒ›แƒ˜แƒกแƒ˜ แƒ›แƒจแƒแƒ‘แƒ”แƒšแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก, แƒ’แƒแƒ แƒ“แƒ แƒซแƒ˜แƒ แƒ˜ (root) แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒกแƒ, แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒ
  3. แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒ“แƒ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒœแƒกแƒแƒ–แƒฆแƒ•แƒ แƒ, แƒ แƒแƒ›แƒšแƒ˜แƒ—แƒแƒช แƒ”แƒฌแƒ”แƒ แƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ˜ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒก แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒ˜ TBC.OpenBanking.Jws.SupportedAlgorithms
  4. แƒ–แƒ”แƒ“แƒ แƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ”แƒ‘แƒ˜แƒก แƒ’แƒแƒ›แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ˜แƒ— แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜แƒก HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒแƒจแƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒ แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒ˜ TBC.OpenBanking.Jws.HttpSigner

แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒแƒ›แƒแƒœแƒแƒ แƒ˜แƒ“แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ“แƒแƒœ.

private static void SignHttpRequestSample(
    string algorithmName,
    string inFileName,
    string outFileName,
    X509Certificate2 publicKeyCert,
    X509Certificate2 privateKeyCert,
    ILoggerFactory loggerFactory)
{
    try
    {
        // Get HttpRequestData from HTTP Request
        var httpData = ReadHttpRequestDataFromString(File.ReadAllText(inFileName));

        // Get certificate chain
        // If it is possible, better to cache chain, because chain creation is slow
        X509Certificate2Collection chainCertificates = GetCertificateChain(publicKeyCert);

        // Get ISigner
        var signer = SupportedAlgorithms.CreateSigner(privateKeyCert, algorithmName);

        // Create HttpSigner.
        // Need ISigner, certificate with signer's public key and
        // certificate chain in X509Certificate2Collection
        var reqSign = new HttpSigner<HttpRequestData>(loggerFactory.CreateLogger<HttpSigner<HttpRequestData>>())
        {
            Signer = signer,
            SignerCertificate = publicKeyCert,
            SignerCertificateChain = chainCertificates
        };

        // Create signature
        reqSign.CreateSignature(httpData);

        if (reqSign.IsSignatureCreated)
        {
            httpData.Headers.Add(HttpMessageData.DigestHeadertName, reqSign.DigestHeaderValue);
            httpData.Headers.Add(HttpMessageData.SignatureHeaderName, reqSign.SignatureHeaderValue);

            WriteHttpRequestDataToFile(httpData, outFileName);
        }
    }
    catch (Exception x)
    {
        Console.Error.WriteLine(x.ToString());
    }
}

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜: HttpRequestData แƒ™แƒšแƒแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ“แƒแƒœ HttpRequestData แƒ™แƒšแƒแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜ (header-แƒ˜), HTTP แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ (post, get แƒ“แƒ แƒ.แƒจ.) แƒ“แƒ HTTP แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒกแƒ˜ (body).

    // Get HttpRequestData from HTTP Request
    var httpData = ReadHttpRequestDataFromString(File.ReadAllText(inFileName));

แƒ›แƒ”แƒแƒ แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜: แƒ•แƒ˜แƒฆแƒ”แƒ‘แƒ— แƒฎแƒ”แƒšแƒ›แƒแƒ›แƒฌแƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ”แƒ‘แƒก (แƒซแƒ˜แƒ แƒ˜ (root) แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ’แƒแƒ แƒ“แƒ) แƒ“แƒ แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒก. แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒก แƒ™แƒแƒ“แƒ˜ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— GetCertificateChain แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒจแƒ˜.

    // Get certificate chain
    // If it is possible, better to cache chain, because chain creation is slow
    X509Certificate2Collection chainCertificates = GetCertificateChain(publicKeyCert);

แƒ›แƒ”แƒกแƒแƒ›แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜: แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒ“แƒ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒ“แƒ’แƒ”แƒœแƒ. TBC.OpenBanking.Jws.SupportedAlgorithms แƒ™แƒšแƒแƒกแƒ˜แƒก CreateSigner แƒ›แƒ”แƒ—แƒแƒ“แƒ˜แƒ— แƒ•แƒฅแƒ›แƒœแƒ˜แƒ— ISigner แƒ˜แƒœแƒขแƒ”แƒ แƒคแƒ”แƒ˜แƒกแƒ˜แƒก แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒก. แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒ“แƒแƒ•แƒ—, แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒแƒก แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ•แƒ”แƒšแƒ˜ X509Certificate2 แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ แƒ“แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒ“แƒแƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ.

    // Get ISigner
    var signer = SupportedAlgorithms.CreateSigner(privateKeyCert, algorithmName);

แƒ“แƒฆแƒ”แƒ•แƒแƒœแƒ“แƒ”แƒšแƒ˜ แƒ›แƒ“แƒ’แƒแƒ›แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒ— แƒ›แƒฎแƒแƒ แƒ“แƒแƒญแƒ”แƒ แƒ˜แƒšแƒ˜แƒ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ”แƒ‘แƒ˜:

แƒขแƒ”แƒฅแƒกแƒขแƒฃแƒ แƒ˜ แƒ“แƒแƒกแƒแƒฎแƒ”แƒšแƒ”แƒ‘แƒ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒแƒฆแƒฌแƒ”แƒ แƒ
"RS256" RSASSA-PKCS1-v1_5 using SHA-256
"RS384" RSASSA-PKCS1-v1_5 using SHA-384
"RS512" RSASSA-PKCS1-v1_5 using SHA-512
"PS256" RSASSA-PSS using SHA-256 and MGF1 with SHA-256
"PS384" RSASSA-PSS using SHA-384 and MGF1 with SHA-384
"PS512" RSASSA-PSS using SHA-512 and MGF1 with SHA-512
"ES256" ECDSA using P-256 and SHA-256
"ES384" ECDSA using P-384 and SHA-384
"ES512" ECDSA using P-521 and SHA-512

แƒ›แƒ”แƒแƒ—แƒฎแƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜: แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ™แƒšแƒแƒกแƒก HttpSigner. แƒแƒ› แƒ™แƒšแƒแƒกแƒก แƒจแƒ”แƒฃแƒซแƒšแƒ˜แƒ แƒ แƒแƒ’แƒแƒ แƒช HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก, แƒแƒกแƒ”แƒ•แƒ” HTTP แƒžแƒแƒกแƒฃแƒฎแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ. แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒ แƒแƒ แƒ˜แƒก แƒ›แƒฎแƒแƒšแƒแƒ“ แƒ˜แƒ› แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ™แƒšแƒแƒกแƒจแƒ˜ แƒ แƒแƒช แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ. แƒแƒ› แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒ˜แƒฅแƒ›แƒœแƒ”แƒ‘แƒ HttpSigner แƒ™แƒšแƒแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜ HttpRequestData แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ—แƒ แƒขแƒ˜แƒžแƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก. แƒแƒกแƒ”แƒ•แƒ” แƒ•แƒแƒงแƒ”แƒœแƒ”แƒ‘แƒ— Signer (แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜ แƒ“แƒ แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜), SignerCertificate (แƒฎแƒ”แƒšแƒ›แƒแƒ›แƒฌแƒ”แƒ แƒ˜ แƒžแƒ˜แƒ แƒแƒ“แƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜) แƒ“แƒ SignerCertificateChain (แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒจแƒแƒ‘แƒšแƒ”แƒ‘แƒ˜แƒก แƒฏแƒแƒญแƒ•แƒ˜).

แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก แƒ•แƒแƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ”แƒ‘แƒ— CreateSignature แƒคแƒฃแƒœแƒฅแƒชแƒ˜แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒ’แƒแƒ“แƒแƒ”แƒชแƒ”แƒ›แƒ HTTP แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜ HttpRequestData แƒ™แƒšแƒแƒกแƒ˜แƒก แƒขแƒ˜แƒžแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒ— httpData.

แƒ—แƒฃ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—, HttpSigner-แƒก แƒ•แƒ”แƒšแƒ˜ DigestHeaderValue แƒจแƒ”แƒ˜แƒ•แƒกแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก "digest" แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒจแƒ˜ (header) แƒ“แƒ แƒ•แƒ”แƒšแƒ˜ SignatureHeaderName แƒจแƒ”แƒ˜แƒ•แƒกแƒ”แƒ‘แƒ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ˜แƒ— , แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒฃแƒœแƒ“แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ“แƒ”แƒก HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก "x-jws-signature" แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒจแƒ˜ (header).

    // Create HttpSigner.
    // Need ISigner, certificate with signer's public key and
    // certificate chain in X509Certificate2Collection
    var reqSign = new HttpSigner<HttpRequestData>(loggerFactory.CreateLogger<HttpSigner<HttpRequestData>>())
    {
        Signer = signer,
        SignerCertificate = publicKeyCert,
        SignerCertificateChain = chainCertificates
    };

    // Create signature
    reqSign.CreateSignature(httpData);

แƒกแƒฃแƒš แƒ”แƒก แƒแƒ แƒ˜แƒก :)

แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ

JWS แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒ˜แƒ— แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒ›แƒ“แƒ”แƒœแƒ˜แƒ›แƒ” แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜:

  1. แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ’แƒ แƒแƒ•แƒ”แƒ‘แƒ, แƒ แƒแƒ›แƒ”แƒšแƒกแƒแƒช แƒฎแƒ”แƒšแƒ˜ แƒฃแƒœแƒ“แƒ แƒ›แƒแƒ•แƒแƒฌแƒ”แƒ แƒแƒ—(แƒแƒ›แƒแƒ™แƒ แƒ”แƒคแƒ˜แƒšแƒ˜ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ“แƒแƒœ) แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒ™แƒšแƒแƒกแƒ˜ TBC.OpenBanking.Jws.HttpRequestData
  2. HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒ แƒแƒจแƒ˜แƒช แƒจแƒ”แƒ“แƒ˜แƒก
    1. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ
    2. แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ
    3. แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ—แƒ˜ แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ (แƒฎแƒแƒœแƒ’แƒ แƒซแƒšแƒ˜แƒ•แƒแƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ)

แƒ’แƒแƒœแƒฎแƒ˜แƒšแƒ•แƒ˜แƒกแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ›แƒแƒ•แƒ˜แƒงแƒ”แƒœแƒแƒ— แƒแƒ›แƒแƒœแƒแƒ แƒ˜แƒ“แƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒ“แƒแƒœ.

    private static void VerifyHttpRequestSignatureSample(string inFileName, ILoggerFactory loggerFactory)
    {
        try
        {
            // Get HttpRequestData from HTTP Request
            var httpData = ReadHttpRequestDataFromString(File.ReadAllText(inFileName));

            var verifier = new HttpSignatureVerifier<HttpRequestData>(
                loggerFactory.CreateLogger<HttpSignatureVerifier<HttpRequestData>>())
            {
                // Disable time check for sample sake
                CheckSignatureTimeConstraint = false,
                // Disable revocation check  for sample sake
                CertificateValidationFlags = new CertificateValidationFlags
                {
                    RevocationMode = X509RevocationMode.NoCheck,
                    VerificationFlags = X509VerificationFlags.AllFlags
                }
            };

            verifier.VerifySignature(httpData, DateTime.Now);
        }
        catch (Exception x)
        {
            Console.Error.WriteLine(x.ToString());
        }
    }

แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒœแƒแƒ‘แƒ˜แƒฏแƒ˜: HttpRequestData แƒ™แƒšแƒแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒ แƒจแƒ”แƒ•แƒกแƒ”แƒ‘แƒ. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒแƒญแƒ˜แƒ แƒแƒ HTTP แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒ“แƒแƒœ HttpRequestData แƒ™แƒšแƒแƒกแƒ˜แƒก แƒแƒ‘แƒ˜แƒ”แƒฅแƒขแƒจแƒ˜ แƒ’แƒแƒ“แƒ›แƒแƒ•แƒ˜แƒขแƒแƒœแƒแƒ— แƒงแƒ•แƒ”แƒšแƒ แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜ (header-แƒ˜), HTTP แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒ›แƒ”แƒ—แƒแƒ“แƒ˜ (post, get แƒ“แƒ แƒ.แƒจ.) แƒ“แƒ HTTP แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒกแƒ˜ (body). แƒ แƒแƒ’แƒแƒ แƒช แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ˜แƒ“แƒแƒœ แƒ˜แƒชแƒ˜แƒ—, แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ˜ แƒ“แƒ แƒ“แƒแƒ˜แƒฏแƒ”แƒกแƒขแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ”แƒ‘แƒจแƒ˜แƒ แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜.

    // Get HttpRequestData from HTTP Request
    var httpData = ReadHttpRequestDataFromString(File.ReadAllText(inFileName));

WebApiHttpClientExample

แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒ แƒแƒ’แƒแƒ  แƒฎแƒ“แƒ”แƒ‘แƒ แƒกแƒ แƒฃแƒšแƒคแƒแƒกแƒแƒ•แƒแƒœแƒ˜ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒแƒžแƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ, แƒ—แƒแƒœแƒ›แƒฎแƒšแƒ”แƒ‘แƒ˜ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒชแƒ˜แƒคแƒ แƒฃแƒš แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒกแƒ—แƒแƒœ แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ แƒฎแƒแƒ แƒชแƒ˜แƒ”แƒšแƒ“แƒ”แƒ‘แƒ แƒ“แƒแƒ›แƒฎแƒ›แƒแƒ แƒ” แƒ™แƒšแƒแƒกแƒ˜แƒก JwsMessageHandler แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ—.

แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒฌแƒแƒ แƒ›แƒแƒแƒ“แƒ’แƒ”แƒœแƒก แƒ›แƒแƒ แƒขแƒ˜แƒ• แƒ•แƒ”แƒ‘แƒแƒžแƒ˜แƒก แƒ”แƒ แƒ—แƒแƒ“-แƒ”แƒ แƒ—แƒ˜ GET แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ˜แƒ—. แƒ•แƒ”แƒ‘แƒแƒžแƒ˜แƒก แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜ แƒ›แƒแƒงแƒ•แƒแƒœแƒ˜แƒšแƒ˜แƒ แƒ˜แƒ› แƒ›แƒแƒกแƒแƒ–แƒ แƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ›, แƒ“แƒ˜แƒ“แƒ˜ แƒแƒšแƒ‘แƒแƒ—แƒแƒ‘แƒ˜แƒ—, แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒ˜แƒ›แƒžแƒšแƒ”แƒ›แƒ”แƒœแƒขแƒแƒชแƒ˜แƒแƒจแƒ˜ แƒ—แƒแƒ•แƒแƒ“แƒแƒช แƒแƒžแƒ˜แƒก แƒจแƒ”แƒฅแƒ›แƒœแƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒ•แƒ˜แƒก แƒ’แƒแƒ แƒ” แƒ‘แƒแƒœแƒ™แƒ”แƒ‘แƒ–แƒ” แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ•แƒแƒก แƒจแƒ”แƒคแƒฃแƒ—แƒแƒ•แƒก

แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ แƒกแƒขแƒแƒœแƒ“แƒแƒ แƒขแƒฃแƒšแƒแƒ“ แƒ’แƒแƒœแƒšแƒแƒ’แƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "appsettings.json" แƒคแƒแƒ˜แƒšแƒจแƒ˜. แƒ’แƒ•แƒแƒฅแƒ•แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜แƒก แƒแƒ แƒ˜ แƒฏแƒ’แƒฃแƒคแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜แƒ แƒจแƒ”แƒ”แƒ แƒ—แƒ”แƒ‘แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "OpenBankingConnection" แƒกแƒ”แƒฅแƒชแƒ˜แƒแƒจแƒ˜.

  • BaseUrl โ€“ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒแƒžแƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜
  • ClientCertificate โ€“ แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก (แƒฉแƒ•แƒ”แƒœแƒ˜) mTLS แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ

แƒ›แƒ”แƒแƒ แƒ”แƒ Jws แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒ”แƒ‘แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒœแƒ—แƒแƒ•แƒกแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ "Jws" แƒกแƒ”แƒฅแƒชแƒ˜แƒแƒจแƒ˜.

  • Enabled โ€“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ™แƒแƒ›แƒžแƒแƒœแƒ”แƒœแƒขแƒ˜แƒก แƒฉแƒแƒ แƒ—แƒ•แƒ/แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ
  • AlgorithmName โ€“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒแƒšแƒ’แƒแƒ แƒ˜แƒ—แƒ›แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜
  • SigningCertificate โ€“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ (แƒฃแƒœแƒ“แƒ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒ“แƒ”แƒก แƒžแƒ˜แƒ แƒแƒ“/แƒ“แƒแƒฎแƒฃแƒ แƒฃแƒš แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒกแƒแƒช)
  • CheckSignatureTimeConstraint โ€“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒ แƒแƒ˜แƒก แƒจแƒ”แƒ–แƒฆแƒฃแƒ“แƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒฉแƒแƒ แƒ—แƒ•แƒ/แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ
  • CheckCertificateRevocationList โ€“ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ’แƒแƒฃแƒฅแƒ›แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒฉแƒแƒ แƒ—แƒ•แƒ/แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ
  • ValidateSignature โ€“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ. แƒฉแƒแƒ แƒ—แƒ•แƒ/แƒ’แƒแƒ›แƒแƒ แƒ—แƒ•แƒ

แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒ แƒ แƒแƒ’แƒแƒ แƒช แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒแƒกแƒ”แƒ•แƒ” แƒแƒžแƒ”แƒ แƒแƒชแƒ˜แƒฃแƒšแƒ˜ แƒกแƒ˜แƒกแƒขแƒ”แƒ›แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜.

แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜

แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก แƒ›แƒฃแƒจแƒแƒแƒ‘แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒกแƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒแƒ แƒ˜ แƒขแƒ˜แƒžแƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜. แƒžแƒ˜แƒ แƒ•แƒ”แƒšแƒ˜ แƒแƒ แƒ˜แƒก mTLS-แƒ˜แƒก แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ’แƒแƒ›แƒแƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ แƒแƒ•แƒ—แƒ”แƒœแƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ“แƒ แƒ›แƒ”แƒแƒ แƒ” แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜.

แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒžแƒ แƒแƒ”แƒฅแƒขแƒจแƒ˜ แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒฉแƒ•แƒ”แƒœ แƒ•แƒ˜แƒงแƒ”แƒœแƒ”แƒ‘แƒ— แƒ—แƒ˜แƒ‘แƒ˜แƒกแƒ˜ แƒ‘แƒแƒœแƒ™แƒ˜แƒก แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก, แƒ แƒแƒ›แƒšแƒ˜แƒกแƒ—แƒ•แƒ˜แƒกแƒแƒช แƒ“แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒแƒ‘แƒแƒœแƒ™แƒ แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ˜แƒก แƒ›แƒ˜แƒ”แƒ  แƒ’แƒแƒชแƒ”แƒ›แƒฃแƒšแƒ˜ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒแƒœ แƒกแƒแƒ‘แƒแƒœแƒ™แƒ แƒแƒกแƒแƒชแƒ˜แƒแƒชแƒ˜แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒฆแƒแƒ— (แƒแƒ› แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒฃแƒšแƒ”แƒ‘แƒ˜แƒ— แƒ•แƒ”แƒ  แƒ’แƒ˜แƒจแƒ•แƒ”แƒšแƒ˜แƒ—), แƒแƒœ แƒ›แƒแƒกแƒ˜แƒœแƒฏแƒแƒ— แƒกแƒฎแƒ•แƒ แƒ‘แƒแƒœแƒ™แƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒ. แƒžแƒ แƒแƒขแƒแƒ™แƒแƒšแƒ˜ แƒงแƒ•แƒ”แƒšแƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ”แƒ แƒ—แƒœแƒแƒ˜แƒ แƒ˜แƒ, แƒแƒกแƒ” แƒ แƒแƒ› แƒ›แƒฎแƒแƒšแƒแƒ“ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒ“แƒแƒ’แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒแƒ—.

แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒแƒ—แƒแƒ•แƒกแƒแƒ— แƒคแƒแƒ˜แƒšแƒจแƒ˜ (แƒ˜แƒกแƒ”แƒ— แƒคแƒแƒ แƒ›แƒแƒขแƒจแƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช .NET-แƒก แƒ”แƒกแƒ›แƒ˜แƒก. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“, PFX-แƒ˜) แƒแƒœ Windows-แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒจแƒ˜.

แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒ—:

X.509 Certificate file URL

  • pfx โ€“ แƒแƒ แƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒฉแƒ”แƒก
  • password โ€“ แƒ—แƒฃ แƒคแƒแƒ˜แƒšแƒก แƒแƒ“แƒ”แƒ•แƒก แƒžแƒแƒ แƒแƒšแƒ˜, แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒแƒ› แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒแƒจแƒ˜ แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ—. แƒžแƒแƒ แƒแƒšแƒ˜แƒก แƒ›แƒ”แƒ แƒ” แƒแƒฃแƒชแƒ˜แƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒ’แƒแƒ›แƒงแƒแƒคแƒ˜ @. แƒ—แƒฃ แƒžแƒแƒ แƒแƒšแƒ˜ แƒจแƒ”แƒ˜แƒชแƒแƒ•แƒก URI แƒคแƒแƒ แƒ›แƒแƒขแƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒฃแƒฆแƒ”แƒ‘แƒ”แƒš แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ”.แƒฌ. แƒ”แƒกแƒ™แƒ”แƒ˜แƒžแƒ˜แƒœแƒ’แƒ˜แƒ— แƒ›แƒ˜แƒฃแƒ—แƒ˜แƒ—แƒแƒ—. แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“ แƒ—แƒฃ แƒžแƒแƒ แƒแƒšแƒจแƒ˜ แƒแƒ แƒ˜แƒก p@ssword, @ แƒกแƒ˜แƒ›แƒ‘แƒแƒšแƒแƒก แƒ›แƒแƒ’แƒ˜แƒ•แƒ แƒแƒ“ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ“แƒแƒฌแƒ”แƒ แƒแƒ— %40 โ€“ p%40ssword
  • localhost โ€“ แƒ™แƒแƒœแƒกแƒขแƒแƒœแƒขแƒฃแƒ แƒ˜ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒแƒ แƒ“แƒ แƒแƒ  แƒ˜แƒชแƒ•แƒšแƒ”แƒ‘แƒ
  • path โ€“ แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ แƒ“แƒ˜แƒกแƒ™แƒ–แƒ”

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

pfx://localhost/c:\\Apps\\Certs\\mycrypto.pfx
pfx://secretword@localhost/c:\\Apps\\Certs\\mycrypto.pfx

แƒฃแƒžแƒแƒ แƒแƒšแƒ PFX แƒคแƒแƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒจแƒ”แƒกแƒแƒซแƒšแƒ”แƒ‘แƒ”แƒšแƒ˜แƒ แƒชแƒแƒ แƒ˜แƒ”แƒšแƒ˜ host-แƒ˜แƒก แƒ“แƒแƒขแƒแƒ•แƒ”แƒ‘แƒ:

pfx:///c:\\Apps\\Certs\\mycrypto.pfx

แƒกแƒแƒชแƒแƒ•แƒ˜แƒก แƒจแƒ”แƒ›แƒ—แƒฎแƒ•แƒ”แƒ•แƒแƒจแƒ˜ แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ˜แƒก แƒ›แƒ˜แƒ—แƒ˜แƒ—แƒ”แƒ‘แƒ แƒฎแƒ“แƒ”แƒ‘แƒ แƒแƒกแƒ”แƒ—แƒ˜ แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜แƒ—:

X.509 Certificate store URL

  • cert โ€“ แƒแƒ แƒ˜แƒก แƒกแƒฅแƒ”แƒ›แƒ˜แƒก แƒกแƒแƒฎแƒ”แƒšแƒ˜ แƒ“แƒ แƒฃแƒชแƒ•แƒšแƒ”แƒšแƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ แƒฉแƒ”แƒก
  • StoreLocation โ€“ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก
    • CurrentUser โ€“ แƒ›แƒ˜แƒ›แƒ“แƒ˜แƒœแƒแƒ แƒ” แƒ›แƒแƒ›แƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒšแƒ˜แƒก แƒ™แƒ”แƒ แƒซแƒ แƒกแƒแƒชแƒแƒ•แƒ˜
    • LocalMachine โ€“ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒกแƒแƒชแƒแƒ•แƒ˜
  • StoreName โ€“ แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒ”แƒ แƒ—-แƒ”แƒ แƒ—แƒ˜ แƒแƒ›แƒแƒ—แƒ’แƒแƒœแƒ˜ StoreName Enum
  • CertificateThumbprint โ€“ แƒแƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก SHA-1 แƒแƒœแƒแƒ‘แƒ”แƒญแƒ“แƒ˜

แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒแƒ“:

cert:///CurrentUser/My/CBB4A6C757F4F4798B94ABEB621D7C545E0A656E

แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก Startup-แƒ˜

แƒกแƒแƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ˜แƒก แƒซแƒ˜แƒ แƒ˜แƒ—แƒแƒ“แƒ˜ "แƒคแƒแƒกแƒ”แƒฃแƒšแƒแƒ‘แƒ" แƒแƒ แƒ˜แƒก, แƒ—แƒฃ แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ“แƒแƒ•แƒแƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒ˜แƒ แƒแƒ— Startup.cs-แƒจแƒ˜ HttpClient-แƒ˜ แƒ˜แƒกแƒ” แƒ แƒแƒ› แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ แƒ“แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ แƒกแƒฌแƒแƒ แƒแƒ“ แƒ›แƒแƒฎแƒ“แƒ”แƒก. แƒฉแƒแƒ˜แƒฎแƒ”แƒ“แƒ”แƒ— Startup.cs-แƒจแƒ˜. แƒ›แƒแƒซแƒ”แƒ‘แƒœแƒ”แƒ— แƒกแƒขแƒ แƒ˜แƒฅแƒแƒœแƒ˜ "AddHttpClient".

HttpClient-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒกแƒแƒก แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ

  • แƒ›แƒ˜แƒ›แƒแƒ แƒ—แƒ•แƒ˜แƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒก (client.BaseAddress) แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ
  • แƒ™แƒšแƒ˜แƒ”แƒœแƒขแƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒกแƒแƒช แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ˜แƒ“แƒแƒœ (ClientCertificates.Add)
  • แƒแƒ› แƒ›แƒแƒ’แƒแƒšแƒ˜แƒ—แƒ˜แƒกแƒแƒ—แƒ•แƒ˜แƒก mTLS-แƒจแƒ˜ แƒ’แƒแƒ—แƒ˜แƒจแƒฃแƒšแƒ˜แƒ แƒกแƒ”แƒ แƒ•แƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒ (ServerCertificateCustomValidationCallback), แƒ—แƒฃแƒ›แƒชแƒ แƒ แƒ”แƒแƒšแƒฃแƒ  แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒจแƒ˜ แƒแƒ›แƒ˜แƒก แƒ’แƒแƒ—แƒ˜แƒจแƒ•แƒ แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ›แƒแƒฎแƒ“แƒ”แƒก!
  • HttpClient-แƒจแƒ˜ แƒฎแƒ“แƒ”แƒ‘แƒ MessageHandler-แƒ˜แƒก แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒ (AddHttpMessageHandler). แƒ™แƒ”แƒ แƒซแƒแƒ“, แƒ”แƒ›แƒแƒขแƒ”แƒ‘แƒ JwsMessageHandler, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ—แƒแƒ•แƒ˜แƒก แƒ—แƒแƒ•แƒ–แƒ” แƒ˜แƒฆแƒ”แƒ‘แƒก แƒ’แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒšแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒแƒก แƒ“แƒ แƒ›แƒ˜แƒฆแƒ”แƒ‘แƒฃแƒšแƒ˜แƒก แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒจแƒ”แƒ›แƒแƒฌแƒ›แƒ”แƒ‘แƒแƒก

แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒ‘แƒ˜แƒฏแƒ”แƒ‘แƒ˜

แƒ›แƒแƒ™แƒšแƒ”แƒ“ แƒ“แƒแƒ•แƒฌแƒ”แƒ แƒแƒ— แƒ แƒแƒ’แƒแƒ  แƒฃแƒœแƒ“แƒ แƒ›แƒแƒแƒ›แƒ–แƒแƒ“แƒแƒ— แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ แƒ’แƒแƒกแƒแƒจแƒ•แƒ”แƒ‘แƒแƒ“:

  • แƒฃแƒœแƒ“แƒ แƒแƒ˜แƒฆแƒแƒ—/แƒ˜แƒจแƒแƒ•แƒแƒ— แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒ˜. แƒ”แƒ แƒ—แƒ˜ mTLS-แƒ˜แƒก, แƒ›แƒ”แƒแƒ แƒ” แƒชแƒ˜แƒคแƒ แƒฃแƒšแƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ˜แƒ›แƒ˜แƒก แƒ’แƒแƒ—แƒ•แƒแƒšแƒ˜แƒกแƒฌแƒ˜แƒœแƒ”แƒ‘แƒ˜แƒ—, แƒ แƒแƒ› แƒ–แƒแƒ’แƒ˜ แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒ แƒ›แƒแƒ˜แƒ—แƒฎแƒแƒ•แƒก แƒกแƒžแƒ”แƒชแƒ˜แƒคแƒ˜แƒ™แƒฃแƒ  แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ”แƒ‘แƒก แƒ“แƒ แƒ—แƒ•แƒ˜แƒ—แƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒแƒ  แƒ’แƒแƒ›แƒแƒ“แƒ’แƒ”แƒ‘แƒ
  • แƒ’แƒแƒ˜แƒ’แƒ”แƒ— แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒก แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ (Base url)

แƒ–แƒ”แƒ“แƒ แƒ›แƒแƒœแƒแƒชแƒ”แƒ›แƒ”แƒ‘แƒ˜แƒก แƒ“แƒแƒงแƒ แƒ“แƒœแƒแƒ‘แƒ˜แƒ— แƒ’แƒแƒฌแƒ”แƒ แƒ”แƒ— แƒ™แƒแƒœแƒคแƒ˜แƒ’แƒฃแƒ แƒแƒชแƒ˜แƒ "appsettings.json" แƒคแƒแƒ˜แƒšแƒจแƒ˜ แƒ“แƒ แƒ’แƒแƒฃแƒจแƒ•แƒ˜แƒ— แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒ.

แƒ แƒแƒ’แƒแƒ แƒช แƒ˜แƒชแƒ˜แƒ— แƒ”แƒก แƒแƒ แƒ˜แƒก แƒ›แƒ˜แƒœแƒ˜แƒ›แƒแƒšแƒ˜แƒกแƒขแƒฃแƒ แƒ˜ WebAPI-แƒ˜แƒก แƒแƒžแƒšแƒ˜แƒ™แƒแƒชแƒ˜แƒ. แƒ”แƒ แƒ—แƒแƒ“-แƒ”แƒ แƒ—แƒ˜ แƒฅแƒ›แƒ”แƒ“แƒ”แƒ‘แƒ แƒ แƒแƒกแƒแƒช แƒแƒ™แƒ”แƒ—แƒ”แƒ‘แƒก, แƒแƒ แƒ˜แƒก แƒกแƒแƒขแƒ”แƒกแƒขแƒ แƒ’แƒแƒ แƒ”แƒ›แƒแƒจแƒ˜ แƒ—แƒแƒœแƒฎแƒ›แƒแƒ‘แƒ˜แƒก (consent) แƒจแƒ”แƒฅแƒ›แƒœแƒ. แƒ’แƒแƒจแƒ•แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒ—แƒฃแƒœแƒ“แƒแƒช cURL-แƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒจแƒ”แƒแƒ›แƒแƒฌแƒ›แƒแƒ— (แƒžแƒแƒ แƒขแƒ˜แƒก แƒ›แƒœแƒ˜แƒจแƒ•แƒœแƒ”แƒšแƒแƒ‘แƒ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ’แƒแƒœแƒกแƒฎแƒ•แƒแƒ•แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ˜แƒงแƒแƒก แƒ—แƒฅแƒ•แƒ”แƒœแƒ—แƒแƒœ)

curl http://localhost:24484/CreateConsent

แƒ—แƒฃ แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒ แƒ“แƒแƒกแƒ แƒฃแƒšแƒ“แƒ แƒฌแƒแƒ แƒ›แƒแƒขแƒ”แƒ‘แƒ˜แƒ— API แƒ“แƒแƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ—แƒแƒœแƒฎแƒ›แƒแƒ‘แƒ˜แƒก แƒฉแƒแƒœแƒแƒฌแƒ”แƒ แƒก แƒ“แƒแƒแƒฎแƒšแƒแƒ”แƒ‘แƒ˜แƒ— แƒแƒกแƒ”แƒ—แƒก

{"consentStatus":"received","consentId":"ee0e2d45-24e4-4139-b12c-96b4647959bb","_links":{"scaOAuth":{"href":"https://test-openbanking.tbcbank.ge/openbanking/oauth/.well-known/oauth-authorization-server"},"self":{"href":"/0.8/v1/consents/ee0e2d45-24e4-4139-b12c-96b4647959bb"},"status":{"href":"/0.8/v1/consents/ee0e2d45-24e4-4139-b12c-96b4647959bb/status"},"scaStatus":{"href":"/0.8/v1/consents/ee0e2d45-24e4-4139-b12c-96b4647959bb/authorisations/78aae796-bbda-4542-926c-08d99ecf2c91"}}}

ConsoleHttpClientExample

แƒแƒ› แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜แƒก แƒ“แƒแƒฎแƒ›แƒแƒ แƒ”แƒ‘แƒ˜แƒ— แƒ—แƒฅแƒ•แƒ”แƒœ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒ แƒ แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก API-แƒจแƒ˜. แƒžแƒ แƒแƒ”แƒฅแƒขแƒ˜ แƒฆแƒ˜แƒ แƒ‘แƒแƒœแƒ™แƒ˜แƒœแƒ’แƒ˜แƒก แƒ’แƒแƒ›แƒแƒซแƒแƒฎแƒ”แƒ‘แƒแƒก แƒแƒ’แƒ–แƒแƒ•แƒœแƒ˜แƒก httpbin แƒ•แƒ”แƒ แƒ’แƒ•แƒ”แƒ แƒ“แƒ–แƒ”. แƒ”แƒก แƒ•แƒ”แƒ‘แƒ’แƒ•แƒ”แƒ แƒ“แƒ˜ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ˜แƒก แƒžแƒแƒกแƒฃแƒฎแƒจแƒ˜ แƒแƒ‘แƒ แƒฃแƒœแƒ”แƒ‘แƒก แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ”แƒ‘แƒ˜แƒก แƒจแƒ˜แƒ’แƒ—แƒแƒ•แƒก. แƒจแƒ”แƒ“แƒ”แƒ’แƒแƒ“ แƒจแƒ”แƒ’แƒ˜แƒซแƒšแƒ˜แƒแƒ— แƒœแƒแƒฎแƒแƒ— แƒกแƒแƒ‘แƒแƒšแƒแƒแƒ“ แƒ แƒ แƒ›แƒแƒ—แƒฎแƒแƒ•แƒœแƒ แƒ˜แƒ’แƒ–แƒแƒ•แƒœแƒ”แƒ‘แƒ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒ“แƒแƒ“แƒ”แƒ‘แƒ˜แƒก แƒจแƒ”แƒ›แƒ“แƒ”แƒ’.

Httpbin-แƒ–แƒ” แƒจแƒ”แƒกแƒแƒ”แƒ แƒ—แƒ”แƒ‘แƒšแƒแƒ“ mTLS แƒกแƒแƒญแƒ˜แƒ แƒ แƒแƒ  แƒแƒ แƒ˜แƒก. แƒจแƒ”แƒกแƒแƒ‘แƒแƒ›แƒ˜แƒกแƒแƒ“ แƒ’แƒ•แƒญแƒ˜แƒ แƒ“แƒ”แƒ‘แƒ แƒ›แƒฎแƒแƒšแƒแƒ“ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜. แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜ แƒจแƒ”แƒ˜แƒซแƒšแƒ”แƒ‘แƒ แƒ˜แƒงแƒแƒก แƒœแƒ”แƒ‘แƒ˜แƒกแƒ›แƒ˜แƒ”แƒ แƒ˜ แƒ—แƒฅแƒ•แƒ”แƒœแƒก แƒ›แƒ˜แƒ”แƒ  แƒ“แƒแƒ’แƒ”แƒœแƒ”แƒ แƒ˜แƒ แƒ”แƒ‘แƒฃแƒšแƒ˜ แƒ’แƒแƒกแƒแƒฆแƒ”แƒ‘แƒ˜แƒก แƒฌแƒงแƒ•แƒ˜แƒšแƒ˜แƒก แƒจแƒ”แƒ›แƒชแƒ•แƒ”แƒšแƒ˜ แƒ“แƒ แƒ—แƒฃแƒ’แƒ˜แƒœแƒ“ แƒ—แƒ•แƒ˜แƒ—แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ (self-signed) แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜. แƒกแƒ”แƒ แƒขแƒ˜แƒคแƒ˜แƒ™แƒแƒขแƒ˜แƒก แƒ›แƒ“แƒ”แƒ‘แƒแƒ แƒ”แƒแƒ‘แƒ แƒžแƒ แƒแƒ’แƒ แƒแƒ›แƒแƒก แƒžแƒแƒ แƒแƒ›แƒ”แƒขแƒ แƒแƒ“ แƒฃแƒœแƒ“แƒ แƒ’แƒแƒ“แƒแƒกแƒชแƒ”แƒ—.

แƒ”แƒก แƒแƒ แƒ˜แƒก แƒจแƒ”แƒ“แƒ”แƒ’แƒ˜, แƒ แƒแƒ›แƒ”แƒšแƒ˜แƒช แƒ‘แƒ แƒฃแƒœแƒ“แƒ”แƒ‘แƒ httpbin-แƒ“แƒแƒœ. แƒ›แƒ˜แƒแƒฅแƒชแƒ˜แƒ”แƒ— แƒงแƒฃแƒ แƒแƒ“แƒฆแƒ”แƒ‘แƒ แƒ แƒแƒ› แƒ“แƒแƒ›แƒแƒขแƒ”แƒ‘แƒฃแƒšแƒ˜แƒ แƒแƒ แƒ˜ แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜ (header) "Digest" แƒ“แƒ "X-Jws-Signature". แƒแƒ แƒ˜แƒ•แƒ” แƒ—แƒแƒ•แƒกแƒแƒ แƒ—แƒ˜ แƒฎแƒ”แƒšแƒ›แƒแƒฌแƒ”แƒ แƒ˜แƒก แƒœแƒแƒฌแƒ˜แƒšแƒ˜แƒ. "origin" แƒ•แƒ”แƒšแƒจแƒ˜ แƒฉแƒแƒฌแƒ”แƒ แƒ˜แƒšแƒ˜ IP แƒ›แƒ˜แƒกแƒแƒ›แƒแƒ แƒ—แƒ˜ แƒจแƒ”แƒชแƒ•แƒšแƒ˜แƒšแƒ˜แƒ แƒแƒ แƒแƒ แƒ”แƒแƒšแƒฃแƒ แƒ˜แƒ—.

{
  "args": {},
  "data": "{ \"Hello\": \"World\" }",
  "files": {},
  "form": {},
  "headers": {
    "Content-Length": "20",
    "Content-Type": "text/plain; charset=utf-8",
    "Digest": "SHA-256=t67VXtAvlq2Gdu3AkoH1wsgYtxfUwfth68FIkjMZbkA=",
    "Host": "httpbin.org",
    "X-Amzn-Trace-Id": "Root=1-61851865-5fbef77e6e514a1f4e3b9ecb",
    "X-Jws-Signature": "eyJiNjQiOmZhbHNlLCJ4NWMiOlsiTUlJSGJEQ0NCVlNnQXdJQkFnSVVLWTJhM2xWNmtpeHRoN2pRSXlLcEdJQlRKS0l3RFFZSktvWklodmN ... ... ... gAxUjRkW-7Mr5Bll9RusHqBiaFz1eCMLvZV-mwiJrEtMU5A1kFP8EPCf1wR-w"
  },
  "json": {
    "Hello": "World"
  },
  "origin": "233.252.0.1",
  "url": "https://httpbin.org/post"
}

About

JSON Web Signature (JWS) implementation for Open Banking project

Topics

Resources

License

Stars

Watchers

Forks

Contributors 6

Languages