Dasturchilar uchun · 10 daq Для разработчиков · 10 мин

Mars ID ni loyihangizga ulang Подключи Mars ID к своему проекту

Telegram orqali avtorizatsiya. 15 daqiqada. Parolsiz, registratsiyasiz — bitta bosish va foydalanuvchi tizimda. Авторизация через Telegram за 15 минут. Без паролей, без регистрации — один клик и пользователь в системе.

🔑
Avval Mars ID ni o'rnating va MarshHub ga deploy qilishni o'rganing. Сначала настрой Mars ID и научись деплоить на MarshHub.

Foydalanuvchi haqida ma'lumotlar Данные пользователя

Mars ID foydalanuvchi tizimga kirganda JWT-token beradi. Ichida quyidagi ma'lumotlar bor: Когда пользователь логинится через Mars ID, ты получаешь JWT-токен с данными:

Maydon Поле
Tavsif Описание
sub
Foydalanuvchi UUID UUID пользователя
name
Ism (Telegram dan) Имя (из Telegram)
handle
Unikal nom, masalan aziz Уникальный хэндл, напр. aziz
role
student / mentor / admin
tg
Telegram ID
email
handle@marshub.uz

Cookie orqali SSO SSO через cookie

Foydalanuvchi Mars ID ga kirganda, brauzerga __mars_id cookie o'rnatiladi — butun .marshub.uz domenida. Sizning xizmatingiz bu cookie ni avtomatik oladi. Когда пользователь логинится через Mars ID, в браузер ставится cookie __mars_id на весь домен .marshub.uz. Твой сервис получает эту cookie автоматически.

👤
Foydalanuvchi saytingizga kiradi Пользователь заходит на твой сайт
🔍
Server __mars_id cookie ni tekshiradi Сервер проверяет cookie __mars_id
Cookie yo'q? → id.marshub.uz/login ga yo'naltirish Нет cookie? → Редирект на id.marshub.uz/login
🤖
Telegram orqali kirish → cookie o'rnatiladi Вход через Telegram → cookie установлен
Foydalanuvchi saytingizga qaytadi. Tayyor! Пользователь возвращается на твой сайт. Готово!

3 ta ulash usuli 3 способа подключения

JWT Cookie Oson Легко
*.marshub.uz dagi xizmatlar uchun. Cookie avtomatik keladi. Для сервисов на *.marshub.uz. Cookie приходит автоматически.
OAuth2 / OIDC O'rtacha Средне
Tashqi xizmatlar uchun. Standart protokol. Для внешних сервисов. Стандартный протокол.
Caddy Forward Auth Kodsiz Без кода
Statik saytlar uchun. Faqat sozlash — kodlash kerak emas. Для статических сайтов. Только настройка — код не нужен.

Tashqi xizmatlar uchun Для внешних сервисов

Agar loyihangiz *.marshub.uz da emas — Mars ID ni OIDC Provider sifatida ishlatishingiz mumkin. Bu standart protokol, ko'pchilik freymvorklar qo'llab-quvvatlaydi. Если твой проект не на *.marshub.uz — используй Mars ID как OIDC Provider. Это стандартный протокол, который поддерживают большинство фреймворков.

1
Klientni ro'yxatdan o'tkazing Зарегистрируй клиент
Mars administratoriga murojaat qiling. Ular sizga client_id va client_secret berishadi. Обратись к администратору Mars. Он выдаст client_id и client_secret.
2
Freymvorkda sozlang Настрой в фреймворке
OIDC sozlamalarida quyidagilarni ko'rsating: В настройках OIDC укажи:
Parametr Параметр
Qiymat Значение
Issuer
https://id.marshub.uz
Auth URL
/oauth/authorize
Token URL
/oauth/token
UserInfo
/oauth/userinfo
Scopes
openid profile email
Algorithm
HS256

Authorization Code Flow Authorization Code Flow

1️⃣
Foydalanuvchini Mars ID ga yo'naltiring Перенаправь пользователя на Mars ID
2️⃣
Telegram orqali kirish → code qaytadi Вход через Telegram → вернётся code
3️⃣
Code ni token ga almashtirasiz Обмениваешь code на токен
4️⃣
Token bilan userinfo olasiz По токену получаешь userinfo
server.js — OAuth2
import express from 'express'; const app = express(); const MARS = 'https://id.marshub.uz'; const CLIENT_ID = process.env.MARS_CLIENT_ID; const CLIENT_SECRET = process.env.MARS_CLIENT_SECRET; const CALLBACK = 'https://myapp.com/callback'; // 1. Login ga yo'naltirish / Редирект на логин app.get('/login', (req, res) => { res.redirect( `${MARS}/oauth/authorize` + `?client_id=${CLIENT_ID}` + `&redirect_uri=${CALLBACK}` + `&response_type=code` + `&scope=openid profile email` ); }); // 2. Callback: code → token → user app.get('/callback', async (req, res) => { // Code ni token ga almashtiramiz const tokenRes = await fetch( `${MARS}/oauth/token`, { method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify({ grant_type: 'authorization_code', code: req.query.code, redirect_uri: CALLBACK, client_id: CLIENT_ID, client_secret: CLIENT_SECRET, }), }); const { access_token } = await tokenRes.json(); // Foydalanuvchi ma'lumotlarini olamiz const userRes = await fetch( `${MARS}/oauth/userinfo`, { headers: { Authorization: `Bearer ${access_token}` }, }); const user = await userRes.json(); res.send(`Salom, ${user.name}!`); }); app.listen(3000);
📋
OIDC Discovery: ko'pchilik freymvorklar (Next-Auth, Django-Allauth, Passport.js) faqat https://id.marshub.uz issuer URL ni kiritishni talab qiladi — qolganini avtomatik topadi. OIDC Discovery: большинство фреймворков (Next-Auth, Django-Allauth, Passport.js) требуют только указать https://id.marshub.uz как issuer — остальное найдут автоматически.

