از طریق پروتکل OAuth 2.0 شما می توانید به اطلاعات کاربر بدون نیاز به رمز عبور دسترسی داشته باشید .
برای استفاده از API ابتدا باید از طریق پنل کاربری خود در حسابیت اقدام به ساخت Client کنید و سپس با استفاده از اطلاعات Client خود access_token را دریافت کنید . access_token کلیدی است که باید همراه با هر درخواست به API ارسال شود .
client یک برنامه (application) است که می خواهد به حساب کاربر دسترسی داشته باشد و برای این منظور باید ابتدا دسترسی آن توسط کاربر تائید شود و سپس درخواست احراز هویت (authorization) توسط سرور انجام شود . (کلاینت ها)
برنامه (application) درخواست احراز هویت (authorization) را برای دسترسی به اطلاعات کاربر ارسال می کند .
اگر کاربر دسترسی برنامه (application) را تائید کند کد (code) تائید برای برنامه ارسال می شود .
برنامه درخواست access token را همراه با کد تائید (code) به سرور ارسال می کند .
اگر اطلاعات برنامه و کد صحیح باشد دسترسی برنامه به اطلاعات کاربر میسر می شود و access token به برنامه داده می شود .
برنامه از طریق access token درخواست خود را به وبسرویس (API) ارسال می کند .
در صورت صحت access token ، درخواست بروی وبسرویس انجام شده و پاسخ بر گردانده می شود .
برای درخواست دسترسی به اطلاعات کاربر ، مقادیر را در آدرس زیر قرار دهید و کاربر را به این آدرس بفرستید :
https://www.hesabit.com/oauth2/authorize
client_id | شناسه client که زمان ایجاد آن در پنل کاربری دریافت کرده اید. (کلاینت ها) مانند : 06fea353-98cc-4aac-9acf-3eb82e65ec48 |
response_type | نوع پاسخ که همیشه برابر با مقدار زیر است . مانند : code |
scope | یک رشته از مقادیر که با کاما "," از هم جدا شده اند و بیانگر سطح و نوع دسترسی شما به اطلاعات است. (جدول scope) مانند : read,write |
access_type | نوع دسترسی شما به دو صورت آنلاین و آفلاین امکان پذیر است . مانند : online |
redirect_uri | آدرسی که پس از authorization کاربر به آن فرستاده می شود. (این مقدار باید با آنچه در پنل کاربری هنگام ایجاد client تنظیم کرده اید برابر باشد) مانند : http://sample.com/verify.php |
state | یک رشته غیر تکراری که از جانب شما برای امنیت و CSRF استفاده می شود. مانند : AbdeFGf45F13sdfEef172 |
scope بیانگیر نوع دسترسی شما به اطلاعات است که با نام های مختلف از قبل تنظیم شده و لیست آنها را می توانید در این جدول مشاهده کنید . اگر به چند scope همزمان نیاز دارید کافی است با گذاشتن کاما بین آنها ، این مقادیر را در درخواست قرار دهید. برای تغییر سطح دسترسی و یا scope شما نیاز به دریافت مجدد تائید کاربر دارید و متد authorize را باید با درخواست scope جدید تکرار کنید.
access_type بیانگر نوع دسترسی شما به صورت آنلاین و یا آفلاین است. با توجه به اینکه access token پس از ۱۰ ساعت منقضی می شود در دسترسی آفلاین شما یک کلید دیگر به نام refresh token دریافت میکنید که بوسیله آن می توانید access token جدید دریافت کنید. بدیهی است در مدل آنلاین فقط تا زمان انقضای access token به اطلاعات دسترسی دارید ، متد آنلاین برای لاگین و دسترسی های موقت طراحی شده است.
state یک رشته تصادفی است که توسط درخواست کننده و یا سرور شما تنظیم می شود و برای کنترل پاسخ ها استفاده می شود ، با این روش شما قادر به تشخیص پاسخ هایی که از جانب خودتان ارسال شده خواهید بود، این مدل برای CSRF کاربرد دارد.
https://www.hesabit.com/oauth2/authorize?client_id=06fea353-98cc-4aac-9acf-3eb82e65ec48&response_type=code&scope=write&access_type=offline&state=AbdeFGf45F13sdfEef172&redirect_uri=http://sample.com/verify.php
در آدرس authorize کاربر صفحه ای را مبنی بر درخواست client برای دسترسی به اطلاعات خود مشاهده می کند و امکان تائید و یا رد دسترسی وجود دارد و پس از انتخاب هر یک از دو مورد با پاسخ متناسب به آدرس redirect uri بازگردانده می شود .
در صورت تائید دسترسی ، کاربر همراه با پارامترهای code و state به آدرس redirect uri فرستاده می شود.
code | یک رشته منحصر به فرد است که فقط ۱۵ دقیقه معتبر است. مانند : 90fea353-98cc-4aac-9acf-3eb82e65ec50 |
state | در صورتی در درخواست وجود داشته باشد در پاسخ برگردانده می شود. |
http://www.sample.com/verify.php?code=06fea353-98cc-4aac-9acf-3eb82e65ec48&state=AbdeFGf45F13sdfEef172
در صورت عدم تائید دسترسی ، کاربر همراه با پارامترهای error و state به آدرس redirect uri فرستاده می شود.
نمونه کامل پاسخ :
http://www.sample.com/verify.php?error=access_denied&error_description=The+user+has+denied+your+application+access.&state=AbdeFGf45F13sdfEef172
پس از دریافت code در مرحله قبل (authorization) ، برای دریافت access token یک درخواست از نوع POST با محتوی زیر به این آدرس ارسال کنید :
https://api.hesabit.com/oauth2/token
محتوی درخواست (body) :
code | کدی که در مرحله قبل دریافت کرده اید . مانند : 06fea353-98cc-4aac-9acf-3eb82e65ec48 |
client_id | شناسه client که زمان ایجاد آن در پنل کاربری دریافت کرده اید. (کلاینت ها) مانند : 06fea353-98cc-4aac-9acf-3eb82e65ec48 |
client_secret | رمز client که زمان ایجاد آن در پنل کاربری دریافت کرده اید. (کلاینت ها) مانند : 112ea353-98cc-4aac-9acf-3eb82e65e567 |
grant_type | این مقدار در این مرحله برابر با authorization_code است. مانند : authorization_code |
redirect_uri | آدرس بازگشت که در زمان ایجاد client آن در پنل کاربری تنظیم کرده اید. (کلاینت ها) مانند : http://www.sample.com/verify.php |
code یکبار قابل استفاده است و فقط برای ۱۵ دقیقه اعتبار دارد و در صورتی که در این مدت ارسال نشود باید مرحله authorization مجددا تکرار شود .
redirect_uri باید عینا مانند آنچه در authorization ارسال شده باشد .
{
"access_token": "36fea351-18cc-4aac-9acf-1eb82e65ec33",
"token_type": "Bearer",
"expires_in": 36000,
"refresh_token": "122ea357-18cc-4aac-9acf-9eb82e65ec40",
"scope": "write"
}
پس از انقضای access_token با ارسال درخواست POST با محتوی زیر به این آدرس می توانید access_token جدید بگیرید :
https://api.hesabit.com/oauth2/token
محتوی درخواست (body) :
{
"client_id":"78aea351-18cc-4bac-1acf-1eb82e65ec341",
"grant_type":"refresh_token",
"client_secret":"36fea351-18cc-4aac-cdcf-1eb82e65ec33",
"refresh_token": "122ea357-18cc-4aac-9acf-9eb82e65ec40"
}
فقط در صورتی که access_type به صورت offline باشد در پاسخ مرحله قبل refresh_token ایجاد می شود .
نکته بسیار مهم این است که refresh_token مجددا برای شما ارسال نخواهد شد و برای دریافت مجدد آن باید مراحل از ابتدا تکرار شود ، پس در حفط و نگه داری آن دقت کنید و به هیچ وجه آن را منتشر نکنید .
سطح دسترسی به بخش های مختلف و همچنین نوع عملیات و متدها توسط scope کنترل می شود.
read | دسترسی به متد های خواندن اطلاعات. invoices, items, customers, profiles | GET |
write | دسترسی به متدهای های خواندن و نوشتن اطلاعات. invoices, items, customers, profiles, transactions | GET POST |
admin | دسترسی به متدهای های خواندن ، نوشتن ، ویرایش و حذف اطلاعات. invoices, items, customers, profiles, transactions | GET POST PUT DELETE |
تعیین و تغییر scope فقط در مرحله درخواست authorization امکان پذیر است.