Akifast Kullanıcısı Doğrulama

Akifast uygulaması, kullanıcılarının üye iş yeri sitelerine giriş yapması ve sitede özgürce dolaşıp alışveriş yapmaları için gerekli otorizasyonu OAuth2 frameworkü kapsamında yapar. Akifast (Akinon) kullanıcısının üye iş yerinin web sitesine girmesi için üye iş yeri OAuth2 frameworkündeki authorization_code akışını implement etmelidir. Bu akışta aşağıdaki adımlar gerçekleşir.

Kullanıcıyı Login Sayfasına Yönlendirme

Üye iş yeri, giriş sayfasına koyacağı Akifast ile Giriş butonuyla akışı başlatır. Bu buton kullanıcıyı Akifast OAuth2 Sunucundaki Giriş sayfasına yönlendirir. Buton tıklayınca aşağıdaki adrese, tabloda yer alan parametreleri URI’ya ekleyerek yönlendirmelidir. Bu yönlendirme yeni bir sekmede olabileceği gibi pop-up sayfada da olabilir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/oauth/authorize

Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir.

Otorizasyon URL’ine Eklenecek Parametreler

Parametre

Açıklama

grant_type

Bu değerin authorization_code olarak atanması gerekmektedir.

response_type

Bu değerin code olarak atanması gerekmektedir.

client_id

Akifast’i kullanan üye iş yerinin client_id değeri

state

Yapılan isteğe gelen cevabın üye iş yeri tarafında karşılanması için kullanılacak boomerang değer. Zorunlu bir parametre değildir.

Örnek İstek

https://oauth.sandbox.akifast.com/oauth/authorize?grant_type=authorization_code&response_type=code&client_id=9d36ec04-de2f-11ea-87d0-0242ac130003&state=HLa754Dj

Yukardaki URL’e yönlenen kullanıcı Akifast OAuth2 Sunucusunun Giriş sayfasına ulaşır. Kullanıcı bu sayfada doğrulama yapar ve üye iş yerine izin verir.

Kullanıcıyı Login Sayfasına Pop-Up ile Yönlendirme

Üye iş yeri, giriş sayfasına koyacağı Akifast ile Giriş(Pop-Up) butonuyla akışı başlatır. Bu buton kullanıcıyı Akifast OAuth2 Sunucundaki Giriş sayfasına yönlendirir. Butona tıklayınca aşağıdaki adrese, tabloda yer alan parametreleri URI’ya ekleyerek yönlendirmelidir.

İsteğin gönderileceği URL ve metodu

Metot

URL

Açıklama

GET

/oauth/authorize

Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir.

Otorizasyon URL’ine Eklenecek Parametreler

Parametre

Açıklama

grant_type

Bu değerin authorization_code olarak atanması gerekmektedir.

response_type

Bu değerin code olarak atanması gerekmektedir.

client_id

Akifast’i kullanan üye iş yerinin client_id değeri

state

Yapılan isteğe gelen cevabın üye iş yeri tarafında karşılanması için kullanılacak boomerang değer. Zorunlu bir parametre değildir.

Önemli

  • Akifast ile Giriş(Pop-Up) butonu için pop-up özelliği eklenmelidir bunun için özelleştirilen buton aşağıdaki gibi olabilir.

<a href="#" class="btn btn-akinon" target="popup" onclick= 'login(); return false;'>
  • login() fonksiyonu ise URI ye eklenen parametreler ile tetiklenir.

function login() {
    window.open('https://oauth.sandbox.akifast.com/oauth/authorize?grant_type=authorization_code&response_type=code&client_id=9d36ec04-de2f-11ea-87d0-0242ac130003&state=HLa754Dj','login-popup','width=600,height=600');
}

Access Token Alma

Doğrulanan ve üye iş yerine izin veren kullanıcı adına access token alınması için kullanıcı üye iş yerinin sağladığı aşağıdaki parametreleri alan bir URL’ye yönlendirilir.

Üye iş yerine iletilecek parametreler.

Parametre

Açıklama

code

Bir sonraki adımda acess token almak için gönderilecek kod değeri

state

Kullanıcının ilk yönlendirilmesi yapılırken gönderilen boomerang değeri.

Üye iş yerinin sağlayacağı URL’e yukardaki parametreler URI Query ile gönderilecektir. URL aşağıdaki örnekteki gibi olacaktır.

https://test-merchant.com/oauth-code-handler?code=yCcm1Z&state=HLa754Dj

Kendisine gelen istekteki code parametresi ile otorizasyon kodunu alan üye iş yeri kullanıcı adına access token almak için aşağıdaki URL’e aşağıdaki parametrelerle istek atmalıdır.

Önemli

Yapılan isteğin Authorization headerında Basic Authenticatin metodu ile merchant id ve şifre gönderilmelidir.

Access Token Almak için İsteğin Atılacağı URL

