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. .. list-table:: İsteğin gönderileceği URL ve metodu :width: 600px :widths: 20 30 50 :header-rows: 1 * - Metot - URL - Açıklama * - GET - /oauth/authorize - Parametrelerle birlikte bu URL'e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir. .. list-table:: Otorizasyon URL'ine Eklenecek Parametreler :width: 800px :widths: 20 80 :header-rows: 1 * - 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** .. code-block:: text 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. .. list-table:: İsteğin gönderileceği URL ve metodu :width: 600px :widths: 20 30 50 :header-rows: 1 * - Metot - URL - Açıklama * - GET - /oauth/authorize - Parametrelerle birlikte bu URL'e yönlendirilen kullanıcı buradan da Login ekranına yönlendirilir. .. list-table:: Otorizasyon URL'ine Eklenecek Parametreler :width: 800px :widths: 20 80 :header-rows: 1 * - 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. .. important:: * ``Akifast ile Giriş(Pop-Up)`` butonu için pop-up özelliği eklenmelidir bunun için özelleştirilen buton aşağıdaki gibi olabilir. .. code-block:: text * ``login()`` fonksiyonu ise URI ye eklenen parametreler ile tetiklenir. .. code-block:: text 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-reference-label: 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. .. list-table:: Üye iş yerine iletilecek parametreler. :width: 600px :widths: 20 80 :header-rows: 1 * - 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. .. code-block:: text 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. .. important:: Yapılan isteğin ``Authorization`` headerında Basic Authenticatin metodu ile merchant id ve şifre gönderilmelidir. .. list-table:: Access Token Almak için İsteğin Atılacağı URL :width: 600px :widths: 20 30 50 :header-rows: 1 * - Metot - URL - Content Type * - POST - ${oauth_server_url}/oauth/token - application/x-www-form-urlencoded .. list-table:: Gönderilecek Parametreler :width: 600px :widths: 20 30 50 :header-rows: 1 * - 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. .. list-table:: Dönüş Değerleri :width: 600px :widths: 20 30 50 :header-rows: 1 * - 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 .. code-block:: json { "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 :ref:`access-token-reference-label` işlemi ile aynıdır. .. important:: * 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. .. code-block:: text if (window.parent.name === "login-popup") { window.opener.location.href = "/dashboard"; window.close(); }