ارتباط اپ دیسکاوری با سیستم کانکت (ورود از اپ دیسکاوری) (غیرقابل دسترس)

سلام

این قابلیت حذف شده است و در دسترسی نمی باشد. لطفا از روش های دیگری برای ورود به سیستم کانکت استفاده نمایید.


و بعد از هفته ها، بالاخره ارتباطی بین اپ دیسکاوری و سیستم کانکت ایجاد شد. امیدواریم این ارتباط شکننده نباشه و اینا.

تا به امروز امکان ارتباط با سیستم کانکت، فقط از طریق اپ‌های کانکت مهیا بود. که برای این منظور از موبایل کار استفاده می شد.

برای سیستم کانکت متاسفانه نمی شه از موبایل استفاده کرد. یکی اینکه نیاز به تایید هویت داره که داخل اپ بعد از لاگین، دوباره درخواست تایید هویت عجیب بنظر می رسه. و دلیل دیگری اینکه سیستم کانکت نیاز داریه بدونه کاربر در کدام رویداد شرکت کرده که بتونه برخی قابلیت های خودش رو بدون مشکل ارائه بده.
برای حل این موضوع، برای ارتباط اپ دیسکاوری با سیستم کانکت، از بلیت کاربر استفاده می شه  نیازه بلیت کاربر به سیستم کانکت ارسال بشه. دلیل این امر هم اینه که از روی بلیت می شه به رویداد کاربر رسید که نیاز سیشتم کانکت هم به این نحو برآورده می شه.
علاوه بر بلیت، برای امنیت بیشتر، برای اینکه هر کسی نتونه با بلیت افراد دیگری وارد سیستم بشه، نیاز خواهد بود که توکن کاربر صاحب بلیت هم همراه بلیت به سیستم ارسال بشه.
این توکن ای که همراه بلیت ارسال می شه، بلیت ای است که برای کاربر اصلی ایوند ساخته شده و از طریق API اصلی ایوند گرفته شده است.
دلیل این امر هم متاسفانه یکی نبودن کاربران بین سیستم های مختلف ایوند هست که برای حل این موضوع زمان نیاز هست و فعلا در حال حاضر انجام نشده و در صورت یکی بودن کاربر ها نیازی به این توکن هم نمی شد.


برای دریافت توکن مخصوص کاربری مخصوص سیستم کانکت، نیاز است درخواست ای به ریسورس مربوطه با اطلاعات اشاره شده ارسال بشه:
POST https://connect.evand.com/api/oauth2/token
{
"grant_type": "user_ticket",
"client_id": "CLIENT_ID",
"client_secret": "CLIENT_SECRET",
"scope": "",
"ticket": "TICKET_CODE(Attendee short id)",
"user_access_token": "Bearer eyJ..."
}

از دیتاهایی که نیاز است ارسال کنید، grant_type که برای تعیین نحوه اهراز هویت است که برای لاگین با بلیت نیاز است مقدارش user_ticket باشه که مشخص باشه قصد لاگین از طریق بلیت را دارید.

مقادیر client_id , client_secret هم قبلا بحث شده و نیازه اطلاعات مخصوص به کلاینت (اپ موبایل) تعیین و ارسال بشه.

مقدار ticket هم کد بلیت است که همان کد شرکت کننده. که مخصوص هر شرکت کننده کد مجزایی تولید می شه.
مقدار user_access_token هم توکن کاربر ایوندی که از طریق اپ دیسکاوری لاگین کرده خواهد بود. توجه کنید که نیازه مقدار Bearer هم در ابتدای توکن تعیین بشه.

نکته ای که وجود داره و متاسفانه جالب نیست اینه که برای امنیت بیشتر، درخواست ای به API اصلی ایوند برای بررسی صاحب بلیت زده می شه که می تونه زمان پاسخ گویی سرویس کانکت رو پایین بیاره.
برای این منظور راه هایی هست ولی جالب نیست، درصورتی که این مسئله کاهش زمان پاسخ گویی دردسر ساز بشه می شه روش وقت گزاشت و بدون اینکه در کلایت تغییری اتفاق بیفته سرعت رو بهبود داد و بهتر کرد.


مقدار برگشتی درخواست فوق به این شکل خواهد بود:
{
  "token_type": "Bearer",
  "expires_in": 86400,
  "access_token": "eyJ0eXAiOiJKV...",
  "refresh_token": "def50200ae91e..."
}

که نوع توکن، خود توکن برای دسترسی به ریسورس‌ها و توکن ای برای رفرش و ایجاد توکن جدید و معتبر.

خطاهای برگشتی
از جمله خطاهایی که از ریسورس فوق می تونه برگشت داده بشه، می شه به موارد زیر اشاره کرد:

در صورت ارسال مقدار نامعتبر برای grant_type :
{
  "error": "unsupported_grant_type",
  "message": "The authorization grant type is not supported by the authorization server.",
  "hint": "Check that all required parameters have been provided"
}


در صورت ارسال نشدن اطلاعات مربوط به کلاینت (client_id):
{
  "title": "authentication_error",
  "type": "invalid_request",
  "status": 422,
  "detail": "The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed."
}


نامعتبر بودن client_id و یا client_secret که خطای مربوط به زیر داده می شه:
{
  "title": "authentication_error",
  "type": "invalid_client",
  "status": 422,
  "detail": "Client authentication failed"
}


توجه کنید این خطاهای فوق مربوط به اهراز هویت بوده و مربوط به کاربر استفاده کننده از اپ نبوده برای همین فیلدهای ارسالی داخل فیلد errors تعیین نشده و عنوان خطای مربوط به اهراز هویت authentication_error هست.
از دلایل بروز این خطا می شه گفت به اشتباه فرستادن مشخصات کلاینت به سرور هست که کلا کاربر نهایی کاری هم براش نمی تونه بکنه جز اینکه نسخه دیگه و سالم از اپ رو نصب کنه.
دلیل دیگه که می تونه اتفاق بیفته، اینه که مشخصات کلاینت رو از اعتبار ساقط کرده باشیم. مثلا بخاطر مسائل امنیتی که اپ ایجاد می کرد و نمی خواهیم دیگه قابل استفاده باشه. یا مثلا دسترسی به شخص دیگه ای خاطر از ایوند داده بودیم و نمی خواهیم دیگری بتونن از سیستم کانکت استفاده کنن و دسترسی شون رو به این نحو می گیریم.


در صورت نامعتبر بودن بلیت. به عنوان مثال هنوز بلیت خریداری شده به سیستم کانکت ارسال نشده و یا هنوز کارهای مربوطه در سیستم کانکت انجام نشده:
{
  "errors": {
    "unknownTicket": "ticket is invalid"
  },
  "title": "validation_error",
  "type": "validation_error",
  "status": 422,
  "detail": "hello"
}


در صورت معتبر نبودن توکن کاربر ایوندی، و یا در صورتی که بلیت مربوط متعلق به کاربر تعیین شده (از طریق توکنش) نباشه:
{
  "errors": {
    "ticketOwnershipFailed": "you do not own the ticket, so you cannot use it to get in"
  },
  "title": "validation_error",
  "type": "validation_error",
  "status": 422,
  "detail": "hello"
}

نظرات

پست‌های معروف از این وبلاگ

استفاده از Refresh Token جهت دریافت توکن‌های معتبر جدید (کانکت)

لیست کاربران نشان شده - سرویس کانکت

بلیت خریداری شده کاربر در رویداد