Metot

URL

Content Type

POST

${oauth_server_url}/oauth/token

application/x-www-form-urlencoded

Gönderilecek Parametreler

Parametre

Örnek Değer

Açıklama

grant_type

authorization_code

OAuth2 Sunucuyua iletilen istekte grant_type değeri authorization_code olarak gönderilmelidir. Bu flowu belli eder.

code

yCcm1Z

Redirect URL’de gelen kod değerinin gönderilmesi gerekmektedir.

Dönüş Değerleri

Dönüş Değeri

Açıklama

Örnek Değer

access_token

Kullanıcı adına istek yapılırken kullanılacak token bilgisi. JWT olarak dönülür

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJleHAiOjE2NDkyOTYzOTEsInVzZXIiOnsiYWtpbm9uX3VzZXJfaWQiOiJGNjFDOEJGMDBCRkQ0NEM3QUZFNDU5RjI0QTM1OEYyQiIsInBob25lX251bWJlciI6Iis5MDUzMDkzMTM5MDcifSwidXNlcl9uYW1lIjoiKzkwNTMwOTMxMzkwNyIsImp0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImNsaWVudF9pZCI6IjlkMzZlYzA0LWRlMmYtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInVwZGF0ZSIsImRlbGV0ZSJdfQ.XfnzxFtaxs8DlA3IP_4n9peBKLNCYGSEJc-A_oO4wZ5v5VUTckBwjnYwrpkcl-ExUDO2FqkoTevLcpIstyXvNd1HejhxDq3t3uC5modp9mGdRZgmYH2zWMtAVVkEd-URQv0tgelWDsNG91iJ2Dw-ozIJnjIcPgtwjNqR_OXznyiJ4VSakRXpDv9eANQPrHkZ7GxND4PeUN5Xby-SNWHftAxB5BMGEdVbtCwctQyRSi1eDGH_P_kllNjFw_LOk4W0fcQ9atNUHFVOUZ1_TRXKERX0R7bhOKhs6mDcdDDrMX45qVDSKMd1lmlXfxU0Q5OQQN_NPAsfGhdDxKEmMjnNrA

token_type

Dönen token’ın tipini belirten değerdir.

bearer

refresh_token

Kullanıcının access_token’ının süresi bittiğinde access_token’ı yenilemek için kullanılan token değeridir. Access Token’dan daha uzun süreli olarak üretilir. Access Token süresi bittiğinde refresh token ile yenilenebilir.

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJ1c2VyX25hbWUiOiIrOTA1MzA5MzEzOTA3Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidXBkYXRlIiwiZGVsZXRlIl0sImF0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImV4cCI6MTY1Mjg5NjM5MSwidXNlciI6eyJha2lub25fdXNlcl9pZCI6IkY2MUM4QkYwMEJGRDQ0QzdBRkU0NTlGMjRBMzU4RjJCIiwicGhvbmVfbnVtYmVyIjoiKzkwNTMwOTMxMzkwNyJ9LCJqdGkiOiJwUmhncTNEa3YzSm5TcE9lMFlaMHVFcFJUcVEiLCJjbGllbnRfaWQiOiI5ZDM2ZWMwNC1kZTJmLTExZWEtODdkMC0wMjQyYWMxMzAwMDMifQ.WaiUh8XHrwbW7hSFbkttE__uQsQJ2MbsAJRvTDHVqZtpJqc0ZL3X4kHn5qz-oKSLZFeEOjxax7cCzZ3RrYVGdRzUHfhU5koWsRhRnxXYIOI6KXLj__X3BXAav64psg45VlWMBipbjFmgk0o_1knTXCaglg4j3kk3xtwfmEVOkzqkj0dvJ2hYF61AvilSPcQV0lM1oUk-a3goiSQaI8oYzNUYWKBHgEJSDgOmWRwKKNHYk8Iy8ZmvJnRg1MybxymJP0UOYka64m2CHrqm_8mEWe46jjYCvICXdxS-N9jJKcYDX_y2CHSPGgESLxXthVOdZc_iuhop6qIuKYd92Nz-Hg

expires_in

3599999

Access Token’ın saniye cinsinden sonra erme zamanı

scope

read write update delete

Access Token’ın geçerli olduğu scope’lar. Sembolik bir bilgidir.

user.akinon_user_id

F61C8BF00BFD44C7AFE459F24A358F2B

Token sahibi kullanıcının Akinon User Id değeridir.

user.phone_number

+900000000000

Token sahibi kullanıcının telefon numarası

user.email

john.doe@example.com

Token sahibi kullanıcının e-mail adresidir.

jti

İstek için üretilen tekil değer

2qMQ4eZD2Ce_s1L77S_JygcrYew

