# EK-1: İstek/Cevap Mesajlarında Kullanılacak Nesne Yapıları
Açık Bankacılık simülatör uygulaması üzerinde swagger dökümanlarının güncel sürümlerine erişim sağlanabilir.
# EK-2: Sıralı Veri Türleri
Kod | Açıklama |
---|---|
TR.OHVPS.DataCode.BrcAlc | İşlemin hesabı borçlandırdığı ya da alacaklandırdığı bilgisidir. B : Borç A : Alacak |
TR.OHVPS.DataCode.EvetHayir | E : Evet H : Hayır |
TR.OHVPS.DataCode.GkdTur | GKD yapılmasını gerekli bulduğu durumda HHS, YÖS’ün belirlediği yöntemi dikkate alarak kendi belirlediği GKD yöntemini bildirir: Y: Yönlendirmeli GKD A: Ayrık GKD |
TR.OHVPS.DataCode.HHSDurumu | A : Açık. Üretim Ortamında HHS’nin aktif bir şekilde hizmet vermesi durumu. Y : Yaygınlaştırma. Üretim Ortamında HHS’nin kendisi tarafından tanımlanmış kısıtlı ÖHK’ya hizmet vermesi durumu. G : Geçici Hizmet Veremiyor. HHS servislerinde teknik bir sorun olması nedeniyle HHS’nin hizmet verememesi durumu. K: Kapalı. HHS’nin hizmet vermeme durumu. |
TR.OHVPS.DataCode.HHSYOSSrlmKrtr | ‘kod’ : Kod ‘unv’ : Unvan |
TR.OHVPS.DataCode.HspDrm | Hesabın durumunu belirtir: AKTIF PASIF KAPALI |
TR.OHVPS.DataCode.HspTip | Hesap çeşidini belirtir: VADESIZ VADELI KREDILI_MEVDUAT_HESABI POS CEK YATIRIM |
TR.OHVPS.DataCode.HspTur | Hesabın bireysel veya ticari nitelikte olduğunu belirtir: B: Bireysel T: Ticari |
TR.OHVPS.DataCode.IslemAmaci | Ödemenin Amacına yönelik olarak aşağıdaki değerlerden birini alır: 01: Konut Kirası Ödemesi 02: İş yeri Kirası Ödemesi 03: Diğer Kira Ödemesi 04: E-Ticaret Ödemesi: Elektronik ticaret işlem amaçlı aktarımlar 05: Çalışan Ödemesi: Maaş, harcırah, prim gibi çalışan ödemeleri 06: Ticari ödeme: Ticari işletmelerin birbirlerine, kendi hesaplarına veya müşterilerine ödemeleri, borç, ithalat, ihracat, şirket satın alma, vb. kapsamında ödemeler 07: Bireysel Ödeme: Özel amaçlı (aile bireylerine, hediye, bağış, borç, alışveriş vs.) ödemeler 08: Yatırım: Mevduat, menkul kıymet, döviz, gayrı menkul, taşıt, varlık alımı, temettü ödeme, tahsilat vb. gibi yatırım amaçlı ödemeler 09: Finansal: Kredi, depo, repo, türev, finansal varlık alım/satımı vb. ödemeler 10: Eğitim ödemesi 11: Aidat ödemesi 12: Diğer |
TR.OHVPS.DataCode.IslemTuru | Hesap hareketleri (işlemler) sorgusunda dönülen İşlem Türü (islTur) parametresi aşağıdaki değerlerden birini alabilir: HAVALE EFT FAST PARA_YATIRMA PARA_CEKME YABANCI_PARA_HAVALE YATIRIM_HESABINA_AKTARIM YATIRIM_HESABINDAN_AKTARIM KURUM_FATURA_ODEMESI CEK SENET SIGORTA_ODEMESI UCRET_KOMISYON_FAIZ SGK_ODEMESI VERGI_ODEMESI DOVIZ_ALIM DOVIZ_SATIM KREDI_ODEMESI KREDI_KULLANIM KK_ODEMESI KK_NAKIT_AVANS SANS_OYUNU UYE_ISYERI_ISLEMLERI HGS_OGS_ISLEMLERI DOGRUDAN_BORCLANDIRMA_SISTEMI DIGER |
TR.OHVPS.DataCode.IzinTur | 01: Temel Hesap Bilgisi 02: Ayrıntılı Hesap Bilgisi 03: Bakiye Bilgisi 04: Temel İşlem (Hesap Hareketleri) Bilgisi 05: Ayrıntılı İşlem Bilgisi 06: Anlık Bakiye Bildirimi |
TR.OHVPS.DataCode.KareKodAksTur | Karekod Akış Türü Karekod ödemesinin hangi akışla gerçekleştirildiğini gösterir. 01: FAST katılımcısından dinamik doğrulamalı hizmet alınan işyeri ödemesi 02: FAST katılımcısından statik doğrulamalı işyeri ödemesi 03: Kişiden kişiye ödemeler |
TR.OHVPS.DataCode.KaynakTip | HESAP_BILGISI_RIZASI ODEME_EMRI_RIZASI ODEME_EMRI ILERI_TARIHLI_ODEME_EMRI_RIZASI ILERI_TARIHLI_ODEME_EMRI DUZENLI_ODEME_EMRI_RIZASI BAKIYE COKLU_ISLEM_TALEBI HHS YOS |
TR.OHVPS.DataCode.KimlikTur | Kod, Tip, Format K , TCKN , N11 M , MNO , AN1..30 (HHS’ye özel bireysel veya kurum müşteri numarası) Y , YKN , N11 P , PNO , AN7..9 |
TR.OHVPS.DataCode.KolasHspTur | Hesabın bireysel veya ticari nitelikte olduğunu belirtir: B: Bireysel T: Ticari |
TR.OHVPS.DataCode.KolasTur | Müşterinin sorgulama istediği Kolay Adres Tipi değeridir. Alabileceği değerler BKM “Kolay Adresleme Sistemi Uygulama Kuralları” belgesinde tanımlıdır: T: Telefon Numarası E: E-Posta K: TCKN V: VKN Y: YKN P: Pasaport Numarası |
TR.OHVPS.DataCode.KurumKimlikTur | Kod, Tip, Format K , TCKN , N11 M , MNO , AN1..30 (HHS’ye özel bireysel veya kurum müşteri numarası) V , VKN , AN10 |
TR.OHVPS.DataCode.LogoArkaPlan | B : Logoların arka planının beyaz olması (Erkek Logo) K : Logoların arka planının renkli/koyu olması (Dişi Logo) |
TR.OHVPS.DataCode.LogoFormat | SVG : Logonun svg formatında olmasını ifade eder. Logonun 1:2 oranında olması gerekmektedir. PNG : Logonun png formatında olmasını ifade eder. Logonun 500 X 1000 px olması gerekmektedir. |
TR.OHVPS.DataCode.LogoTur | FULL_LOGO : Yazı ve ikon şekillerin bir arada olduğu logo ICON_LOGO : İkon şekillerin olduğu ( Sadece görsel olan-yazısız ) logo |
TR.OHVPS.DataCode.OdemeAmaci | Ödemenin Amacına yönelik olarak aşağıdaki değerlerden birini alır: 01: Konut Kirası Ödemesi 02: İş yeri Kirası Ödemesi 03: Diğer Kira Ödemesi 04: E-Ticaret Ödemesi: Elektronik ticaret işlem amaçlı aktarımlar 05: Çalışan Ödemesi: Maaş, harcırah, prim gibi çalışan ödemeleri 06: Ticari ödeme: Ticari işletmelerin birbirlerine, kendi hesaplarına veya müşterilerine ödemeleri, borç, ithalat, ihracat, şirket satın alma, vb. kapsamında ödemeler 07: Bireysel Ödeme: Özel amaçlı (aile bireylerine, hediye, bağış, borç, alışveriş vs.) ödemeler 08: Yatırım: Mevduat, menkul kıymet, döviz, gayrı menkul, taşıt, varlık alımı, temettü ödeme, tahsilat vb. gibi yatırım amaçlı ödemeler 09: Finansal: Kredi, depo, repo, türev, finansal varlık alım/satımı vb. ödemeler 10: Eğitim ödemesi 11: Aidat ödemesi |
TR.OHVPS.DataCode.OdemeDurumu | Ödemenin durumunu gösterir. Alabileceği değerler: 01: Gerçekleşti (Ödeme ilgili ödeme sistemine iletildi ve alıcı hesabına ulaştı.) 02: Gönderildi (Ödeme ilgili ödeme sistemine iletildi ancak alıcı hesabına ulaştığına dair teyit alınmadı.)İşlemin son durumunun teyidi için YÖS sorgulama yapmalıdır. 03- Gerçekleşmedi (Ödemenin ilgili ödeme sistemine işletiminde veya işlenmesi sırasında hata, zaman aşımı, sistemin gün sonu işlemlerine başlaması vb. durum oluştu ve ödeme gereçeklemedi veya iade edildi.) 04- Onayda bekliyor (Ödeme emri veya ileri tarihli ödeme emri alındı. Çoklu onay akışının tamamlanması bekleniyor.) 05- Ödeme Bekleniyor ( Ödeme Sistemine gönderilmeden önceki statüdür.) 06- Kısmen Gerçekleşti ( İleri tarihli ödeme talimatlarında kısmi ödeme yapılan işlemler için geçerli statüdür.) 07- İptal Edildi ( Ödeme sistemine gönderilemden önce müşteri ya da herhangi bir sebepten iptal edilen durumlarda kullanılabilir.) |
TR.OHVPS.DataCode.OdemeKaynak | I: İnternet bankacılığından gönderilen ödemelerde kullanılır. A: Otomatik para makineleri (ATM) ile gönderilen ödemelerde kullanılır. T: Telefon bankacılığı ile gönderilen ödemelerde kullanılır. K: Kiosklar aracılığıyla gönderilen ödemelerde kullanılır. S: Şubeden girilen ödemelerde kullanılır. M: Mobil uygulamadan gönderilen ödemelerde kullanılır. D: Yukarıdakiler dışındaki ödeme kaynaklarından gönderilen ödemelerde kullanılır. O: Açık bankacılık aracılığı ile gönderilen ödemelerde kullanılır. |
TR.OHVPS.DataCode.OdemeSistemi | İşlemin yönlendirildiği Ödeme Sistemine göre aşağıdaki değerlerden birini alabilir: H: Havale F: FAST E: EFT (PÖS) değerlerinden birini alabilir. |
TR.OHVPS.DataCode.OhkTur | B: Bireysel K: Kurumsal |
TR.OHVPS.DataCode.OhkTanimTip | TCKN: TCKN (ohkTanimDeger N11 olarak gönderilmelidir.) MNO: HHS’ye özel bireysel veya kurum müşteri numarası (OHKTanimDeger AN1..30 olarak gönderilmelidir. ) YKN: Yabancı Kimlik Numarası (OHKTanimDeger N11 olarak gönderilmelidir.) PNO: Pasaport numarsı (ohkTanimDeger AN7..9 olarak gönderilmelidir.) GSM: Cep telefonu numarası (ohkTanimDeger N10 olarak gönderilmelidir.) IBAN: IBAN numarası (OHKTanimDeger AN26 olarak gönderilmelidir.) |
TR.OHVPS.DataCode.OlayTip | KAYNAK_GUNCELLENDI AYRIK_GKD_BASARILI AYRIK_GKD_BASARISIZ HHS_YOS_GUNCELLENDI |
TR.OHVPS.DataCode.YOSDurumu | A : Açık. Üretim Ortamında YÖS’ün aktif bir şekilde hizmet vermesi durumu. G : Geçici Hizmet Veremiyor. YÖS servislerinde teknik bir sorun olması nedeniyle YÖS'ün hizmet verememesi durumu. K: Kapalı. YÖS'ün hizmet vermeme durumu. |
TR.OHVPS.DataCode.PSUInitiated | ‘E’ : Evet ‘H’ : Hayır ‘O’ : Olay Bildirim |
TR.OHVPS.DataCode.RizaDurumu | B: Yetki Bekleniyor Y: Yetkilendirildi K: Yetki Kullanıldı E: Yetki Ödeme Emrine/Talimata Dönüştü S: Yetki Sonlandırıldı I :Yetki Iptal |
TR.OHVPS.DataCode.RizaIptDtyKod | ‘01’ :Yeni Rıza Talebi ile İptal ‘02’ :Kullanıcı İsteği ile HHS üzerinden İptal ‘03’ :Kullanıcı İsteği ile YÖS üzerinden İptal ‘04’ :Süre Aşımı : Yetki Bekleniyor ‘05’ :Süre Aşımı : Yetkilendirildi ‘06’ :Süre Aşımı : Yetki Ödemeye Dönüşmedi ‘07’ :GKD iptali : Aynı rıza no ile mükerrer çağrımı ‘08’ :GKD iptali : Rızano ile TCKN uyuşmaması ‘09’ :GKD iptali : Uygun ürünü bulunmuyor ‘10’ :GKD iptali : HHS Açık Bankacılık kanalı işleme kapalı ’11’ :GKD iptali : Hesap Yetki Sorunu ‘12’ :GKD iptali : ÖHK HHS kontrollerini aşamadı ‘13’ :GKD iptali : ÖHK isteği ile GKD’den vazgeçildi ‘14’ :GKD iptali : Fraud Şüphesi ‘99’ :GKD iptali : Diğer |
TR.OHVPS.DataCode.RizaTip | H: Hesap Bilgisi Rızası O: Ödeme Emri Rızası I: İleri Tarihli Ödeme Emri Rızası D: Düzenli Ödeme Emri Rızası |
TR.OHVPS.DataCode.SrlmYon | ‘A’: Azalan değerle sıralama ‘Y’: Artan değerle sıralama |
TR.OHVPS.DataCode.VarYok | 0 : Kayıt Yok 1 : Kayıt Var |
TR.OHVPS.DataCode.YetTip | Alabileceği değerlere göre hangi belirtecin döneceğine karar verilir. yet_kod yenileme_belirteci |
TR.OHVPS.DataCode.ZmnAralik | 0 : Kayıt Yok 1 : 0-2 saat 2 : 2 saat 1 dakika-24 saat 3 : 1-3 gün 4 : 4-15 gün 5 : 16 gün ve üstü |
TR.OHVPS.DataCode.HizmetTipi | 01: Ayrık GKD 02 : İleri Tarihli Ödeme 03 : Düzenli Ödeme |
TR.OHVPS.DataCode.OdemePeriyodu | G: Günlük H : Haftalık A : Aylık D : Diğer |
# EK-3: İstemci Sertifikalarının Tanım ve Yönetimi
Tüm katılımcıların GEÇİT'e erişebilmesi için, BKM tarafından yapılan istemci sertifika doğrulamasından geçmesi gerekmektedir. İstemci sertifikası üretilmeden önce katılımcıların CSR üretme akışını tamamlaması gerekmektedir.
OpenSSL ile CSR (Certificate Signing Request) Oluşturma
Aşağıdaki komut ile 2048-bit RSA private key ve CSR oluşturulur.
openssl req -new -newkey rsa:2048 -nodes -keyout PRIVATEKEY.key -out CSR.csr
CSR ile ilgili detay bilgilerin girişinde;
Common Name (CN) olarak 4 karakterli hhsKod ya da yosKod değeri ile,
diğer alanlar için de kurum bilgileriniz ile giriş yapılır.
Tüm bilgilerin girilmesinden sonra oluşan private key dosyası kurumunuzda saklanır. CSR dosyası ise istemci sertifika üretmek üzere kullanılır. Bu aşamada takip edilmesi gereken adımlar şu şekildedir:
Katılımcıların, TRIP ortamı üzerinden, BKM Tarafından yetki verilmiş kullanıcılarının görebileceği "İstemci Sertifika Talebi" menü adımına giriş yapmaları beklenir. Açılan ekranda,"CSR Dosyası Yükleme" alanı içerisine, katılımcının üretmiş olduğu csr dosyası yüklenir. Yaklaşık 1 dakika içerisinde kuruma özel olarak üretilmiş olan client sertifikası indirilmeye hazır hale gelecektir. "İndir" butonu ile client sertifika indirilir. İstemci tarafında web isteğinin ilgili sertifika ile ilişkilendirilerek oluşturulması gerekmektedir.
Uzun dönemli olarak hazırlanacak olan sertifikalar sertifikasyon ve üretim ortamlarında kullanılacaktır. Sertifikaların işlevselliği ve geçerliliği bu aşamalarda sınanacaktır.
GEÇİT'in test ve üretim ortamları ayrımında istemci sertifikaları, HHS Listeleme API erişimleri ve Sertifikasyon bağlantıları Şekil 15-HHS/YÖS API Mimarisi Diagramında resmedilmiştir.
# EK-4: Sunucu Sertifikaları
Sunucu sertifikalarının endpoint bilgisini (Fqdn) içerecek ve global bir Certification Authority tarafından imzalanmış olarak sunulması gerekmektedir. Örneğin; entegrasyon formu içerinde yer alan URL bilgisinin (test.xbank.com.tr) sertifika içerisinde tanımlı olması ve bu sertifikanın global bir CA örneğin Verisign tarafından imzalanmış olarak sunulması gerekmektedir.
Hizmet sağlayıcı olan HHS'ler tarafından sunucu sertifikaları uygulanmalıdır.
# EK-5: Mesaj İmzalama Akışı
Dijital imzalama yapısı, ÖHVPS API’de gerçekleştirilen işlemlerin ve taşınan verilerin bütünlük ve inkâr edilemezliğini sağlamak amacıyla kurgulanmıştır. İmzaların kaynak bazında hangi istek ve yanıtlara uygulandığı belirlidir.
API yalnızca TLS'ye dayanırsa, dijital kayıtları ve inkâr edilemezlik kanıtlarını tutmak zor olur. Bu nedenle, TLS'ye dayanmayan bir inkâr edilemezlik çözümü olarak API isteğinin HTTP başlığında bir JWS kullanılarak sağlanabilir.
HTTP isteğinin gövdesinin hash fonksiyonu (SHA256) ile özeti alınacaktır. Elde edilen özet, asimetrik anahtarları destekleyen bir algoritma kullanılarak imzalanacak ve JWS elde edilecektir. İsteğin kendinize geldiği durumda body üzerinde hiç bir değişikliğe tabi tutmadan (serialize/deserialize, minify, trim, vb yapmadan) doğrulama yapmanız gerekmektedir. Aynı şekilde isteğin kendinizden çıktığı aşamada da response body üzerinde hiç bir değişikliğe tabi tutmadan (serialize/deserialize, minify, trim, vb yapmadan) mesaj imzalama yapılmalıdır.
Bu kapsamda imzalama akışı aşağıdaki gibi olmalıdır:
- HHS ve YÖS öncelikle özel ve açık anahtarlarını oluşturmalıdır. Bu anahtarları oluşturmak için aşağıda “openssl” kullanılarak oluşturma örneği paylaşılmıştır. Bu anahtarlardan özel olan anahtar mesajı imzalamak için kullanılacak olup, açık anahtar ise mesajı doğrulamak amacıyla mesajın alıcısı tarafından kullanılacaktır.
Özel anahtarın oluşturulması. private.pem => Özel anahtar
openssl genrsa -out private.pem 2048
Özel anahtardan açık anahtarın oluşturulması. public_key.pem => Açık anahtar (BKM ile paylaşılacak açık anahtar)
openssl rsa -in private.pem -pubout -outform PEM -out public_key.pem
Opsiyonel olarak özel anahtarın PCKS8 formatına çevrilmesi (Java açısından PCKS8 formatında olma ihtiyacı nedeniyle). private_key.pem => Özel anahtarın formatlanmış hali.
openssl pkcs8 -topk8 -inform PEM -in private.pem -out private_key.pem –nocrypt
Açık ve Özel anahtarlar oluşturulduktan sonra Açık Anahtar BKM ile paylaşılır. BKM bu açık anahtarı diğer katılımcıların ulaşabilmesi ve alabilmesi için bir Anahtar Deposu yaklaşımı ile bünyesinde tutar. İlgili anahtarı iletebilmek ve alabilmek için kullanılacak HHS/YOS API ye erişim detayları EK-6 bölümünde detaylı olarak paylaşılmıştır. Eğer kurumun ilgili anahtar çiftinin yenilenme durumu söz konusu ise yenilemenin hemen ardından açık anahtar yeni bir imzalama yapılmadan önce mutlaka BKM ile paylaşılmalıdır.
İmzalı mesajı açacak olan kurum mesajı imzalayan kurumun açık anahtarını her sorguda yeniden almak durumunda değildir. Belirli periyodlarda kendi ortamındaki anahtarı yenileyerek sistemi işletebilir. Ancak imzalayan kurum anahtar çifti yenilemesi yaptığında BKM ile açık anahtarını paylaşsa dahi imzalı mesajı doğrulayacak taraf eski açık anahtar ile doğrulama yapmaya çalıştığı için hata alacaktır. Bu ilk hata durumunda hızlıca BKM üzerinden yeni anahtarı alıp mesajı tekrar doğrulamayı denemelidir. Eğer yine hata alıyor ise doğrulama işlemini hata statüsüne almalıdır. Bu sebeple anahtar yenileyen kurum yeni açık anahtarını yeni bir mesaj imzalama yapmadan önce mutlaka BKM ile paylaşmalıdır.
PSU-Fraud-Check alanı için de JWT formatında çıktı hazırlanması beklenmektedir. Örnek bir PSU-Fraud-Check payload değeri aşağıdaki gibidir;
{"AnomalyFlag": "0",
"LastPasswordChangeFlag": "1",
"FirstLoginFlag": "1",
"DeviceFirstLoginFlag": "1",
"BlacklistFlag": "0",
"MalwareFlag": "0",
"UnsafeAccountFlag": "0",
"exp": 1663424479,
"iat": 1663338079,
"iss": "[https://apigw.bkm.com.tr|https://apigw.bkm.com.tr/]" }
# İmzalama Kuralları (YÖS)
Bir YÖS üzerinden başlayan akış örnek olarak paylaşılmıştır.
YÖS, mesaj imzalama gerektiren her API isteğinin HTTP gövdesini (request body) kendi özel anahtarı ile şifreleyerek imza bilgisini oluşturur.
Ardından bu imza verisini, göndereceği mesajın istek başlığında yer alan X-JWS-Signature alanında göndermelidir.
X-JWS-Signature alanında gönderilecek olan bilgi aşağıdaki yöntem ile oluşturulmalıdır.
Bu alana yazılacak olan bilgi JWT formatında oluşturulmalıdır.
Bir JWT, header-payload-signature alanlarından oluşmaktadır.
- Header alanında JWT’yi imzalamak için kullanılacak algoritma belirtilmelidir. Standartlar kapsamında RS256 kullanılacaktır.
- Payload kısmında özel olarak oluşturulacak olan “body” claim alanına istek gövdesi (request body) verisinin SHA256 hash değeri karşılığı yazılmalıdır.
- JSON payload oluşturulurken RFC 7519 baz alınmalıdır. "iss" (Issuer) Claim, "exp" (Expiration Time) Claim, "iat" (Issued At) Claim, “body” Claim alanlarının gönderilmesi zorunludur.^RFC7519 (opens new window)
a. "iss" (Issuer) Claim : Kurumunuza özel bilgidir.
b. "exp" (Expiration Time) Claim: Saniye cinsinden (Unix time) imzanın son geçerli olduğu tarih. Bu tarih mevcut sunucu saatinizden 60 dakika sonra olacak şekilde kullanılmalıdır.
c. "iat" (Issued At) Claim : Saniye cinsinden (Unix time) imzanın oluşturulduğu tarih. Bu tarih mevcut sunucu saatinizden 5 dakika önce olacak şekilde kullanılmalıdır.
d. “body” Claim : istek gövdesi (request body) verisinin SHA256 hash değeri karşılığı. - Signature alanında da özel anahtar ile imzalanmış olan imza içeriği yer alacaktır.
X-JWS-Signature: JWS imzasını içeren üstbilgi. Bu başlığın ne zaman belirtilmesi gerektiği hususu ilgili endpoint için belirtilmiştir.
Örnek X-JWS-Signature Payload Değeri
{
"iss": "https://apigw.bkm.com.tr",
"exp": 1646832405,
"iat": 1646746005,
"body": "c543072f97a761a1d891dc81acc380bc1e6f61ca6541bd93ebfdece338457922"
}
YÖS, isteği gönderir. Sadece mesajın bütünlüğünü ve doğruluğunu teyit amacı ile istek gövdesi (request body) SHA256 hash değeri imzalanarak X-JWS-Signature alanında bu imza iletilir. İsteğin gövde (request body) kısmı açık ve şifresiz olarak gönderilmektedir.
HHS, isteği alır, talebi gerçekleştirmeden önce aldığı API isteklerinin imzasını doğrulamalıdır. X-JWS-Signature alanındaki JWT aşağıdaki adımlarla doğrulanmalıdır.
- Header kısmındaki algoritmanin RS256 olduğu kontrol edilir.
- Gönderen kurumun açık anahtarı ile JWT verify (doğrulama) işlemi yapılır.
- Yukarıdaki işlemlerin doğruluğunun ardından JWT’nin payload kısmındaki “body” claim alanındaki bilginin, isteğin gövde verisinin SHA256 hash değerlerinin aynı olduğu kontrol edilir.
- Örnek checksum değeri
"a64b19f95eeb1fb0a0a3e2dbbc6e3d8472c52184d4543417ddc6d156fc5c5571" veya
"A64B19F95EEB1FB0A0A3E2DBBC6E3D8472C52184D4543417DDC6D156FC5C5571" şeklinde olabilir. İki hali de aynı değere sahiptir. Kontrollerde buna dikkat edilmesi gerekmektedir.
Yukarıdaki işlemler ile doğruluğu teyit edilmiş olan isteğin talebi gerçekleştirir.
Eğer istek doğrulanamıyor ise gönderen kurumun açık ve özel anahtar çifti yenilenmiş olabilir.
BKM HHS API üzerinden ilgili kurumun bilgilerini (kurum kodu vs) kullanarak kurumun detay bilgileri çeker ve kendi ortamında yeniler.
Ardından imzayı tekrar açık anahtar ile doğrulayarak kontroller gerçekleştirilir. (Eğer halen doğrulama işlemi başarısız ise bu istek için hata akışı çalıştırılır. TR.OHVPS.Resource.InvalidSignature kodu ile hata üretilebilir.)
İmza bilgisinin beklendiği (x-jws-signature) servislerde, bu bilginin iletilmediği durumlarda TR.OHVPS.Resource.MissingSignature hatası üretilebilir.
HHS isteği işledikten sonra cevabı oluştururken de yukarıdaki akışlar ile göndereceği cevabı imzalamalıdır.
İstek yanıt gövdesinin SHA256 checksum değeri için hexadecimal çıktı kullanılacaktır. Oluşacak çıktının 64 karakter olması beklenmektedir. Kontrol için "^[A-Fa-f0-9]{64}$" RegEx tarifini kullanabilirsiniz.
Örnek bir gövde:
{"katilimciBlg":{"hhsKod":"8000","yosKod":"8000"},"gkd":{"yetYntm":"Y","yonAdr":"https://boss-test.bkm.com.tr/boss/ab/yosSimulator/8000?drmKod=6021de9f-55e7-454a-94be-2044866b22e1"},"kmlk":{"kmlkTur":"M","kmlkVrs":"123456","ohkTur":"B"},"hspBlg":{"iznBlg":{"iznTur":["01","02","03","04","05"],"erisimIzniSonTrh":"2022-10-12T23:59:59+03:00","hesapIslemBslZmn":"2021-10-10T00:00:00+03:00","hesapIslemBtsZmn":"2023-10-10T23:59:59+03:00"}}}
Bu gövdenin checksum'ı:
a64b19f95eeb1fb0a0a3e2dbbc6e3d8472c52184d4543417ddc6d156fc5c5571
Bu checksum'ın iletildiği x-jws-signature başlık değeri:
eyJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL2FwaWd3LmJrbS5jb20udHIiLCJleHAiOjE2NjU0NzU1NjIsImlhdCI6MTY2NTM4OTE2MiwiYm9keSI6ImE2NGIxOWY5NWVlYjFmYjBhMGEzZTJkYmJjNmUzZDg0NzJjNTIxODRkNDU0MzQxN2RkYzZkMTU2ZmM1YzU1NzEifQ.Q65PI_1fTEzzBMirvmJvXgVX3orhhZ4_UqujtGdHkU7me-1ymIjvPrzy3kfyER1pedFb7HDCBuPvYoqjX8eUnpiiZsxfzCiEa0McIhoFeUOggq-O8VihItp8bLr2DWwQ9JHN1-WXB2mL31KAKFAL1VY9-DXuAdT-RfE_SLYsl2ycmNy4ti4XvfDvvlE56ZsieFZ727VuwR8wi7F0kKDc6UhjaMF9xcUeAM1fxX-bmcOaOo1NZGC0vvgjNZKz_OJrN-q8VhWYnQPiJ7wY7S9IG8bHIkBImKSVf8LuOEvl8u0BZzADLH1iOBd9x2l1plyI_NLPTrnOqhWhKlljkkJBCg
Eğer PSU-Fraud-Check için başlık gönderilecekse, yine JWT formatında imza üretilmelidir. Örnek bir psu-fraud-check başlık değeri:
eyJhbGciOiJSUzI1NiJ9.eyJBbm9tYWx5RmxhZyI6IjAiLCJMYXN0UGFzc3dvcmRDaGFuZ2VGbGFnIjoiMSIsIkZpcnN0TG9naW5GbGFnIjoiMSIsIkRldmljZUZpcnN0TG9naW5GbGFnIjoiMSIsIkJsYWNrbGlzdEZsYWciOiIwIiwiTWFsd2FyZUZsYWciOiIwIiwiVW5zYWZlQWNjb3VudEZsYWciOiIwIiwiZXhwIjoxNjY1NDc1NTU2LCJpYXQiOjE2NjUzODkxNTYsImlzcyI6Imh0dHBzOi8vYXBpZ3cuYmttLmNvbS50ciJ9.DhUh_nsXDuNIrvsQ3KOhOXdVcJg6fTDVW8K1oea8kLtmb7n-_hJHY3mWX5zzobu-Vh2VvFzIxPhHtol6gLHFktmIMiQ9TDHb_mRZFXgJB4ToNfqc3Fy9mi5bS8By2IYi1HxDaCStstaZDaunzXfHCtqybfZXyk6teDrf-iIf6lqX9Keo7GZO-Y7mP7C13-c_QwyNKrZK4TZwUQbecRqXYn1DcEHM7kukQHTar_hKBWkXPmNpScY0J2rKksr4ejR1uLhdQm-Pdwoe9y6qrNEB79vMLBkRNtbuV0vc1GYHp_YKkzBKBI_58uuB2GD9877CsrcRnHMQb88xpxiPKh6-ew
# EK-6: HHS/YÖS API Mimarisi
HHS/YÖS API Uygulama Mimarisinde Test ve Üretim ortamlarında aşağıdaki alanda yer almaktadır.
Şekil 15: HHS/YÖS API Mimarisi