EMV 3D Secure | 3DS Masterclass
EMV 3D Secure Mesaj Yapısı
Read Time 21 mins | Written by: Finartz Team
EMV 3D Secure en temel anlamıyla bir mesajlaşma protokolüdür. Daha önceki blog yazımızda ele aldığımız EMV 3D Secure spesifikasyonu kapsamında çerçevesi çizilen bileşenlerin aralarındaki mesajların içeriği spesifikasyona uygun olacak şekilde bütün 3D yazılımları tarafından paylaşılmaktadır. Böylece küresel ölçekte farklı yazılım firmaları tarafından geliştirilen yazılımlar e-ticaret ödemesi anında birbirleri ile iletişime geçebilirler.
Spesifikasyon tarafından sınırları çizilmemiş olan mesajları ise yazılımı yapan firmalar entegrasyon yöntemleri kapsamında kullanıcılarına aktarırlar.
Örnek bir mesajlaşma diyagramı:
Yeşil ile işaretlenmiş olan mesajlar spesifikasyon kapsamında formatı ve içeriği belirlenmiş olan mesajlarken turuncu alanlar ise bir issuer’ın Finartz ACS’e entegre olurken kullanacağı mesajları göstermektedir.
Bu hafta 3D Secure Masterclass blogumuzda spesifikasyonda sınırları belirlenmiş olan mesajları inceleyeceğiz.
Authentication Request (AReq) Message
3DS Server tarafından DS'e ve oradan da ACS'e iletilen bir 3D Secure işleminin ilk mesajıdır. İşlem içerisinde kullanıcı bilgileri, cihaz bilgileri, işleme ait tutar, işyeri ve işlemde kullanılan kart bilgileri gibi veriler yer alır. Mesajın küçük bir bölümü işleme ait finansal bilgileri içerirken, büyük bir kısmı ACS'in risk analizinde kullanabilmesi için zenginleştirilmiş verilerden oluşur.
Daha önceki blog yazılarımızda değindiğimiz işlem kanalı, Device Channel veya işlem tipi (Payment veya Non-Payment işlem) gibi bilgiler bu mesajda yer alır ve işlemin devam edişini etkiler.
AReq ve RReq mesajları DS aracılığı ile iletildiği için, bu mesajların içeriği DS’e uğradıktan sonra değişebilir; kart networkü tarafından eklemeler yapılabilir. Örneğin, Mastercard RBA risk değerlendirme skoru, yukarıdaki diyagramda 1. adımda yokken 2. adımda eklenerek ACS’e iletilir.
ACS’e iletilen örnek bir AReq Mesajı:
{ "messageVersion": "2.2.0", // İşlemin başlatıldığı versiyon numarasıdır. "messageType": "AReq", // Mesajın AReq mesaj olduğunu gösterir "messageExtension": [ // Message Extension alanları ek bilgi alanlarıdır ve bazen yeni DS özelindeki bilgilerin taşınmasını bazen de yeni versiyonda – örneğin v2.3.1.1 – gelecek bir alanın geçmiş versiyonlarda kullanılabilmesini sağlar. Bu örnekte Mastercard Risk değerlendirme sonucunu barındırmaktadır. { "name": "ACS RBA", "id": "A000000004-acsRBA", "criticalityIndicator": false, "data": { "A000000004-acsRBA": { "status": "Success", "decision": "Low Risk", "score": "300", "reasonCode1": "T", "reasonCode2": "GG" } } } ], "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc123", // 3DS Server tarafından işlem için oluşturulan unique işlem ID’si "acquirerBIN": "123456", // İşlemin yapıldığı işyerine hizmet veren Acquirer’ın kart network’u özelinde tanımlayıcı ID’si "acquirerMerchantID": "123456789", // İşlemin yapıldığı işyerinin kart network’u özelinde tanımlayıcı ID’si "acctNumber": "****************", // Kullanılan kartın numarası. PCI kuralları gereği açık veri olarak tutulmaz "browserAcceptHeader": // İşlemin gerçekleştiği Browser’a ait verilerdendir. "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "browserUserAgent": // İşlemin gerçekleştiği Browser’a ait user agent bilgisidir "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.0.0 Safari/537.36", "threeDSCompInd": "U", // Browser’a ait bilgilerin ACS tarafından direkt alınabilmesini sağlayan 3DS Method çağrısının yapılıp yapılmadığını gösteren bilgidir. U, çağrının yapılamadığını gösterir. "cardExpiryDate": "3003", // İşlemde kullanılan kartın son kullanma tarihi "deviceChannel": "02", // İşlem için seçilen cihaz kanalıdır. 02 değeri işlemin Browser’dan başlatıldığını gösterir. "dsReferenceNumber": "3DS_LOA_DIS_MAST_020200_00563", // Bütün 3D Secure bileşenleri EMVCo tarafından sertifikalandırılır ve bir referans numarası tanımlanır. Bu bilgi kart network’unun kullandığı DS bileşenin referans numarasıdır. "dsTransID": "1230aac7-1234-486b-a23c-123e041b44446", // DS tarafından oluşturulan unique işlem ID’sidir. "dsURL": "https://bel.3ds2.midc.directory.mastercard.com/directory-services/challenge-results", // ACS’in RReq mesajını iletmesi için DS tarafından paylaşılan adresdir "mcc": "5045", // işyerine ait kategori kodu "merchantCountryCode": "792", // işyerine ait ülke kodu "merchantName": "Engin Limited", // işyerine ait kategori kodu |
"threeDSRequestorURL": "http://www.engin.com", // 3DS Requestor (İşyeri) için 3DS Server’da tanımlanmış URL bilgisi "notificationURL": "https://3ds.finartz.com/challengeResult ", // ACS tarafından gönderilecek CRes mesajının iletilmesinin istendiği 3DS Server adresi "messageCategory": "01", // Payment veya Non-Payment işlem olduğu belirten veri "threeDSServerRefNumber": "3DS_LOA_FIN_020200_00567", // EMVCo tarafından 3DS Server’a verilmiş olan referans numarası "threeDSServerURL": " https://3ds.finartz.com:9652/results ", // DS tarafından iletilecek olan RReq mesajının iletilmesinin istendiği 3DS Server adresi "threeDSServerOperatorID": "SVR-V220-FINARTZ", // DS’ler tarafından diğer bileşenleri tanımlanan işletici ID’si. Referans numarası yazılımın EMVCo sertifikasyonunu gösterirken operatorID bilgisi bileşenin kart network sertifikasyonunu gösterir "purchaseAmount": "2500", // işlem tutarı, aşağıdaki exponent verisi ondalık basamağı belirler "purchaseCurrency": "949", // işleme ait para biriminin ISO kodu "purchaseExponent": "2", // purchaseAmount verisi ile birlikte kullanılır ve ondalık basamağından kaç haneden itibaren başladığını gösterir. Örneğin, TL için 2, Japon Yen’i için 0 olur. "purchaseDate": "20240819151547", // İşlem tarihi "browserIP": "15.15.25.167", // Browser IP bilgisi "browserJavaEnabled": false, // Browser ek bilgiler "browserLanguage": "tr-TR", // Browser ek bilgiler "browserColorDepth": "24", // Browser ek bilgiler "browserScreenHeight": "768", // Browser ek bilgiler "browserScreenWidth": "1366", // Browser ek bilgiler "browserTZ": "-180", // Browser ek bilgiler "browserJavascriptEnabled": true // Browser ek bilgiler "threeDSRequestorID": "1234567", // 3DS Requestor (iş yerinin) 3DS Server’daki ID’si "threeDSRequestorName": "1231266", // 3DS Requestor (iş yerinin) 3DS Server’daki adı "threeDSRequestorChallengeInd": "01", // 3DS Requestor (iş yerinin) doğrulamaya dair ek isteklerini paylaştığı alanlardan bir tanesi. "threeDSRequestorAuthenticationInd": "01", // 3DS Requestor (iş yerinin) doğrulamaya dair ek isteklerini paylaştığı alanlardan bir tanesi. } } } |
Authentication Response (ARes) Message
AReq mesajını alan ACS, kendisinde tanımlı olan kart aralıkları üzerinden kartın sahibi olan Issuer’ı bulur ve risk analiz sonucu ile birlikte işlem bilgilerini Issuer’a iletir (diyagramdaki "Verify Account" mesajı). Issuer, kullanıcısına ve karta ait finansal bilgileri göz önünde bulundurarak işlemin nasıl devam etmesi gerektiğini ACS’e bildirir.
Issuer,
- İşlemi reddedebilir,
- İşlemi risksiz bularak ek doğrulama olmadan frictionless olarak onaylayabilir,
- İşlemin doğrulanmasını isteyip Challenge akışının başlatılmasını talep edebilir. Bu durumda, işlemin hangi doğrulama metodu ile gerçekleştirileceğini de ACS’e iletecektir.
Issuer’ın tercihi doğrultusunda ACS, ARes mesajını oluşturur ve DS aracılığıyla 3DS Server’a iletir. Bu adımları gerçekleştirebilmek için (DS özelinde değişebilir) 5 saniyelik bir süre vardır. DS, kendi program kurallarına göre Challenge talep edilmiş bir işlemi frictionless olarak doğrulayabilir veya Issuer/ACS’in talebini yerine getirmek üzere ARes mesajını 3DS Server’a iletir.
ACS’in DS’e gönderdiği örnek bir ARes Mesajı:
{ "acsTransID": "1230ce28-1897-1239-b234-1237479ef234", "dsReferenceNumber": "3DS_LOA_DIS_MAST_020200_00563", "messageVersion": "2.2.0", "messageType": "ARes", "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc123", "dsTransID": "1230aac7-1234-486b-a23c-123e041b44446", "acsReferenceNumber": "3DS_LOA_ACS_FBTA_020200_00671", "transStatus": "C", // İşlemin Challenge akışına devam etmesinin talep edildiği veri "authenticationType": "02", // İşlemin SMS-OTP yöntemi ile doğrulanacağı bilgisi "acsOperatorID": "ACS-V220-AKTIFTECH-TEKNOLO-02014", "acsChallengeMandated": "N", "acsURL": "https://acs.aktiftech.com/acs/creq" } |
Challenge Request (CReq) Message
Challenge Request mesajı, 3DS Client’tan ACS’e iletilen bir mesajdır. App işlemleri için 3DS SDK’dan (bunu işyeri uygulaması olarak da düşünebiliriz), browser işlemleri için 3DS Server’dan (3DS Server’ın browserda açmış olduğu iframe aracılığıyla) ACS’e gönderilen Challenge İsteği mesajıdır.
3DS SDK/3DS Server’ın bu mesajı göndermek için 30 saniyesi vardır. ACS, bu süre zarfında CReq mesajını almazsa timeout vererek işlemi sonlandırır. 3DS SDK/3DS Server, CReq’i ACS’in ARes mesajında gönderdiği ACS URL’ine iletir.
Device Channel = App olan işlemler için, 3DS SDK, CReq mesajını şifreleyerek ACS’e mutual TLS bağlantısı üzerinden iletir. Bir App işleminde, 3DS SDK ile ACS arasındaki iletişim CReq/CRes mesajlaşması üzerinden yapılır ve birden çok CReq mesajı yer alabilir. Örneğin, kullanıcı “Tekrar SMS-OTP gönder” gibi bir özellik kullanırsa, bu istek CReq mesajı içerisinde ACS’e iletilir.
Device Channel = Browser olan işlemler için, 3DS Server, browser’da açılacak iframe aracılığıyla ARes mesajında iletilen ACS URL’ine güvenli iletişim kurulmasını sağlar. Browser işlemleri için sadece tek bir CReq mesajı olabilir ve 3DS Client (browser) ile ACS arasındaki iletişim form post yöntemiyle gerçekleşir.
Device Channel = Browser işlem için örnek CReq mesajı:
{ "threeDSServerTransID" : "874122b5-75d2-59542-1234-000058babc123", "acsTransID" : "1230ce28-1897-1239-b234-1237479ef234", "challengeWindowSize" : "03", // İşyeri tarafından tarayıcıda açılacak iframe’in ölçüsü (03 değeri 500 X 600 ölçüsünü ifade eder) "messageType" : "CReq", "messageVersion" : "2.2.0" } |
Challenge Response (CRes) Message
ACS’in CReq mesajına cevabıdır. Doğrulama sonucunu içerebilir veya App işlemleri için kart hamili etkileşimine devam edilmesini belirtebilir. Örneğin, bir App işleminde kullanıcı hatalı OTP bilgisi girdiyse, ilgili hata mesajı CRes mesajında 3DS SDK’ya iletilir. Browser işleminde ise doğrulama sonucu iletilir. Final CRes olarak geçen bu mesaj, işlem sonucunu barındırır. İşlem akış diyagramında da görülebildiği üzere, Final CRes mesajı RReq/RRes mesajlaşmasından sonra gerçekleşir.
Yani, önce CReq mesajı ile Challenge akışı başlatılır. App işleminde CReq/CRes ile, browser işleminde ise CReqForm/CResForm ile kullanıcı doğrulaması ve etkileşimleri gerçekleştirilir. Doğrulama tamamlandıktan sonra işlem sonucunu DS’e iletmek için RReq mesajı, işlem sonucunu 3DS Client’a iletmek için ise Final CRes mesajı gönderilir ve işlem tamamlanır.
Device Channel = Browser işlem için örnek CRes mesajı:
{ "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc123", "acsTransID": "1230ce28-1897-1239-b234-1237479ef234", "messageType": "CRes", "messageVersion": "2.2.0", "transStatus": "Y" // Doğrulama sonucunu ileten veridir. Y değeri işlemin başarılı bir şekilde doğrulandığını ifade eder. transStatus değeri var ise 3DS Client 3D Secure işleminin tamamlandığını anlar. } |
Results Request (RReq) Message
ACS’in DS’e iletmiş olduğu doğrulama sonucunu içeren mesajdır. Sadece Challenge akışı olan işlemlerde bu mesaj kullanılır. ACS, AReq mesajında kendisine iletilen dsURL adresine, mutual TLS kurabildiği güvenli bir bağlantı ile RReq mesajını iletir. Bu mesajın içeriğinde doğrulama sonucu ve doğrulamanın hangi yöntemle yapıldığı yer alır. Bunlara ek olarak, ACS doğrulamanın kanıtı olarak authentication value ve DS özelinde işlem sonucunu ifade eden ECI değerlerini oluşturarak bu mesaja ekler.
ACS’ten DS’e iletilen örnek RReq mesajı:
{ "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc123", "acsTransID": "1230ce28-1897-1239-b234-1237479ef234", "authenticationMethod": "02", // Doğrulama metodunu belirtir. 02 = SMS-OTP’yi ifade eder. "authenticationType": "02", // Doğrulama metodun tipini belirtir. Statik, Dinamik, OOB gibi değerler alabilir. "authenticationValue": "******************", // Doğrulama kanıtı olarak otorizasyon mesajında kullanılacak kriptogramdır. "dsTransID": "1230aac7-1234-486b-a23c-123e041b44446", "eci": "02", // Electronic Commerce Indicator değeri kart network’leri özelinde işlem sonucunu adresledikler değerlerdir. Örneğin Mastercard için başarılı doğrulama ECI değeri 02, Visa için 05’tir. "interactionCounter": "01", // Kullanıcının doğrulama boyunca yaptığı deneme sayısı "messageCategory": "01", "messageType": "RReq", "messageVersion": "2.2.0", "transStatus": "Y" // Doğrulama sonucunu ileten veridir. Y değeri işlemin başarılı bir şekilde doğrulandığını ifade eder. } |
Results Response (RRes) Message
RReq mesajının 3DS Server tarafından alındığını belirten mesajdır. DS aracılığı ile ACS’e iletilir.
{ "messageVersion": "2.2.0", "messageType": "RRes", "acsTransID": "1230ce28-1897-1239-b234-1237479ef234", "dsTransID": "1230aac7-1234-486b-a23c-123e041b44446", "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc123", "resultsStatus": "01" // İşlem sonucunun başarılı bir şekilde 3DS Server’a ulaştığını veya bir problem ile karşılaşıydıysa da ACS’e bunla ilgili ek bilgi vermek için kullanılır. 01 değeri RReq’in başarılı bir şekilde ulaştığını ve işleme devam edildiğini belirtir. }
|
3DS Method
Bu akış, işlem başlarken 3DS Server tarafından browser'da açılan gizli bir iframe içerisinde çalıştırılacak komut aracılığıyla, ACS’in browser bilgilerini almasını sağlamayı hedefler. Böylece ACS, kullanıcı browser'ına dair bilgileri kendisi alarak, risk analizinde kullanacağı cihaz bilgilerinin güvenliğinden emin olur.
3DS Method sırasında çağırılacak ACS URL’i, ACS'ler tarafından her bir kart aralığı için kart network'üne önceden bildirilmiştir ve 3DS Server'lar tarafından Preparation mesajı içerisinde alınarak kaydedilmiştir.
Örnek 3DS Method Mesajı:
{ "threeDSServerTransID":"874122b5-75d2-59542-1234-000058babc125", "threeDSMethodNotificationURL":"threeDSMethodNotificationURL" } |
Preparation mesajları, 3D Secure işleminin bir parçası değildir. 3DS Server'ların işlem anında kart aralığının ait olduğu kart network'ünü ve Issuer tarafından tanımlanmış bazı özelliklerin DS'lerden alınmasını sağlayan mesajlardır. 3DS Server ve DS arasında gerçekleşir ve kart aralıklarının alınması ve 3DS Server'a kaydedilmesi ile sonuçlanır.
Preparation Request (PReq) Message
3DS Server'ın DS'te kayıtlı kart aralıklarını talep ettiği mesajdır. Özellikle ilk kez kart aralıkları alınacağı zaman, DS bazında değişmekle beraber 4 milyonun üzerinde kayıt gelebilmektedir. Bunlar içerisinde DS'te kayıtlı bütün kart ve token aralıkları bulunur.
{ "threeDSServerTransID": "874122b5-75d2-59542-1234-000058babc124", "messageType": "PReq", "threeDSServerRefNumber": "3DS_LOA_SER_FBTA_020200_00536", "threeDSServerOperatorID": "10020832", "messageVersion": "2.2.0", "serialNum": "12116999" // Daha önce alınmış bir kayıt listesi varsa tekrardan bütün kayıtları değil sadece olan değişiklikleri almak için bu veri kullanılır. } |
Preparation Response (PRes) Message
DS’ten 3DS Server’a gelen Preparation cevabıdır. İçerisinde DS’te kayıtlı kart aralıkları, bu kartların kullanılabileceği version numaraları , varsa 3DS Method URL’leri ve farklı desteklenen özellikler bulunur.