{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJleHAiOjE2NDkyOTYzOTEsInVzZXIiOnsiYWtpbm9uX3VzZXJfaWQiOiJGNjFDOEJGMDBCRkQ0NEM3QUZFNDU5RjI0QTM1OEYyQiIsInBob25lX251bWJlciI6Iis5MDUzMDkzMTM5MDcifSwidXNlcl9uYW1lIjoiKzkwNTMwOTMxMzkwNyIsImp0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImNsaWVudF9pZCI6IjlkMzZlYzA0LWRlMmYtMTFlYS04N2QwLTAyNDJhYzEzMDAwMyIsInNjb3BlIjpbInJlYWQiLCJ3cml0ZSIsInVwZGF0ZSIsImRlbGV0ZSJdfQ.XfnzxFtaxs8DlA3IP_4n9peBKLNCYGSEJc-A_oO4wZ5v5VUTckBwjnYwrpkcl-ExUDO2FqkoTevLcpIstyXvNd1HejhxDq3t3uC5modp9mGdRZgmYH2zWMtAVVkEd-URQv0tgelWDsNG91iJ2Dw-ozIJnjIcPgtwjNqR_OXznyiJ4VSakRXpDv9eANQPrHkZ7GxND4PeUN5Xby-SNWHftAxB5BMGEdVbtCwctQyRSi1eDGH_P_kllNjFw_LOk4W0fcQ9atNUHFVOUZ1_TRXKERX0R7bhOKhs6mDcdDDrMX45qVDSKMd1lmlXfxU0Q5OQQN_NPAsfGhdDxKEmMjnNrA",
  "token_type": "bearer",
  "refresh_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6ImQ3OTdmZDA2LTQ2NmQtNGM1MS05N2RmLWZlYzdmZjAwMjlmOCJ9.eyJ1c2VyX25hbWUiOiIrOTA1MzA5MzEzOTA3Iiwic2NvcGUiOlsicmVhZCIsIndyaXRlIiwidXBkYXRlIiwiZGVsZXRlIl0sImF0aSI6IjJxTVE0ZVpEMkNlX3MxTDc3U19KeWdjcllldyIsImV4cCI6MTY1Mjg5NjM5MSwidXNlciI6eyJha2lub25fdXNlcl9pZCI6IkY2MUM4QkYwMEJGRDQ0QzdBRkU0NTlGMjRBMzU4RjJCIiwicGhvbmVfbnVtYmVyIjoiKzkwNTMwOTMxMzkwNyJ9LCJqdGkiOiJwUmhncTNEa3YzSm5TcE9lMFlaMHVFcFJUcVEiLCJjbGllbnRfaWQiOiI5ZDM2ZWMwNC1kZTJmLTExZWEtODdkMC0wMjQyYWMxMzAwMDMifQ.WaiUh8XHrwbW7hSFbkttE__uQsQJ2MbsAJRvTDHVqZtpJqc0ZL3X4kHn5qz-oKSLZFeEOjxax7cCzZ3RrYVGdRzUHfhU5koWsRhRnxXYIOI6KXLj__X3BXAav64psg45VlWMBipbjFmgk0o_1knTXCaglg4j3kk3xtwfmEVOkzqkj0dvJ2hYF61AvilSPcQV0lM1oUk-a3goiSQaI8oYzNUYWKBHgEJSDgOmWRwKKNHYk8Iy8ZmvJnRg1MybxymJP0UOYka64m2CHrqm_8mEWe46jjYCvICXdxS-N9jJKcYDX_y2CHSPGgESLxXthVOdZc_iuhop6qIuKYd92Nz-Hg",
  "expires_in": 3599999,
  "scope": "read write update delete",
  "user": {
      "akinon_user_id": "F61C8BF00BFD44C7AFE459F24A358F2B",
      "phone_number": "+900000000000",
      "email": "john.doe@example.com"
  },
  "jti": "2qMQ4eZD2Ce_s1L77S_JygcrYew"
}

Bu cevapla birlikte alınan access_token değeri Akinon kullanıcısı adına yapılacak olan tüm istekler için Akinon-User-Access-Token headerıyla Akifast API’ye gönderilecektir. access_token üye iş yeri tarafında kullanıcının oturumu boyunca saklanabilir, access_token süresi dolduğunda refresh_token ile 1 defa yenilenebilir.

Pop-Up İle Access Token Alma

Pop-up ile access token alma işlemi Access Token Alma işlemi ile aynıdır.

Önemli

  • Burada dikkat edilmesi gereken husus login esnasında açılan pop-up ın kapatılması ve ana ekrandan işlemlerin devam etmesi kısmıdır. Redirect https://test-merchant.com/oauth-code-handler end-pointinde yazacağınız view da aşağıda eklenen JavaScript code bloğu ile body onload sırasında pop-up ı rahatça kapatabilir ve herhangi bir sayfadan işlemlerinize devam edebilirsiniz.

if (window.parent.name === "login-popup") {
  window.opener.location.href = "/dashboard";
  window.close();
}