«QAIRU арқылы кіру» тәсілі сыртқы платформаға ақпараттық жүйе мәліметтерін студент атынан алуға мүмкіндік береді. Студент QAIRU кіру бетінде кіріп, келісім экранында қолжетімділік беруді растайды, осыдан кейін қосымша OAuth 2.0 (міндетті PKCE бар Authorization Code ағыны) және OpenID Connect хаттамалары бойынша токендер алады.
Кіруге тек студенттердің есептік жазбаларына рұқсат етіледі. Өзге есептік жазбамен кіру кіру бетінде қабылданбайды, ал қосымша жауап алмайды.
Бөлімнің мысалдарында алдыңғы қадамдарда алынған айнымалылар пайдаланылады: code_verifier, state, nonce, access_token, refresh_token.
5.1. Өзара әрекеттесу тәртібі
- Қосымша PKCE параметрлерін,
stateжәнеnonceмәндерін қалыптастырып, оларды пайдаланушының серверлік сеансында сақтайды. - Қосымша пайдаланушының браузерін авторизация мекенжайына бағыттайды.
- Студент QAIRU есептік жазбасына кіріп, келісім экранында қолжетімділікті растайды.
- Авторизация сервері браузерді авторизация кодымен бірге қайту мекенжайына қайтарады.
- Қосымша сервері авторизация кодын токендерге алмастырады.
- Қосымша
/os/v1/…операцияларын қолжетімділік токенімен шақырады және оныrefresh_tokenарқылы жаңартады.
5.2. Авторизация серверінің мекенжайлары
Авторизация серверінің мекенжайлары OpenID Connect Discovery құжатында жарияланады. Мекенжайларды кодта қолмен көрсетпей, осы құжаттан алу қажет.
https://auth.bbx.kz/realms/qairu/.well-known/openid-configuration{
"issuer": "https://auth.bbx.kz/realms/qairu",
"authorization_endpoint": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/auth",
"token_endpoint": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/token",
"userinfo_endpoint": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/userinfo",
"end_session_endpoint": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/logout",
"revocation_endpoint": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/revoke",
"jwks_uri": "https://auth.bbx.kz/realms/qairu/protocol/openid-connect/certs",
"code_challenge_methods_supported": ["plain", "S256"]
}Жауапта құжаттың үзіндісі келтірілген. Токендер қолтаңбасын тексеруге арналған ашық кілттер jwks_uri мекенжайында жарияланады.
5.3. PKCE, state және nonce параметрлері
Әрбір кіру үшін жаңа мәндер қалыптастырылады:
code_verifier—A–Z,a–z,0–9,-,.,_,~таңбалар жиынынан тұратын ұзындығы 43-тен 128 таңбаға дейінгі кездейсоқ жол;code_challenge— соңындағы=таңбаларынсызBASE64URL(SHA-256(code_verifier))мәні;state— сайтаралық сұрауларды қолдан жасаудан қорғауға арналған кездейсоқ мән; қайту кезінде салыстырылады;nonce—id_tokenішінде қайтарылатын және оны тексеру кезінде салыстырылатын кездейсоқ мән.
# code_verifier: 86 characters of the base64url alphabet
CODE_VERIFIER=$(openssl rand -base64 64 | tr -d '\n=' | tr '+/' '-_' | cut -c1-86)
# code_challenge = BASE64URL(SHA-256(code_verifier))
CODE_CHALLENGE=$(printf '%s' "$CODE_VERIFIER" \
| openssl dgst -sha256 -binary | openssl base64 | tr -d '\n=' | tr '+/' '-_')
STATE=$(openssl rand -hex 16)
NONCE=$(openssl rand -hex 16)code_verifier, state және nonce мәндері кодты алмастыру аяқталғанға дейін пайдаланушының серверлік сеансында сақталады. Тек S256 әдісі қолданылады; plain әдісіне жол берілмейді.
5.4. Авторизация мекенжайы
Пайдаланушының браузері мынадай параметрлермен authorization_endpoint мекенжайына бағытталады:
| ПАРАМЕТР | МІНДЕТТІ | МӘНІ |
|---|---|---|
response_type | Иә | code |
client_id | Иә | Тіркеу кезінде берілген клиент идентификаторы, мысалы, ext-campus-planner |
redirect_uri | Иә | Тіркелген мекенжайға сәйкес келетін қайту мекенжайы |
scope | Иә | openid және бос орын арқылы модульдердің қолжетімділік аялары, мысалы, openid qairu.scheduling.read |
state | Иә | Сеанста сақталған кездейсоқ мән |
nonce | Иә | Сеанста сақталған кездейсоқ мән |
code_challenge | Иә | BASE64URL(SHA-256(code_verifier)) |
code_challenge_method | Иә | S256 |
ui_locales | Жоқ | Кіру беті мен келісім экранының тілі: ru, kk немесе en |
https://auth.bbx.kz/realms/qairu/protocol/openid-connect/auth
?response_type=code
&client_id=ext-campus-planner
&redirect_uri=https%3A%2F%2Fplanner.example.com%2Foauth%2Fcallback
&scope=openid%20qairu.academic.read%20qairu.scheduling.read
&state=af0ifjsldkj
&nonce=n-0S6_WzA2Mj
&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
&code_challenge_method=S256
&ui_locales=ru5.5. Келісім экраны
Кіргеннен кейін студентке қосымшаның атауы және сұратылған модульдер тізбесі көрсетілген келісім экраны ашылады. Студент қолжетімділікке рұқсат береді немесе одан бас тартады.
- келісім сақталады: сол қолжетімділік аяларымен қайта кірген кезде келісім экраны көрсетілмейді;
- жаңа қолжетімділік аялары сұратылған кезде келісім экраны қайта көрсетіледі;
- тіркеу кезінде қосымшаға рұқсат етілмеген модульдердің қолжетімділік аялары берілмейді.
Қолжетімділікке рұқсат берілгенде браузер авторизация кодымен бірге қайту мекенжайына қайтарылады:
https://planner.example.com/oauth/callback?state=af0ifjsldkj&session_state=3f0c9a52-6d1e-4b8a-9f3e-2c7b5d8e1a40&iss=https%3A%2F%2Fauth.bbx.kz%2Frealms%2Fqairu&code=7b2e1f0a-5c3d-4e8f-a1b2-c3d4e5f6a7b8.3f0c9a52-6d1e-4b8a-9f3e-2c7b5d8e1a40.ext-campus-plannerСтудент бас тартқан жағдайда қайту мекенжайында access_denied қате коды болады:
https://planner.example.com/oauth/callback?error=access_denied&error_description=User+denied+consent&state=af0ifjsldkjstate мәні сеанста сақталған мәнмен салыстырылады; сәйкес келмеген жағдайда сұрау қабылданбайды. Авторизация коды бір минуттан аспайтын уақыт бойы жарамды және бір рет қана пайдаланылуы мүмкін.5.6. Кодты токендерге алмастыру
Қосымша сервері token_endpoint мекенжайына application/x-www-form-urlencoded форматында POST сұрауын жібереді. Клиент HTTP Basic сұлбасы бойынша идентификатор мен құпия арқылы аутентификацияланады; client_id және client_secret параметрлерін сұрау денесінде беруге де жол беріледі.
curl -X POST https://auth.bbx.kz/realms/qairu/protocol/openid-connect/token \
-u "ext-campus-planner:YOUR_CLIENT_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d grant_type=authorization_code \
-d code=AUTHORIZATION_CODE \
--data-urlencode redirect_uri=https://planner.example.com/oauth/callback \
-d code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 3600,
"refresh_expires_in": 2592000,
"refresh_token": "eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9...",
"token_type": "Bearer",
"id_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"not-before-policy": 0,
"session_state": "3f0c9a52-6d1e-4b8a-9f3e-2c7b5d8e1a40",
"scope": "openid profile email qairu-student qairu.academic.read qairu.scheduling.read"
}Жауап өрістері:
access_token— API шақыруға арналған қолжетімділік токені; 1 сағат бойы жарамды (expires_in);refresh_token— жаңарту токені; сеанс 30 күнге дейін жарамды (refresh_expires_in);id_token— студент туралы мәліметтері бар OpenID Connect токені;scope— іс жүзінде берілген қолжетімділік аялары; тізбе сұратылғанмен сәйкес келмеуі мүмкін.
5.7. API-ді студент атынан шақыру
Қолжетімділік токені Authorization: Bearer <қолжетімділік токені> тақырыбында беріледі. Операция жолдары API токенімен авторизация кезіндегідей; қолжетімділік аялары берілген модульдердің GET әдісімен орындалатын операциялары, ал ALEM модулі үшін «Alem модулі» бөлімінде аталған операциялар қолжетімді.
curl https://api.bbx.kz/os/v1/me \
-H "Authorization: Bearer ACCESS_TOKEN"
curl https://api.bbx.kz/os/v1/academic/catalog/disciplines \
-H "Authorization: Bearer ACCESS_TOKEN"Ақпараттық жүйе студенттің құқықтарын қолданады: жауапта студентке кабинетте қолжетімді мәліметтер ғана болады. Қолжетімділік токенімен жіберілген GET /os/v1/me сұрауы қосымша, студент және берілген модульдер туралы мәліметтерді қайтарады:
{
"app": {
"clientId": "ext-campus-planner",
"name": "Campus Planner"
},
"user": {
"sub": "8b6f1c2e-3a4d-4f5e-9a7b-1c2d3e4f5a6b",
"name": "Aigerim Nurlanova",
"email": "a.nurlanova@qairu.edu.kz",
"studentId": "250142"
},
"modules": ["ACADEMIC", "SCHEDULING"],
"expiresAt": "2026-10-28T09:00:00Z"
}5.8. Қолжетімділік токенін жаңарту
Қолжетімділік токенінің мерзімі өткенде API-ге сұрау 401 invalid_token кодымен қабылданбайды. Жаңа қолжетімділік токені студенттің қатысуынсыз refresh_token арқылы сұратылады:
curl -X POST https://auth.bbx.kz/realms/qairu/protocol/openid-connect/token \
-u "ext-campus-planner:YOUR_CLIENT_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d grant_type=refresh_token \
-d refresh_token=REFRESH_TOKENЖауаптың құрамы кодты алмастыру кезіндегідей. Алынған refresh_token бұрынғысының орнына сақталады.
invalid_grant кодымен 400 жауабы сеанстың аяқталғанын білдіреді: 30 күндік мерзім өтті, студент қолжетімділікті кері қайтарып алды немесе сеансты университет әкімшілігі аяқтады. Бұл жағдайда студентке қайта кіру ұсынылады.5.9. id_token және пайдаланушы туралы мәліметтер
id_token пайдаланылар алдында jwks_uri кілттері бойынша қолтаңба, iss беруші, aud алушы (client_id мәніне сәйкес келеді), exp мерзімі және nonce мәні тексеріледі. id_token мазмұны:
{
"exp": 1793178000,
"iat": 1793174400,
"auth_time": 1793174388,
"iss": "https://auth.bbx.kz/realms/qairu",
"aud": "ext-campus-planner",
"sub": "8b6f1c2e-3a4d-4f5e-9a7b-1c2d3e4f5a6b",
"typ": "ID",
"azp": "ext-campus-planner",
"nonce": "n-0S6_WzA2Mj",
"sid": "3f0c9a52-6d1e-4b8a-9f3e-2c7b5d8e1a40",
"name": "Aigerim Nurlanova",
"given_name": "Aigerim",
"family_name": "Nurlanova",
"preferred_username": "a.nurlanova",
"email": "a.nurlanova@qairu.edu.kz",
"email_verified": true,
"student_id": "250142"
}| CLAIM | МӘНІ |
|---|---|
sub | Студенттің тұрақты идентификаторы; сыртқы платформадағы есептік жазбамен байланыстыру үшін қолданылады |
name, given_name, family_name | Студенттің толық аты, аты және тегі |
preferred_username | Ақпараттық жүйедегі пайдаланушы аты |
email, email_verified | Электрондық пошта мекенжайы және оның расталу белгісі |
student_id | Студент нөмірі; есептік жазбада көрсетілген жағдайда болады |
Дәл осы мәліметтерді қолжетімділік токенімен userinfo_endpoint мекенжайына жіберілген сұрау қайтарады:
curl https://auth.bbx.kz/realms/qairu/protocol/openid-connect/userinfo \
-H "Authorization: Bearer ACCESS_TOKEN"{
"sub": "8b6f1c2e-3a4d-4f5e-9a7b-1c2d3e4f5a6b",
"name": "Aigerim Nurlanova",
"given_name": "Aigerim",
"family_name": "Nurlanova",
"preferred_username": "a.nurlanova",
"email": "a.nurlanova@qairu.edu.kz",
"email_verified": true,
"student_id": "250142"
}Электрондық пошта мекенжайы мен пайдаланушы аты өзгеруі мүмкін. Есептік жазбаларды байланыстыру үшін тек sub қолданылады.
5.10. Шығу
Шығу үшін қосымша сақталған токендерді жояды және жаңарту токенін кері қайтарып алады:
curl -X POST https://auth.bbx.kz/realms/qairu/protocol/openid-connect/revoke \
-u "ext-campus-planner:YOUR_CLIENT_SECRET" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d token=REFRESH_TOKEN \
-d token_type_hint=refresh_tokenБраузердегі QAIRU сеансын аяқтау үшін пайдаланушы end_session_endpoint мекенжайына бағытталады. post_logout_redirect_uri параметріне тек қосымшаны тіркеу кезінде көрсетілген мекенжай үшін жол беріледі.
https://auth.bbx.kz/realms/qairu/protocol/openid-connect/logout
?client_id=ext-campus-planner
&id_token_hint=ID_TOKEN
&post_logout_redirect_uri=https%3A%2F%2Fplanner.example.com%2F5.11. Студенттің қолжетімділікті кері қайтарып алуы
Студент қосымшаны кабинетте ажыратады: «Профиль» бөлімі, «Қосылған қосымшалар» карточкасы, «Ажырату» әрекеті. Ажыратқаннан кейін:
- қосымшаға берілген қолжетімділік және жаңарту токендері дереу жарамсыз болады;
- бұрынғы қолжетімділік токенімен API-ге жіберілген сұраулар
401token_revokedкодымен қабылданбайды; - токенді жаңарту
invalid_grantқатесімен аяқталады; - келесі кіру кезінде студентке келісім экраны қайта көрсетіледі.
{
"error": {
"type": "authentication_error",
"code": "token_revoked",
"message": "The student has revoked access for this application.",
"request_id": "0d8e4c1a-7f2b-4a9e-b3c5-6e1d2f8a9b70"
}
}Университет әкімшілігі қосымшаны толық ажырата алады. Бұл жағдайда сұраулар 403 app_disabled кодымен қабылданбайды, ал қосымша арқылы кіру мүмкін болмайды.
5.12. Жарамдылық мерзімдері
| НЫСАН | МЕРЗІМІ |
|---|---|
| Авторизация коды | 1 минуттан аспайды, бір рет пайдаланылады |
access_token қолжетімділік токені | 1 сағат |
Сеанс және refresh_token жаңарту токені | Кірген сәттен бастап 30 күн; мерзім өткеннен кейін қайта кіру талап етіледі |
| Студенттің келісімі | Студент кері қайтарып алғанға немесе қосымша ажыратылғанға дейін |
5.13. OAuth қателері
Авторизация серверінің қателері OAuth 2.0 хаттамасы бойынша қайтарылады: авторизация кезінде — қайту мекенжайының error және error_description параметрлерімен, токендер беру кезінде — жауап денесімен:
{
"error": "invalid_grant",
"error_description": "Code not valid"
}| КОД | ҚАЙДА ҚАЙТАРЫЛАДЫ | МАҒЫНАСЫ | ҰСЫНЫЛАТЫН ӘРЕКЕТ |
|---|---|---|---|
access_denied | Қайту мекенжайы | Студент келісім экранында қолжетімділіктен бас тартты. | Пайдаланушыға кіру орындалмағанын хабарлап, қайта кіруді ұсыну. |
invalid_request | Қайту мекенжайы; токендер беру, HTTP 400 | Міндетті параметр жоқ немесе рұқсат етілмеген параметр көрсетілген, оның ішінде code_challenge берілмеген. | Сұрау параметрлерін тексеру. |
invalid_scope | Қайту мекенжайы | Рұқсат етілмеген қолжетімділік аясы сұратылды. | openid және қосымшаға рұқсат етілген модульдердің қолжетімділік аяларын көрсету. |
unauthorized_client | Қайту мекенжайы; токендер беру, HTTP 400 | Қосымшаға кодты немесе токенді көрсетілген тәсілмен алуға рұқсат етілмеген. | response_type және grant_type мәндерін тексеру. |
temporarily_unavailable | Қайту мекенжайы | Авторизация сервері уақытша қолжетімсіз. | Кіруді кейінірек қайталау. |
server_error | Қайту мекенжайы; токендер беру | Авторизация серверінің ішкі қатесі. | Сұрауды кейінірек қайталау. |
invalid_client | Токендер беру, HTTP 401 | Клиент идентификаторы немесе құпиясы қате не қосымша ажыратылған. | client_id және client_secret мәндерін тексеру; құпия қайта шығарылғаннан кейін жаңасын пайдалану. |
invalid_grant | Токендер беру, HTTP 400 | Авторизация коды жарамсыз, мерзімі өткен немесе бұрын пайдаланылған; code_verifier немесе redirect_uri авторизация кезінде берілген мәндерге сәйкес келмейді; жаңарту токенінің мерзімі өткен немесе ол кері қайтарып алынған. | Кіруді қайталау; токенді жаңарту кезінде студентке қайта кіруді ұсыну. |
unsupported_grant_type | Токендер беру, HTTP 400 | Қолдау көрсетілмейтін grant_type көрсетілген. | authorization_code немесе refresh_token пайдалану. |
Студенттің қолжетімділік токеніне байланысты API қате кодтары «Қате кодтары» бөлімінде келтірілген.
5.14. Қолжетімділік аялары
Әдепкі қолжетімділік аялары қосымшаға әрбір кіру кезінде беріледі. Модульдердің қолжетімділік аялары scope параметрінде көрсетіледі және тіркеу кезінде қосымшаға рұқсат етілген модульдер үшін ғана беріледі.
| ҚОЛЖЕТІМДІЛІК АЯСЫ | ТҮРІ | МАҚСАТЫ |
|---|---|---|
openid | Әдепкі | Міндетті. OpenID Connect хаттамасы бойынша кіруді және id_token берілуін растайды. |
profile | Әдепкі | Студенттің толық аты, аты, тегі және пайдаланушы аты. |
email | Әдепкі | Электрондық пошта мекенжайы және оның расталу белгісі. |
qairu-student | Әдепкі | Студент нөмірі student_id. |
qairu.alem.read | Модуль ALEM | Alem.Cloud платформасының тілдік модельдері, эмбеддингтер, саралау және сөйлеуді тану |
qairu.users.read | Модуль USERS | Пайдаланушылардың есептік жазбалары мен рөлдері |
qairu.files.read | Модуль FILES | Ақпараттық жүйенің файлдары |
qairu.learning.read | Модуль LEARNING | Оқыту: пәндер, тапсырмалар, бағалар және құзыреттер |
qairu.academic.read | Модуль ACADEMIC | Білім беру бағдарламалары, оқу жоспарлары және пәндер каталогы |
qairu.scheduling.read | Модуль SCHEDULING | Сабақ кестесі |
qairu.skillmatch.read | Модуль SKILLMATCH | Дағдылар мен кәсіби талаптарды салыстыру |
qairu.clubs.read | Модуль CLUBS | Студенттік клубтар және олардың іс-шаралары |
qairu.projects.read | Модуль PROJECTS | Студенттік және зерттеу жобалары |
qairu.ideas.read | Модуль IDEAS | Студенттердің идеялары мен өтініштері |