Skip to content

Latest commit

 

History

History
100 lines (68 loc) · 5.76 KB

oauthProvider.md

File metadata and controls

100 lines (68 loc) · 5.76 KB

Использование Модульного журнала как Oauth2-провайдера [BETA]

Данный сервис может быть использован для как средство аутентификации студентов МГТУ Станкин и получения их персональных данных, таких как имя, фамилия, номер студенческого билета, группы итп посредством протокола OAuth 2.0

Иными словами, вы можете сделать кнопку Войти через модульный журнал на своем сервисе, и получить с разрешения студента информацию о нем.

Регистрация сервиса

На данный момент автоматическая регистрация сервисов не реализована.

Если вы хотите добавить возможность аутентификации на вашем сервисе через модульный журнал, то напишите мне на почту [email protected] или заведите тикет и сообщите название сервиса, электронную почту для связи и redirect_uri (можно несколько), на который будет перенаправляться пользователь после аутентификации и авторизации.

В ответ вы получите client_id и client_secret для вашего сервиса.

Процедура аутентификации

Получение кода

На вашем сайте вы должны разместить ссылку вида:

https://lk.stankin.ru/webapi/oauth/authorize?response_type=code&client_id=[client_id]&redirect_uri=[redirect_uri]

где

  • [client_id] - ваш client_id
  • [redirect_uri] - один из присланных вами redirect_uri

также вы можете указать параметры force_confirm=yes для принудительного запроса согласия пользователя, даже если он уже дал его ранее, и state=[произвольная строка] - как дополнительное поле для идентификации пользователя.

При клике на эту ссылку пользователь будет перенаправлен на страницу запроса разрешения передачи данных вашему сервису.

В случае согласия пользователя пользователь будет перенаправлен на указанный redirect_uri при этом к строке запроса будет добавлен параметер code (например http://your.site.com/token?code=1234), при помощи которого вы сможете получить информацию о пользователе.

В случае отказа пользователя (или какой-то другой ошибки) вместо параметра code будет передан параметр error с текстом ошибки.

Обмен кода на токен и получение данных о пользователе

Получив code ваш сервис может в течении 5 минут обменять его на постоянный token и получить данные пользователя, отправив POST-запрос вида:

POST /webapi/oauth/token HTTP/1.1
Host: lk.stankin.ru
Content-type: application/x-www-form-urlencoded
Content-Length: [длина тела запроса]

code=[полученный code]&client_id=[ваш client_id]&client_secret=[ваш client_secret]

В ответ вы получите JSON вида:

{
  "access_token": "647801fa-bd52-4d85-87d1-01e80e00b380",
  "token_type": "bearer",
  "userInfo": {
    "name": "Иван",
    "surname": "Иванов",
    "patronym": "Иванлыич",
    "stgroup": "ИДБ-00-00",
    "cardid": "1234567"
  }
}

Этот json вы будете получить каждый раз, когда пользователь будет проходить аутентификацию по этой процедуре. Значение access_token может меняться со временем, например если пользователь отзовет право вашего сервиса.

Таким образом вы можете аутентифицировать пользователя на своем сервисе через модульный журнал.

Использование полученного токена

В настоящее время полученный токен особой пользы не приносит, так как всё что можно при помощи него сделать, это отправить запрос

https://lk.stankin.ru/webapi/user/info

добавив заголовкок запроса Authorization: Bearer [ваш токен].

В ответ вы получите всё тот же JSON:

{
    "name": "Иван",
    "surname": "Иванов",
    "patronym": "Иванлыич",
    "stgroup": "ИДБ-00-00",
    "cardid": "1234567"
}

В дальнейшем возможно добавление других функций.

Свои замечания и пожелания этот счет вы всегда можете оставить в треккере.