Kodsiz himoya Защита без кода

Statik saytingiz bormi? Caddy server avtomatik himoyalaydi — bitta so'rov bilan. Есть статический сайт? Caddy защитит автоматически — одним запросом.

1
Saytni MarshHub ga deploy qiling Задеплой сайт на MarshHub
npx marshub deploy
2
Administratorga yozing Напиши администратору
Sayt nomini va kirishi mumkin bo'lgan foydalanuvchilarning Telegram ID larini bering. Сообщи имя сайта и Telegram ID пользователей, которым нужен доступ.
3
Tayyor! Готово!
Endi ruxsatsiz foydalanuvchilar Mars ID login sahifasiga yo'naltiriladi. Теперь неавторизованные пользователи будут перенаправлены на страницу логина Mars ID.
🛡️
Forward Auth — Caddy har bir so'rovni tekshiradi: cookie bormi? Telegram ID ruxsat berilganlar ro'yxatidami? Agar yo'q — foydalanuvchini login sahifasiga yo'naltiradi. Forward Auth — Caddy проверяет каждый запрос: есть cookie? Telegram ID в списке доступа? Если нет — редирект на страницу логина.

MarshHub ga deploy qilish Деплой на MarshHub

Loyihangizni npx marshub deploy bilan bir buyruqda joylashtiring: Опубликуй проект одной командой через npx marshub deploy:

Terminal
# Loyiha papkasida / В папке проекта ~/my-app $ npx marshub deploy Loyiha paketlanmoqda... Пакуем проект... Arxiv hajmi: 0.1 MB Размер архива: 0.1 MB Yuklandi! Загружено! Tayyor! Sizning saytingiz: Готово! Твой сайт: https://my-app.marshub.uz
💡
Birinchi marta? Avval npx marshub login buyrug'ini bajaring — Telegram orqali avtorizatsiya qilasiz. Keyin npx marshub deploy ishlaydi. Первый раз? Сначала выполни npx marshub login — авторизуешься через Telegram. После этого npx marshub deploy заработает.

Tekshirish va xatolarni topish Проверка и поиск ошибок

API
# Tokenni tekshirish / Проверить токен $ curl https://id.marshub.uz/api/verify?token=TOKEN {"sub":"...","name":"Aziz","role":"student"} # O'z ma'lumotlaringiz / Свои данные (нужна cookie) $ curl -b "__mars_id=TOKEN" https://id.marshub.uz/api/me {"id":"...","name":"Aziz","handle":"aziz"} # Health check $ curl https://id.marshub.uz/health {"ok":true,"users":245}

Ko'p beriladigan savollar Частые вопросы

?
AUTH_SECRET ni qayerdan olaman? Где взять AUTH_SECRET?
Mars administratoriga murojaat qiling. Kalit hamma xizmatlar uchun umumiy — cookie ni serverdagi so'rovsiz tekshirish imkonini beradi. Обратись к администратору Mars. Ключ общий для всех сервисов — позволяет проверять cookie без запросов к Mars ID.
?
localhost da ishlayaptimi? Работает ли на localhost?
Cookie .marshub.uz domeniga o'rnatiladi, shuning uchun localhost da yo'q. Token ni brauzerdan nusxalang (DevTools → Cookies) va /api/verify?token=... orqali tekshiring. Cookie ставится на домен .marshub.uz, поэтому на localhost недоступна. Скопируй токен из браузера (DevTools → Cookies) и проверяй через /api/verify?token=....
?
Token muddati qachon tugaydi? Когда истекает токен?
30 kundan keyin. jwt.verify() xato qaytaradi — foydalanuvchini login sahifasiga yo'naltiring, Mars ID yangi token beradi. Через 30 дней. jwt.verify() выбросит ошибку — перенаправь на логин, Mars ID выдаст новый токен.
?
JavaScript cookie ni o'qiy oladimi? Может ли JavaScript читать cookie?
Yo'q. __mars_id — httpOnly cookie. Faqat server tomonda ishlaydi. Bu XSS hujumlardan himoya. Нет. __mars_id — httpOnly cookie. Работает только на сервере. Это защита от XSS-атак.

Deploy oldidan checklist Чеклист перед деплоем

AUTH_SECRET .env faylda (kodda emas!) AUTH_SECRET в .env файле (не в коде!)
Algoritm: faqat HS256 Алгоритм: строго HS256
Login ga redirect: ?next=URL bilan Редирект на логин: с ?next=URL
"Chiqish" tugmasi → id.marshub.uz/logout Кнопка "Выйти" → id.marshub.uz/logout
Rollar serverda tekshiriladi (frontendga ishonmang!) Роли проверяются на сервере (не доверяй фронтенду!)
🚀
Tayyor! Готово!
Endi sizning loyihangizda Mars ID avtorizatsiya ishlaydi.
Foydalanuvchilar Telegram orqali kirishadi.
Теперь в твоём проекте работает авторизация Mars ID.
Пользователи входят через Telegram.
Mars ID ni sinab ko'ring → Попробовать Mars ID →
id.marshub.uz
Amaliyotda o'rganmoqchimisan? Хочешь учиться на практике?
Mars Online'da to'liq Python kursi — 12 dars, 89 000 so'm Полный курс Python на Mars Online — 12 уроков, 89 000 сум
Boshlash → Начать →
← Barcha darslar ← Все уроки