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.
Metot |
URL |
Açıklama |
---|---|---|
GET |
/oauth/authorize |
Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir. |
Parametre |
Açıklama |
---|---|
grant_type |
Bu değerin |
response_type |
Bu değerin |
client_id |
Akifast’i kullanan üye iş yerinin |
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.
Metot |
URL |
Açıklama |
---|---|---|
GET |
/oauth/authorize |
Parametrelerle birlikte bu URL’e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir. |
Parametre |
Açıklama |
---|---|
grant_type |
Bu değerin |
response_type |
Bu değerin |
client_id |
Akifast’i kullanan üye iş yerinin |
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.
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.
Metot |
URL |
Content Type |
---|---|---|
POST |
${oauth_server_url}/oauth/token |
application/x-www-form-urlencoded |
Parametre |
Örnek Değer |
Açıklama |
---|---|---|
grant_type |
authorization_code |
OAuth2 Sunucuyua iletilen istekte grant_type değeri |
code |
yCcm1Z |
Redirect URL’de gelen kod değerinin gönderilmesi gerekmektedir. |
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 |
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 ilebody 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();
}