<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Конструкторское Бюро</title><subtitle>Про технологии, разработку и КПИ ❤️</subtitle><author><name>Конструкторское Бюро</name></author><id>https://teletype.in/atom/kbis</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/kbis?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@kbis?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/kbis?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-07T06:07:06.911Z</updated><entry><id>kbis:4X2nUpUVnfu</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/4X2nUpUVnfu?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Миграция критических программ и сервисов КПИ в облако AWS</title><published>2023-02-12T09:53:32.354Z</published><updated>2023-02-12T18:19:56.468Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/8f/a7/8fa7b45c-4b34-4323-aefd-88f2495d9cbb.png"></media:thumbnail><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/14/05/1405fe62-7e1b-4af9-8585-87699977b393.png&quot;&gt;Миграция критической цифровой инфраструктуры университета — задача, которая на первый взгляд требует участия множества специалистов и длительного срока реализации. Но пример КПИ им. Игоря Сикорского, доказывает, что в условиях войны и блекаутов, подобную задачу можно выполнить в сжатые сроки и силами небольшой команды. </summary><content type="html">
  &lt;p id=&quot;mYIj&quot;&gt;&lt;em&gt;Миграция критической цифровой инфраструктуры университета — задача, которая на первый взгляд требует участия множества специалистов и длительного срока реализации. Но пример КПИ им. Игоря Сикорского, доказывает, что в условиях войны и блекаутов, подобную задачу можно выполнить в сжатые сроки и силами небольшой команды. &lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;74Ja&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/14/05/1405fe62-7e1b-4af9-8585-87699977b393.png&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;FJ0w&quot;&gt;В начале года Андреем Губским, ИТ-консультантом и специалистом в разработке программного обеспечения, и командой сотрудников бюро, при содействии &lt;a href=&quot;https://thedigital.gov.ua/news/amazon-web-services-nadae-ukraini-pidtrimki-na-75-mln-dolariv-na-khmarni-tekhnologii-yaki-dopomagayut-stabilno-pratsyuvati-tsifroviy-derzhavi-ta-ekonomitsi&quot; target=&quot;_blank&quot;&gt;Министерства цифровой трансформации&lt;/a&gt;,  была проведена миграция критически важных сервисов университета в облако Amazon. Это позволило сохранить работоспособность многих подразделений КПИ, несмотря на тяжелую ситуацию с электроснабжением.&lt;/p&gt;
  &lt;figure id=&quot;W5aO&quot;&gt;
    &lt;iframe src=&quot;https://platform.twitter.com/embed/Tweet.html?id=1603868951041421312&amp;hideCard=false&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;EAlP&quot;&gt;Сейчас, когда как преподаватели, так и студенты часто находятся в самых разных точках Украины и мира, очень важна стабильная и бесперебойная работа всех систем, необходимых для функционирования учебного процесса.&lt;/p&gt;
  &lt;p id=&quot;RtBl&quot;&gt;Как показывает практика, в военное время иногда не стоит идти по проторенным бюрократическим путям, которые потребуют месяцев на согласование, а лучше воспользоваться профессиональными связями с коммьюнити специалистов.&lt;/p&gt;
  &lt;p id=&quot;05bz&quot;&gt;В ближайшее время мы планируем ряд публикаций, в которых расскажем о том, как проходила миграция, какие вызовы перед нами стояли и как мы с ними справились!&lt;/p&gt;

</content></entry><entry><id>kbis:qZ3Ud0fq3t0</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/qZ3Ud0fq3t0?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Расписание занятий КПИ</title><published>2022-06-09T10:00:04.857Z</published><updated>2022-06-10T06:36:59.231Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/d5/ed/d5ed6d8f-8f69-4148-8d5c-2ca15bc15b5b.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/1b/fd/1bfdeca3-7982-48d0-a8c3-a559a7918826.png&quot;&gt;Многие из вас знакомы с электронным расписанием rozklad.kpi.ua. В свое время это был хороший и полезный сервис, который и сейчас облегчат жизнь многим студентам и преподавателям, но время не стоит на месте, требования к удобству и возможностям системы меняются. Поэтому мы рады представить вам предварительную версию нового расписания schedule.kpi.ua!</summary><content type="html">
  &lt;p id=&quot;adp2&quot;&gt;Многие из вас знакомы с электронным расписанием &lt;a href=&quot;http://rozklad.kpi.ua&quot; target=&quot;_blank&quot;&gt;rozklad.kpi.ua&lt;/a&gt;. В свое время это был хороший и полезный сервис, который и сейчас облегчат жизнь многим студентам и преподавателям, но время не стоит на месте, требования к удобству и возможностям системы меняются. Поэтому мы рады представить вам &lt;strong&gt;&lt;em&gt;предварительную&lt;/em&gt;&lt;/strong&gt; версию нового расписания &lt;a href=&quot;https://schedule.kpi.ua&quot; target=&quot;_blank&quot;&gt;schedule.kpi.ua!&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;HhTB&quot;&gt;Новая версия имеет более удобный интерфейс, который корректно отображается как на экране компьютера, или ноутбука, так и на экране планшета, или телефона. &lt;/p&gt;
  &lt;p id=&quot;0Ob5&quot;&gt;Есть поддержка темной и светлой темы:&lt;/p&gt;
  &lt;figure id=&quot;osWk&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1b/fd/1bfdeca3-7982-48d0-a8c3-a559a7918826.png&quot; width=&quot;2900&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;3oPF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6b/6b/6b6bda9b-d245-428d-85bc-b3f8c69526bc.png&quot; width=&quot;3000&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;R7Yj&quot;&gt;Вторым важным отличием является архитектура расписания. Теперь это не монолит, а набор из нескольких сервисов.&lt;/p&gt;
  &lt;figure id=&quot;5aqS&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b0/66/b0665ca3-9fa8-419b-bdb3-a0b5160a71a5.png&quot; width=&quot;2964&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;PvbR&quot;&gt;Также теперь стал гораздо удобнее реализован поиск по группам и преподавателям.&lt;/p&gt;
  &lt;h2 id=&quot;6Kcb&quot;&gt;Детали разработки&lt;/h2&gt;
  &lt;p id=&quot;BEgQ&quot;&gt;Новое расписание состоит из трех основных компонентов:&lt;/p&gt;
  &lt;ul id=&quot;SRmf&quot;&gt;
    &lt;li id=&quot;kbg7&quot;&gt;&lt;strong&gt;API&lt;/strong&gt; – REST API предоставляет информацию в JSON-формате, разработан на ASP.NET Core 6&lt;/li&gt;
    &lt;li id=&quot;Hfnh&quot;&gt;&lt;strong&gt;UI&lt;/strong&gt; – новый адаптивный UI разработан на базе фреймворка react&lt;/li&gt;
    &lt;li id=&quot;u269&quot;&gt;&lt;strong&gt;Парсер&lt;/strong&gt; – отвечает за подгрузку информации о расписании занятий из внутренней информационной системы КПИ, разработан на .NET 6&lt;/li&gt;
    &lt;li id=&quot;otpW&quot;&gt;&lt;strong&gt;База данных &lt;/strong&gt;– расписание использует собственную базу дынных, в котоорй хранится как актуаьное состояние расписания, так и исторические данные. В качестве СУБД была выбрана PostgreSQL.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;nmGR&quot;&gt;Каждый сервис разворачивается в виде docker контейнера, что при необходимости облегчит процесс переноса на новый сервер, или дата-центр.&lt;/p&gt;
  &lt;p id=&quot;eiYy&quot;&gt;Внедрение REST API позволяет теперь использовать API расписания сторонним разработчикам. Так, например, одним из студентов КПИ было &lt;a href=&quot;https://github.com/MrPaschenko/Schedule-KPI&quot; target=&quot;_blank&quot;&gt;разработано&lt;/a&gt; мобильное приложение под &lt;a href=&quot;https://apps.apple.com/us/app/schedule-kpi/id1625484300&quot; target=&quot;_blank&quot;&gt;iOS&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;c3Ju&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d8/0a/d80a62e0-ba6e-463c-a14f-1ba1dac9521c.png&quot; width=&quot;2186&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;ejFl&quot;&gt;Open Source&lt;/h2&gt;
  &lt;p id=&quot;y9Ye&quot;&gt;Пользовательский интерфейс расписания &lt;a href=&quot;https://github.com/kpi-ua/schedule.kpi.ua&quot; target=&quot;_blank&quot;&gt;доступен на GitHub&lt;/a&gt; в виде проекта с отрытым исходным кодом под лицензией &lt;a href=&quot;https://github.com/kpi-ua/schedule.kpi.ua/blob/master/LICENSE&quot; target=&quot;_blank&quot;&gt;BSD 3-Clause License&lt;/a&gt;.&lt;/p&gt;
  &lt;figure id=&quot;56vy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/50/9a508019-f452-42e8-8cf8-62e26a7784a3.png&quot; width=&quot;3016&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;eafl&quot;&gt;Что дальше?&lt;/h2&gt;
  &lt;p id=&quot;Nnni&quot;&gt;В планах на будущее:&lt;/p&gt;
  &lt;ul id=&quot;6pYg&quot;&gt;
    &lt;li id=&quot;txvj&quot;&gt;интеграция расписания с системой &amp;quot;Электронный кампус КПИ&amp;quot;&lt;/li&gt;
    &lt;li id=&quot;aIdE&quot;&gt;экспорт расписания в календарь пользователя&lt;/li&gt;
    &lt;li id=&quot;l0So&quot;&gt;доработка интерфейса&lt;/li&gt;
    &lt;li id=&quot;f0U1&quot;&gt;реализация &lt;a href=&quot;http://rozklad.kpi.ua&quot; target=&quot;_blank&quot;&gt;других идей и предложений&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;Cm68&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/17/9b/179bbe30-647b-4db8-9e4b-b1e945d3a58c.png&quot; width=&quot;3016&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;WdQ3&quot;&gt;Присоединяйтесь к разработке!&lt;/p&gt;

</content></entry><entry><id>kbis:chat</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/chat?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Чат &quot;Электронный кампус&quot;</title><published>2022-01-13T15:24:08.599Z</published><updated>2023-04-22T22:14:16.063Z</updated><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">Чат &quot;Электронный кампус&quot; создан командой разработки проекта для оказания помощи пользователям системы.</summary><content type="html">
  &lt;p id=&quot;14sD&quot;&gt;Чат &amp;quot;Электронный кампус&amp;quot; создан командой разработки проекта для оказания помощи пользователям системы.&lt;/p&gt;
  &lt;h2 id=&quot;erns&quot;&gt;Правила чата&lt;/h2&gt;
  &lt;ol id=&quot;fndA&quot;&gt;
    &lt;li id=&quot;r66M&quot;&gt;Приветствуются вопросы &amp;quot;по делу&amp;quot;;&lt;/li&gt;
    &lt;li id=&quot;r53d&quot;&gt;Не приветствуется флуд и обсуждения на отвлеченные темы;&lt;/li&gt;
    &lt;li id=&quot;xFWT&quot;&gt;Запрещена нецензурная лексика, оскорбления, переход на личности;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;8Xl4&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;eESB&quot;&gt;Прежде чем задавать вопрос, убедитесь что его нет в разделе &lt;a href=&quot;https://ecampus.kpi.ua/faq&quot; target=&quot;_blank&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;CePB&quot;&gt;Если вы забыли пароль, предварительно воспользуйтесь &lt;a href=&quot;https://ecampus.kpi.ua/restore-password&quot; target=&quot;_blank&quot;&gt;системой восстановления пароля&lt;/a&gt;.&lt;/p&gt;
  &lt;p id=&quot;NtOS&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;YS3m&quot;&gt;Полезные ссылки&lt;/h2&gt;
  &lt;ul id=&quot;i0LU&quot;&gt;
    &lt;li id=&quot;FNvZ&quot;&gt;&lt;a href=&quot;https://github.com/kpi-ua/ecampus.kpi.ua&quot; target=&quot;_blank&quot;&gt;Публичный репозиторий проекта&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;z4X7&quot;&gt;&lt;a href=&quot;https://ecampus.kpi.ua/faq&quot; target=&quot;_blank&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ZCb1&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;IPj1&quot;&gt;👉🏻 &lt;a href=&quot;https://t.me/+Sms4-dZ5mKOq6qT8&quot; target=&quot;_blank&quot;&gt;Войти в чат&lt;/a&gt;&lt;/h2&gt;

</content></entry><entry><id>kbis:p2dAvfYk-eC</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/p2dAvfYk-eC?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Отображение объявлений на главной странице</title><published>2022-01-10T12:27:06.502Z</published><updated>2022-01-10T12:27:06.502Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/01/e4/01e4b9c7-a32c-40b7-adca-61ef9904f1bb.png"></media:thumbnail><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/de/16/de16e2a1-f517-4854-aae6-176ac241da3a.png&quot;&gt;С сегодняшнего дня, объявления будут доступны сразу на главной странице электронного кампуса:</summary><content type="html">
  &lt;pre id=&quot;6cp9&quot;&gt;Импортировано из старого блога. Оригинальная дата публикации – 24 мая 2019&lt;/pre&gt;
  &lt;p id=&quot;ap8f&quot;&gt;С сегодняшнего дня, объявления будут доступны сразу на главной странице электронного кампуса:&lt;/p&gt;
  &lt;figure id=&quot;YGbu&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/de/16/de16e2a1-f517-4854-aae6-176ac241da3a.png&quot; width=&quot;1400&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;I9D3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/ba/9f/ba9ff98a-d6f0-410f-81c7-0bbd84be73e0.png&quot; width=&quot;2400&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;XmSH&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/1c/8c/1c8c42fc-0ff0-4111-bff8-704fac7d25eb.png&quot; width=&quot;2400&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;mpeO&quot;&gt;Управление объявлениями пока остается в старой версии.&lt;/p&gt;

</content></entry><entry><id>kbis:8qP4vRi1bi1</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/8qP4vRi1bi1?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Вам кажется, что вы не можете войти в систему “Электронный кампус”. Что делать?</title><published>2022-01-10T12:20:35.449Z</published><updated>2022-01-10T12:27:30.732Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/c8/2c/c82c51a5-5f41-4a82-94b4-edc8f9326b5a.png"></media:thumbnail><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/38/4d/384d7be8-e56e-405d-8035-7fcb49454daa.png&quot;&gt;Время от времени, мы получаем вопросы от пользователей, что делать, если после перехода на старую версию системы, отображается сообщение “Accessing error”?</summary><content type="html">
  &lt;pre id=&quot;5wUP&quot;&gt;Импортировано из старого блога. Оригинальная дата публикации – 24 мая 2019&lt;/pre&gt;
  &lt;p id=&quot;4188&quot;&gt;Время от времени, мы получаем вопросы от пользователей, что делать, если после перехода на старую версию системы, отображается сообщение “Accessing error”?&lt;/p&gt;
  &lt;figure id=&quot;8qJG&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/38/4d/384d7be8-e56e-405d-8035-7fcb49454daa.png&quot; width=&quot;3408&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;BIT1&quot; class=&quot;m_original&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ad/45/ad45092e-b5fc-4e69-b0e0-9cc6696530e5.jpeg&quot; width=&quot;457&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;kZWX&quot;&gt;Зачастую это происходит из-за проблем с обработкой cookies. Чтобы убедиться, что проблема действительно в этом, попробуйте открыть вкладку браузера в анонимном режиме (например, хорошо подходит для этого Chrome) и повторно пройдите авторизацию.&lt;/p&gt;
  &lt;figure id=&quot;JWVF&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/7c/43/7c4313f6-2c16-4fc1-8a4f-5d9f70d561be.png&quot; width=&quot;3408&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;XDPy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/12/69/1269322d-796d-46ae-b394-61447ac82adf.png&quot; width=&quot;3408&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;e50d&quot;&gt;Если в анонимном режиме все работает корректно, тогда проблема однозначно связана с cookies-файлами и их нужно очистить.&lt;/p&gt;
  &lt;p id=&quot;364f&quot;&gt;Подробнее про работу с cookies-файлами в различных браузерах:&lt;/p&gt;
  &lt;p id=&quot;f149&quot;&gt;– &lt;a href=&quot;https://support.google.com/chrome/answer/95647?co=GENIE.Platform%3DDesktop&amp;hl=ru&quot; target=&quot;_blank&quot;&gt;Chrome&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;3873&quot;&gt;– &lt;a href=&quot;https://support.mozilla.org/ru/kb/udalenie-kukov-dlya-udaleniya-informacii-kotoruyu-&quot; target=&quot;_blank&quot;&gt;Firefox&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;f5de&quot;&gt;– &lt;a href=&quot;https://support.apple.com/ru-ru/guide/safari/sfri11471/mac&quot; target=&quot;_blank&quot;&gt;Safari&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;dd1d&quot;&gt;– &lt;a href=&quot;https://support.microsoft.com/ru-ru/help/10607/microsoft-edge-view-delete-browser-history&quot; target=&quot;_blank&quot;&gt;Edge&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>kbis:m703MLtQHch</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/m703MLtQHch?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Обновление системы модуля авторизации электронного кампуса</title><published>2022-01-10T12:17:32.460Z</published><updated>2022-01-10T12:17:32.460Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2d/b9/2db967f0-9282-40fb-bf2f-03e5c9946bb1.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/50/0c/500cd0e6-cb88-41ea-8d17-c432aec1c30c.png&quot;&gt;В течении вчерашнего дня, вы могли наблюдать некоторые перебои в работе электронного кампуса. Это было связано с тем, что наши инженеры занимались обновление системы авторизации, которую мы полностью переписали.</summary><content type="html">
  &lt;pre id=&quot;a47E&quot;&gt;Импортировано из старого блога. Оригинальная дата публикации – 19 апреля 2019&lt;/pre&gt;
  &lt;p id=&quot;dccf&quot;&gt;В течении вчерашнего дня, вы могли наблюдать некоторые перебои в работе электронного кампуса. Это было связано с тем, что наши инженеры занимались обновление системы авторизации, которую мы полностью переписали.&lt;/p&gt;
  &lt;p id=&quot;6c9c&quot;&gt;Это самое крупное обновление системы за последнее время.&lt;/p&gt;
  &lt;h2 id=&quot;1919&quot;&gt;Почему мы это сделали&lt;/h2&gt;
  &lt;p id=&quot;8ee1&quot;&gt;Ранее, за авторизацию отвечал модуль располагающийся по адресу login.kpi.ua. С момента его разработки прошло довольно большое время. При это возможности оперативно вносить изменения и закрывать уязвимости не было.&lt;/p&gt;
  &lt;p id=&quot;93c7&quot;&gt;Старая система авторизации была написана на PHP версии 5.3, на которой и работала до вчерашнего дня. При этом, на сегодня, актуальная версия PHP — 7.3. Однако просто обновить версию PHP было невозможно — некоторые из частей модуля авторизации были завязаны на ту функциональность, которую новая версия PHP уже просто не поддерживает. Очевидно, что использование настолько старого ПО, уже само по себе чревато большим количеством уязвимостей.&lt;/p&gt;
  &lt;p id=&quot;2ef7&quot;&gt;В связи с этим, и было принято решение о замене системы авторизации.&lt;/p&gt;
  &lt;h2 id=&quot;a02e&quot;&gt;Как авторизация работает теперь&lt;/h2&gt;
  &lt;p id=&quot;e47f&quot;&gt;Уже несколько лет для взаимодействия сторонних систем с электронным кампусом используется API, которое в том числе, обеспечивает возможность авторизации для внешних клиентов. Поэтому для авторизации пользователей в самом кампусе было принято решение использовать это же API.&lt;/p&gt;
  &lt;blockquote id=&quot;6UwX&quot;&gt;Для справки: API реализован на базе ASP.NET Core 2.2 с использованием JWT-токенов для авторизации.&lt;/blockquote&gt;
  &lt;p id=&quot;cd0f&quot;&gt;Помимо серверной части, обновлению подверглась и UI часть системы. Сейчас, при входе в кампус, вы попадете на новую страницу авторизации (на самом деле некоторые из вас уже видели эту страницу, однако она работала в тестовом режиме и не использовалась для входа в систему по умолчанию):&lt;/p&gt;
  &lt;figure id=&quot;A2X1&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/50/0c/500cd0e6-cb88-41ea-8d17-c432aec1c30c.png&quot; width=&quot;1600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;W7jX&quot;&gt;Успешно авторизовавшись, вы попадаете на дашборд, с которого можете перейти в: собственно в основное приложение электронного кампуса, редактор профиля, или просмотреть документацию к системе. Со временем, в новый интерфейс будут перенесены многие из модулей основной системы:&lt;/p&gt;
  &lt;figure id=&quot;k6Au&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/9a/70/9a70d54c-b6a1-4f3d-8601-b24883f88601.png&quot; width=&quot;2400&quot; /&gt;
  &lt;/figure&gt;
  &lt;blockquote id=&quot;vMWl&quot;&gt;&lt;strong&gt;Немного технических деталей&lt;/strong&gt;: новый UI реализован на базе фреймворка React, поддерживает адаптивность. Исходный код доступен в открытом доступе: &lt;a href=&quot;https://github.com/kpi-ua/ecampus.kpi.ua/issues&quot; target=&quot;_blank&quot;&gt;https://github.com/kpi-ua/ecampus.kpi.ua&lt;/a&gt;&lt;/blockquote&gt;
  &lt;h2 id=&quot;e72c&quot;&gt;Почему эти изменение важны&lt;/h2&gt;
  &lt;p id=&quot;b2a5&quot;&gt;Три главных пункта:&lt;br /&gt;— система в целом стала безопаснеее;&lt;br /&gt;— для авторизации различных модулей используется единая точка входа в систему;&lt;br /&gt;— уменьеша кодовая база устаревшего программного кода, что в свою очередь снижает общие издержки и стоимость сопровождения.&lt;/p&gt;
  &lt;figure id=&quot;o6b7&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e9/b5/e9b57865-8535-4082-8bf2-b54e856ea62d.png&quot; width=&quot;2050&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;9e27&quot;&gt;Обратная связь&lt;/h2&gt;
  &lt;p id=&quot;717a&quot;&gt;Мы всегда стараемся прислушиваться к нашим пользователям. В случае возникновения с проблем с авторизацией, или новым UI — вы всегда можете оставить свой багрепорт в репозитории проекта: &lt;a href=&quot;https://github.com/kpi-ua/ecampus.kpi.ua/issues&quot; target=&quot;_blank&quot;&gt;https://github.com/kpi-ua/ecampus.kpi.ua/issues&lt;/a&gt; Пулреквесты также приветствуются! ;)&lt;/p&gt;
  &lt;p id=&quot;46df&quot;&gt;Также, мы всегда внимательно читаем все письма, которые приходят на нашу почту: &lt;a href=&quot;mailto:ecampus@kpi.ua&quot; target=&quot;_blank&quot;&gt;ecampus@kpi.ua&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;3848&quot;&gt;Не забудьте ознакомиться &lt;a href=&quot;http://ecampus.kpi.ua/&quot; target=&quot;_blank&quot;&gt;с обновлениями&lt;/a&gt; лично!&lt;/p&gt;

</content></entry><entry><id>kbis:NdBoB6fTgNp</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/NdBoB6fTgNp?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Электронный кампус КПИ. Технологический стек.</title><published>2022-01-10T12:14:05.047Z</published><updated>2022-01-10T12:14:05.047Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/2d/b9/2db967f0-9282-40fb-bf2f-03e5c9946bb1.png"></media:thumbnail><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">&lt;img src=&quot;https://miro.medium.com/max/700/0*iLRIdxJYkjyYCA31.png&quot;&gt;Информационно-телекоммуникационная система «Электронный кампус» — прикладное программное обеспечение, которое является элементом информационно-телекоммуникационной среды университета и используется для информационной поддержки повседневной деятельности студентов, преподавателей, сотрудников университета, а так же для информационной поддержки всех видов инновационной деятельности в университете (далее ИТС ЭК).</summary><content type="html">
  &lt;pre id=&quot;JqiT&quot;&gt;Импортировано из старого блога. Оригинальная дата публикации – 19 мая 2019 года.&lt;/pre&gt;
  &lt;blockquote id=&quot;116e&quot;&gt;Информационно-телекоммуникационная система «&lt;a href=&quot;https://ecampus.kpi.ua/about&quot; target=&quot;_blank&quot;&gt;Электронный кампус&lt;/a&gt;» — прикладное программное обеспечение, которое является элементом информационно-телекоммуникационной среды университета и используется для информационной поддержки повседневной деятельности студентов, преподавателей, сотрудников университета, а так же для информационной поддержки всех видов инновационной деятельности в университете (далее ИТС ЭК).&lt;/blockquote&gt;
  &lt;blockquote id=&quot;5eb5&quot;&gt;ИТС ЭК объединяет внутренние информационные ресурсы (учебные, методические и другие), предоставляет централизованный доступ к ним на основе единых системных и технологических решений и обеспечивает их использование для эффективного управления и планирования научно-образовательным процессом.&lt;/blockquote&gt;
  &lt;figure id=&quot;YNYH&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://miro.medium.com/max/700/0*iLRIdxJYkjyYCA31.png&quot; width=&quot;700&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;ccf3&quot;&gt;Технологический стек&lt;/h2&gt;
  &lt;p id=&quot;c9b7&quot;&gt;&lt;strong&gt;PHP 5.3&lt;/strong&gt; — скриптовый язык общего назначения, применяется для разработки веб-приложений. В настоящее время, актуально версией языка является PHP 7.1&lt;/p&gt;
  &lt;p id=&quot;e1f9&quot;&gt;&lt;strong&gt;Smarty&lt;/strong&gt; — компилирующий обработчик шаблонов для PHP, один из инструментов, позволяющих отделить прикладную логику и данные от представления в духе концепции Model-view-controller.&lt;/p&gt;
  &lt;h1 id=&quot;58ee&quot;&gt;Модуль авторизации электронного кампуса&lt;/h1&gt;
  &lt;figure id=&quot;BkEe&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/50/0c/500cd0e6-cb88-41ea-8d17-c432aec1c30c.png&quot; width=&quot;1600&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;8130&quot;&gt;&lt;em&gt;Обновленный &lt;a href=&quot;https://medium.com/@ecampus/%D0%BE%D0%B1%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B-%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8F-%D0%B0%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8-%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE-%D0%BA%D0%B0%D0%BC%D0%BF%D1%83%D1%81%D0%B0-9e7021351d86&quot; target=&quot;_blank&quot;&gt;модуль авторизации&lt;/a&gt; позволяет пользователям электронного кампуса управлять своим аккаунтом (смена пароля, обновление персональных данных, обновление аватарки), восстановить утерянный пароль, а также авторизовываться в системе используя:&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;cff3&quot;&gt;&lt;em&gt;– имя пользователя и пароль;&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;cbb2&quot;&gt;&lt;em&gt;– аккаунт Facebook, привязанный к тому же адресу электронной почты, что и указан в профиле пользователя;&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;8c86&quot;&gt;&lt;em&gt;– аккаунт в мессенджере телеграм.&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;c00e&quot;&gt;Код модуля авторизации &lt;a href=&quot;https://github.com/kpi-ua/ecampus.kpi.ua&quot; target=&quot;_blank&quot;&gt;доступен&lt;/a&gt; на GithHub аккаунте &lt;a href=&quot;https://github.com/kpi-ua&quot; target=&quot;_blank&quot;&gt;КПИ&lt;/a&gt;.&lt;/p&gt;
  &lt;h2 id=&quot;5310&quot;&gt;Технологический стек&lt;/h2&gt;
  &lt;p id=&quot;4836&quot;&gt;&lt;strong&gt;React&lt;/strong&gt; — JavaScript-библиотека с открытым исходным кодом для разработки пользовательских интерфейсов. React разрабатывается и поддерживается Facebook, Instagram и сообществом отдельных разработчиков и корпораций. React предоставляет высокую скорость, простоту и масштабируемость. В качестве библиотеки для разработки пользовательских интерфейсов React часто используется с другими библиотеками и компонентами.&lt;/p&gt;
  &lt;h1 id=&quot;27f8&quot;&gt;API системы «Электронный кампус» v3.0&lt;/h1&gt;
  &lt;figure id=&quot;yeHe&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e0/af/e0af6e4d-4854-4352-84f2-eda67746480d.png&quot; width=&quot;1486&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;c7bf&quot;&gt;&lt;em&gt;API электронного кампуса позволяет реализовать интеграцию между электронным кампусом и другими системами КПИ (например проект &lt;a href=&quot;https://directory.kpi.ua/&quot; target=&quot;_blank&quot;&gt;directory.kpi.ua&lt;/a&gt; большую часть информации получает именно из API). Также, API используется разработчиками мобильных приложений для &lt;a href=&quot;https://github.com/kpi-ua/ecampus-client-ios&quot; target=&quot;_blank&quot;&gt;iOS&lt;/a&gt; и &lt;a href=&quot;https://github.com/kpi-ua/ecampus-client-android&quot; target=&quot;_blank&quot;&gt;Android&lt;/a&gt;. API электронного кампуса реализовано на базе архитектуры — &lt;strong&gt;RE&lt;/strong&gt;presentational &lt;strong&gt;S&lt;/strong&gt;tate &lt;strong&gt;T&lt;/strong&gt;ransfer. Это &lt;a href=&quot;https://en.wikipedia.org/wiki/Representational_state_transfer&quot; target=&quot;_blank&quot;&gt;архитектурный стиль&lt;/a&gt; взаимодействия компонентов распределённого приложения в сети, который представляет собой согласованный набор ограничений, учитываемых при проектировании распределённой системы.&lt;/em&gt;&lt;/p&gt;
  &lt;h2 id=&quot;6b2a&quot;&gt;Технологический стек&lt;/h2&gt;
  &lt;p id=&quot;c628&quot;&gt;&lt;strong&gt;ASP.NET Core 2.2&lt;/strong&gt; — кроссплатформенная, высокопроизводительная среда с открытым исходным кодом для создания современных облачных приложений.&lt;/p&gt;
  &lt;p id=&quot;6c8d&quot;&gt;&lt;strong&gt;JWT &lt;/strong&gt;— &lt;a href=&quot;https://en.wikipedia.org/wiki/Representational_state_transfer&quot; target=&quot;_blank&quot;&gt;открытый стандарт&lt;/a&gt; (RFC 7519) для создания токенов доступа, основанный на формате JSON. Используется для передачи данных для аутентификации в клиент-серверных приложениях. Токены создаются сервером, подписываются секретным ключом и передаются клиенту, который в дальнейшем использует данный токен для подтверждения своей личности.&lt;/p&gt;
  &lt;p id=&quot;38f6&quot;&gt;&lt;strong&gt;Azure BLOB Storage &lt;/strong&gt;— это высокомасштабируемое&lt;a href=&quot;https://en.wikipedia.org/wiki/Microsoft_Azure#Storage_services&quot; target=&quot;_blank&quot;&gt; облачное хранилище&lt;/a&gt;, которое идеально подходит для хранения изображений, текстовых файлов и файлов c видео. В Azure BLOB Storage хранятся аватарки пользователей электронного кампуса.&lt;/p&gt;
  &lt;h1 id=&quot;0b15&quot;&gt;Общие компоненты системы&lt;/h1&gt;
  &lt;p id=&quot;07cf&quot;&gt;&lt;strong&gt;MySQL&lt;/strong&gt; — свободная &lt;a href=&quot;https://en.wikipedia.org/wiki/MySQL&quot; target=&quot;_blank&quot;&gt;реляционная система управления базами данных&lt;/a&gt;. Разработку и поддержку MySQL осуществляет корпорация Oracle. Капитан очевидность подсказывает, что в базе данных хранятся данные электронного кампуса.&lt;/p&gt;
  &lt;p id=&quot;3d1c&quot;&gt;&lt;strong&gt;nginx&lt;/strong&gt; — веб-сервер общего назначения, который уже длительное время обслуживает серверы многих высоконагруженных проектов. Согласно статистике Netcraft nginx обслуживал или проксировал 26.22% самых нагруженных сайтов в апреле 2019 года.&lt;/p&gt;

</content></entry><entry><id>kbis:QCyIdeVSS-M</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/QCyIdeVSS-M?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Введение в OAuth 2</title><published>2021-11-21T16:27:27.043Z</published><updated>2021-11-21T16:27:27.043Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/89/f3/89f34eb5-fce1-45ef-84cc-4892d84185c0.png"></media:thumbnail><category term="tehnicheskie-teksty" label="Технические тексты"></category><summary type="html">&lt;img src=&quot;https://assets.digitalocean.com/articles/translateddiagrams32918/Abstract-Protocol-Flow-Russian@2x.png&quot;&gt;OAuth 2 представляет собой фреймворк для авторизации, позволяющий приложениям осуществлять ограниченный доступ к пользовательским аккаунтам на HTTP сервисах, например, на Facebook, GitHub и DigitalOcean. Он работает по принципу делегирования аутентификации пользователя сервису, на котором находится аккаунт пользователя, позволяя стороннему приложению получать доступ к аккаунту пользователя. OAuth 2 работает в вебе, на десктопных и мобильных приложениях.</summary><content type="html">
  &lt;pre id=&quot;4OzM&quot;&gt;Оригинальная публикации: https://www.digitalocean.com/community/tutorials/oauth-2-ru&lt;/pre&gt;
  &lt;h2 id=&quot;LZU8&quot;&gt;Введение&lt;/h2&gt;
  &lt;p id=&quot;maDS&quot;&gt;OAuth 2 представляет собой фреймворк для авторизации, позволяющий приложениям осуществлять ограниченный доступ к пользовательским аккаунтам на HTTP сервисах, например, на Facebook, GitHub и DigitalOcean. Он работает по принципу делегирования аутентификации пользователя сервису, на котором находится аккаунт пользователя, позволяя стороннему приложению получать доступ к аккаунту пользователя. OAuth 2 работает в вебе, на десктопных и мобильных приложениях.&lt;/p&gt;
  &lt;p id=&quot;cNW3&quot;&gt;Эта статья предназначена для разработчиков приложений и предоставляет обзор ролей, типов авторизации и типичных сценариев использования OAuth 2.&lt;/p&gt;
  &lt;p id=&quot;FBHk&quot;&gt;Начнём с ролей OAuth!&lt;/p&gt;
  &lt;h2 id=&quot;Роли-oauth&quot;&gt;Роли OAuth&lt;/h2&gt;
  &lt;p id=&quot;yEld&quot;&gt;OAuth определяет четыре роли:&lt;/p&gt;
  &lt;ul id=&quot;e5OS&quot;&gt;
    &lt;li id=&quot;YIMa&quot;&gt;Владелец ресурса&lt;/li&gt;
    &lt;li id=&quot;tsdP&quot;&gt;Клиент&lt;/li&gt;
    &lt;li id=&quot;LX7S&quot;&gt;Сервер ресурсов&lt;/li&gt;
    &lt;li id=&quot;EZXi&quot;&gt;Авторизационный сервер&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;2jrL&quot;&gt;Далее мы рассмотрим каждую из ролей.&lt;/p&gt;
  &lt;h3 id=&quot;Владелец-ресурса-Пользователь&quot;&gt;Владелец ресурса: &lt;em&gt;Пользователь&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;s8R4&quot;&gt;Владельцем ресурса является &lt;em&gt;пользователь&lt;/em&gt;, который авторизует &lt;em&gt;приложение&lt;/em&gt; для доступа к своему аккаунту. Доступ приложения к пользовательскому аккаунту ограничен “областью видимости” (scope) предоставленных прав авторизации (например, доступ на чтение или запись).&lt;/p&gt;
  &lt;h3 id=&quot;Сервер-ресурсов-авторизации-api&quot;&gt;Сервер ресурсов / авторизации: &lt;em&gt;API&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;2oQ8&quot;&gt;Сервер ресурсов непосредственно хранит защищённые данные аккаунтов пользователей, а авторизационный сервер проверяет подлинность информации, предоставленной &lt;em&gt;пользователем&lt;/em&gt;, а затем создаёт авторизационные токены для &lt;em&gt;приложения&lt;/em&gt;, с помощью которых приложение будет осуществлять доступ к пользовательским данным.&lt;/p&gt;
  &lt;p id=&quot;Z61r&quot;&gt;С точки зрения разработчика приложения API сервиса одновременно выполняет и роль сервера ресурсов и роль сервера авторизации. Далее мы будем считать эти две роли одной, и называть её &lt;em&gt;Сервис&lt;/em&gt; или &lt;em&gt;API&lt;/em&gt;.&lt;/p&gt;
  &lt;h3 id=&quot;Клиент-Приложение&quot;&gt;Клиент: &lt;em&gt;Приложение&lt;/em&gt;&lt;/h3&gt;
  &lt;p id=&quot;9cqe&quot;&gt;Клиентом является &lt;em&gt;приложение&lt;/em&gt;, которое хочет осуществить доступ к аккаунту &lt;em&gt;пользователя&lt;/em&gt;. Перед осуществлением доступа приложение должно быть авторизовано пользователем, а авторизация должна быть одобрена со стороны API.&lt;/p&gt;
  &lt;h2 id=&quot;Абстрактное-описание-протокола&quot;&gt;Абстрактное описание протокола&lt;/h2&gt;
  &lt;p id=&quot;bELi&quot;&gt;Теперь, когда у нас есть представление о ролях, используемых в OAuth, рассмотрим диаграмму их взаимодействия друг с другом.&lt;/p&gt;
  &lt;figure id=&quot;Eqxb&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://assets.digitalocean.com/articles/translateddiagrams32918/Abstract-Protocol-Flow-Russian@2x.png&quot; width=&quot;1491&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;9wf1&quot;&gt;Рассмотрим описание последовательности шагов на этой диаграмме:&lt;/p&gt;
  &lt;ol id=&quot;5YlY&quot;&gt;
    &lt;li id=&quot;oT2M&quot;&gt;&lt;em&gt;Приложение&lt;/em&gt; запрашивает у &lt;em&gt;пользователя&lt;/em&gt; авторизацию на доступ к серверу ресурсов.&lt;/li&gt;
    &lt;li id=&quot;Nzkx&quot;&gt;Если &lt;em&gt;пользователь&lt;/em&gt; авторизует запрос, &lt;em&gt;приложение&lt;/em&gt; получает разрешение на авторизацию (authorization grant).&lt;/li&gt;
    &lt;li id=&quot;KbiS&quot;&gt;&lt;em&gt;Приложение&lt;/em&gt; запрашивает авторизационный токен у &lt;em&gt;сервера авторизации&lt;/em&gt; (API) путём предоставления информации о самом себе и разрешении на авторизацию от пользователя.&lt;/li&gt;
    &lt;li id=&quot;CHIl&quot;&gt;Если подлинность приложения подтверждена и разрешение на авторизацию действительно, &lt;em&gt;сервер авторизации&lt;/em&gt; (API) создаёт токен доступа для приложения. Процесс авторизации завершён.&lt;/li&gt;
    &lt;li id=&quot;hCqK&quot;&gt;&lt;em&gt;Приложение&lt;/em&gt; запрашивает ресурс у &lt;em&gt;сервера ресурсов&lt;/em&gt; (API), предоставляя при этом токен доступа для аутентификации.&lt;/li&gt;
    &lt;li id=&quot;9oGw&quot;&gt;Если токен действителен, &lt;em&gt;сервер ресурсов&lt;/em&gt; (API) предоставляет запрашиваемый ресурс &lt;em&gt;приложению&lt;/em&gt;.&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;DBta&quot;&gt;Фактический порядок шагов описанного процесса может отличаться в зависимости от используемого типа разрешения на авторизацию, но в целом процесс будет выглядеть описанным образом. Далее мы рассмотрим различные типы разрешений на авторизацию.&lt;/p&gt;
  &lt;h2 id=&quot;Регистрация-приложения&quot;&gt;Регистрация приложения&lt;/h2&gt;
  &lt;p id=&quot;Bn2u&quot;&gt;Перед тем, как начать использовать OAuth в вашем приложении, вам необходимо зарегистрировать своё приложения в сервисе. Это делается путём регистрации в разделе “developer” или “API” сайта сервиса, где вам необходимо предоставить следующую информацию (возможно, включая некоторые детали о вашем приложении):&lt;/p&gt;
  &lt;ul id=&quot;gfcq&quot;&gt;
    &lt;li id=&quot;wyQ6&quot;&gt;Название приложения&lt;/li&gt;
    &lt;li id=&quot;XZLF&quot;&gt;Сайт приложения&lt;/li&gt;
    &lt;li id=&quot;rFxj&quot;&gt;Redirect URL или callback URL&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;UcT9&quot;&gt;Redirect URL - это URL, на который сервис будет перенаправлять пользователя после авторизации (или отказа в авторизации) вашего приложения.&lt;/p&gt;
  &lt;h3 id=&quot;Идентификатор-клиента-и-секрет-клиента&quot;&gt;Идентификатор клиента и секрет клиента&lt;/h3&gt;
  &lt;p id=&quot;qj1z&quot;&gt;После регистрации приложения сервис создаст учётные данные клиента - идентификатор клиента (client ID) и секрет клиента (client secret). Идентификатор клиента представляет собой публично доступную строку, которая используется API сервиса для идентификации приложения, а также используется для создания авторизационных URL для пользователей. Секрет клиента используется для аутентификации подлинности приложения для API сервиса, когда приложение запрашивает доступ к аккаунту пользователя. Секрет клиента должен быть известен только приложению и API.&lt;/p&gt;
  &lt;h2 id=&quot;Разрешение-на-авторизацию&quot;&gt;Разрешение на авторизацию&lt;/h2&gt;
  &lt;p id=&quot;ZVog&quot;&gt;В &lt;em&gt;абстрактном описании протокола&lt;/em&gt; выше первые четыре шага касаются вопросов создания разрешения на авторизацию и токена доступа. Тип разрешения на авторизацию зависит от используемого приложением метода запроса авторизации, а также от того, какие типы разрешения поддерживаются со стороны API. OAuth 2 определяет четыре разных типа, каждый из которых полезен в определённых ситуациях:&lt;/p&gt;
  &lt;ul id=&quot;yoZJ&quot;&gt;
    &lt;li id=&quot;3V5x&quot;&gt;&lt;strong&gt;Код авторизации (Authorization Code)&lt;/strong&gt;: используется с серверными приложениями (server-side applications).&lt;/li&gt;
    &lt;li id=&quot;wHUI&quot;&gt;&lt;strong&gt;Неявный (Implicit)&lt;/strong&gt;: используется мобильными или веб-приложениями (приложения, работающие на устройстве пользователя).&lt;/li&gt;
    &lt;li id=&quot;Vwia&quot;&gt;&lt;strong&gt;Учётные данные владельца ресурса (Resource Owner Password Credentials)&lt;/strong&gt;: используются доверенными приложениями, например приложениями, которые являются частью самого сервиса.&lt;/li&gt;
    &lt;li id=&quot;De33&quot;&gt;&lt;strong&gt;Учётные данные клиента (Client Credentials)&lt;/strong&gt;: используются при доступе приложения к API.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ssHY&quot;&gt;Далее мы рассмотрим эти типы разрешения на авторизацию, примеры их использования.&lt;/p&gt;
  &lt;h2 id=&quot;Тип-разрешения-на-авторизацию-Код-авторизации&quot;&gt;Тип разрешения на авторизацию: Код авторизации&lt;/h2&gt;
  &lt;p id=&quot;34Vl&quot;&gt;&lt;strong&gt;Код авторизации&lt;/strong&gt; является одним из наиболее распространённых типов разрешения на авторизацию, поскольку он хорошо подходит для &lt;em&gt;серверных приложений&lt;/em&gt;, где исходный код приложения и &lt;em&gt;секрет клиента&lt;/em&gt; не доступны посторонним. Процесс в данном случае строится на перенаправлении (redirection), что означает, что приложение должно быть в состоянии взаимодействовать с &lt;em&gt;пользовательским агентом&lt;/em&gt; (user-agent), например, веб-браузером, и получать коды авторизации API, перенаправляемые через пользовательский агент.&lt;/p&gt;
  &lt;p id=&quot;TZzp&quot;&gt;Опишем процесс на диаграмме:&lt;/p&gt;
  &lt;figure id=&quot;tVR8&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://assets.digitalocean.com/articles/translateddiagrams32918/Authorization-Code-Flow-Russian@2x.png&quot; width=&quot;1491&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Шаг-1-Ссылка-с-кодом-авторизации&quot;&gt;Шаг 1: Ссылка с кодом авторизации&lt;/h3&gt;
  &lt;p id=&quot;4jcN&quot;&gt;Сначала пользователю предоставляется ссылка следующего вида:&lt;/p&gt;
  &lt;pre id=&quot;CR1F&quot;&gt;https://cloud.digitalocean.com/v1/oauth/authorize?response_type=code&amp;amp;client_id=CLIENT_ID&amp;amp;redirect_uri=CALLBACK_URL&amp;amp;scope=read&lt;/pre&gt;
  &lt;p id=&quot;Evnd&quot;&gt;Рассмотрим компоненты ссылки:&lt;/p&gt;
  &lt;ul id=&quot;iE91&quot;&gt;
    &lt;li id=&quot;mJJM&quot;&gt;&lt;strong&gt;&lt;a href=&quot;https://cloud.digitalocean.com/v1/oauth/authorize&quot; target=&quot;_blank&quot;&gt;https://cloud.digitalocean.com/v1/oauth/authorize&lt;/a&gt;&lt;/strong&gt;: входная точка API авторизации (API authorization endpoint).&lt;/li&gt;
    &lt;li id=&quot;wV2m&quot;&gt;&lt;strong&gt;client_id=CLIENT_ID&lt;/strong&gt;: идентификатор клиента приложения (с помощью этого идентификатора API понимает, какое приложение запрашивает доступ).&lt;/li&gt;
    &lt;li id=&quot;7jLS&quot;&gt;&lt;strong&gt;redirect_uri=CALLBACK_URL&lt;/strong&gt;: URL, на который сервис перенаправит пользовательского агент (браузер) после выдачи авторизационного кода.&lt;/li&gt;
    &lt;li id=&quot;2FMu&quot;&gt;&lt;strong&gt;response_type=code&lt;/strong&gt;: указывает на то, что приложение запрашивает доступ с помощью кода авторизации.&lt;/li&gt;
    &lt;li id=&quot;QpA1&quot;&gt;&lt;strong&gt;scope=read&lt;/strong&gt;: задаёт уровень доступа приложения (в данном случае - доступ на чтение).&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;Шаг-2-Пользователь-авторизует-приложение&quot;&gt;Шаг 2: Пользователь авторизует приложение&lt;/h3&gt;
  &lt;p id=&quot;tB7B&quot;&gt;Когда пользователь нажимает на ссылку, он должен сперва осуществить вход в систему для подтверждения своей личности (если он, конечно, ещё не залогинен). После этого сервис предложит пользователю авторизовать или отказать в авторизации приложению для доступа к аккаунту пользователя. Пример такого диалога представлен ниже:&lt;/p&gt;
  &lt;figure id=&quot;fPrP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://assets.digitalocean.com/articles/oauth/authcode.png&quot; width=&quot;805&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;XETd&quot;&gt;На этом скриншоте экрана авторизации DigitalOcean мы можем видеть, что приложение “Thedropletbook App” запрашивает доступ на чтение к аккаунту “&lt;a href=&quot;mailto:manicas@digitalocean.com&quot; target=&quot;_blank&quot;&gt;manicas@digitalocean.com&lt;/a&gt;”.&lt;/p&gt;
  &lt;p id=&quot;5HCQ&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-3-Приложение-получает-код-авторизации&quot;&gt;Шаг 3: Приложение получает код авторизации&lt;/h3&gt;
  &lt;p id=&quot;qmqw&quot;&gt;Если пользователь выбирает “Авторизовать приложение”, сервис перенаправляет пользовательский агент (браузер) по URL перенаправления (redirect URL), который был задан на этапе регистрации клиента (вместе с &lt;em&gt;кодом авторизации&lt;/em&gt;). Ссылка будет выглядеть похожим образом (в данном примере приложение называется “dropletbook.com”):&lt;/p&gt;
  &lt;pre id=&quot;E7WF&quot;&gt;https://dropletbook.com/callback?code=AUTHORIZATION_CODE&lt;/pre&gt;
  &lt;p id=&quot;vMCQ&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-4-Приложение-запрашивает-токен-доступа&quot;&gt;Шаг 4: Приложение запрашивает токен доступа&lt;/h3&gt;
  &lt;p id=&quot;jXQu&quot;&gt;Приложение запрашивает токен доступа у API путём отправки авторизационного кода и аутентификационной информации (включая &lt;em&gt;секрет клиента&lt;/em&gt;) сервису. Ниже представлен пример POST-запроса для получения токена DigitalOcean:&lt;/p&gt;
  &lt;pre id=&quot;Rr4F&quot;&gt;https://cloud.digitalocean.com/v1/oauth/token?client_id=CLIENT_ID&amp;amp;client_secret=CLIENT_SECRET&amp;amp;grant_type=authorization_code&amp;amp;code=AUTHORIZATION_CODE&amp;amp;redirect_uri=CALLBACK_URL&lt;/pre&gt;
  &lt;p id=&quot;UE3j&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-5-Приложение-получает-токен-доступа&quot;&gt;Шаг 5: Приложение получает токен доступа&lt;/h3&gt;
  &lt;p id=&quot;hhlb&quot;&gt;Если авторизация прошла успешно, API возвращает токен доступа (а также, опционально, токен для обновления токена доступа - refresh token). Весь ответ сервера может выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;qdwK&quot;&gt;{&amp;quot;access_token&amp;quot;:&amp;quot;ACCESS_TOKEN&amp;quot;,&amp;quot;token_type&amp;quot;:&amp;quot;bearer&amp;quot;,&amp;quot;expires_in&amp;quot;:2592000,&amp;quot;refresh_token&amp;quot;:&amp;quot;REFRESH_TOKEN&amp;quot;,&amp;quot;scope&amp;quot;:&amp;quot;read&amp;quot;,&amp;quot;uid&amp;quot;:100101,&amp;quot;info&amp;quot;:{&amp;quot;name&amp;quot;:&amp;quot;Mark E. Mark&amp;quot;,&amp;quot;email&amp;quot;:&amp;quot;mark@thefunkybunch.com&amp;quot;}}&lt;/pre&gt;
  &lt;p id=&quot;qua5&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Qz7C&quot;&gt;Теперь приложение авторизовано! Оно может использовать токен для доступа к пользовательскому аккаунту через API сервиса с заданными ограничениями доступа до тех пор, пока не истечёт срок действия токена или токен не будет отозван. Если был создан токен для обновления токена доступа, он может быть использован для получения новых токенов доступа, когда истечёт срок действия старого токена.&lt;/p&gt;
  &lt;h2 id=&quot;Тип-разрешения-на-авторизацию-Неявный&quot;&gt;Тип разрешения на авторизацию: Неявный&lt;/h2&gt;
  &lt;p id=&quot;kc4U&quot;&gt;Неявный тип разрешения на авторизацию используется мобильными и веб-приложениями (приложениями, которые работают в веб-браузере), где конфиденциальность &lt;em&gt;секрета клиента&lt;/em&gt; не может быть гарантирована. Неявный тип разрешения также основан на перенаправлении пользовательского агента, при этом токен доступа передаётся пользовательскому агенту для дальнейшей передачи приложению. Это, в свою очередь, делает токен доступным пользователю и другим приложениям на устройстве пользователя. Также при этом типе разрешения на авторизацию не осуществляется аутентификация подлинности приложения, а сам процесс полагается на URL перенаправления (зарегистрированный ранее в сервисе).&lt;/p&gt;
  &lt;p id=&quot;veCs&quot;&gt;Неявный тип разрешения на авторизацию не поддерживает токены обновления токена доступа (refresh tokens).&lt;/p&gt;
  &lt;p id=&quot;uFqG&quot;&gt;Процесс выглядит следующим образом: приложение просит пользователя авторизовать себя, затем сервер авторизации передаёт токен доступа к пользовательскому агенту, который передаёт токен приложению. Далее мы опишем процесс в деталях.&lt;/p&gt;
  &lt;figure id=&quot;c11E&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://assets.digitalocean.com/articles/translateddiagrams32918/Implicit-Flow-Russian@2x.png&quot; width=&quot;1491&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Шаг-1-Ссылка-для-неявной-авторизации&quot;&gt;Шаг 1: Ссылка для неявной авторизации&lt;/h3&gt;
  &lt;p id=&quot;nCRh&quot;&gt;При неявном типа разрешения на авторизацию пользователю предоставляется ссылка, запрашивающая токен у API. Эта ссылка выглядит почти так же, как ссылка для предыдущего способа (с кодом авторизации), за исключением того, что запрашивается &lt;em&gt;токен&lt;/em&gt; вместо кода (обратите внимание на &lt;em&gt;response type&lt;/em&gt; “token”):&lt;/p&gt;
  &lt;pre id=&quot;1m3z&quot;&gt;https://cloud.digitalocean.com/v1/oauth/authorize?response_type=token&amp;amp;client_id=CLIENT_ID&amp;amp;redirect_uri=CALLBACK_URL&amp;amp;scope=read
&lt;/pre&gt;
  &lt;p id=&quot;7Mcc&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-2-Пользователь-авторизует-приложение&quot;&gt;Шаг 2: Пользователь авторизует приложение&lt;/h3&gt;
  &lt;p id=&quot;16l2&quot;&gt;Когда пользователь нажимает на ссылку, он должен сперва осуществить вход в систему для подтверждения своей личности (если он, конечно, ещё не залогинен). После этого сервис предложит пользователю авторизовать или отказать в авторизации приложению для доступа к аккаунту пользователя. Пример такого диалога представлен ниже:&lt;/p&gt;
  &lt;figure id=&quot;dnD5&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://assets.digitalocean.com/articles/oauth/authcode.png&quot; width=&quot;805&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ChKL&quot;&gt;На этом скриншоте экрана авторизации DigitalOcean мы можем видеть, что приложение “Thedropletbook App” запрашивает доступ на чтение к аккаунту “&lt;a href=&quot;mailto:manicas@digitalocean.com&quot; target=&quot;_blank&quot;&gt;manicas@digitalocean.com&lt;/a&gt;”.&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-3-Пользовательский-агент-получает-токен-доступа-с-uri-перенаправления&quot;&gt;Шаг 3: Пользовательский агент получает токен доступа с URI перенаправления&lt;/h3&gt;
  &lt;p id=&quot;cRal&quot;&gt;Если пользователь выбирает “Авторизовать приложение”, сервис перенаправляет пользовательский агент по URI пренправления приложения и включает в URI фрагмент, содержащий токен доступа. Это выглядит примерно вот так:&lt;/p&gt;
  &lt;pre id=&quot;Z495&quot;&gt;https://dropletbook.com/callback#token=ACCESS_TOKEN&lt;/pre&gt;
  &lt;h3 id=&quot;Шаг-4-Пользовательский-агент-следует-по-uri-перенаправления&quot;&gt;&lt;/h3&gt;
  &lt;h3 id=&quot;GaAk&quot;&gt;Шаг 4: Пользовательский агент следует по URI перенаправления&lt;/h3&gt;
  &lt;p id=&quot;l8XL&quot;&gt;Пользовательский агент следует по URI перенаправления, сохраняя при этом токен доступа.&lt;/p&gt;
  &lt;p id=&quot;8eQT&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-5-Приложение-выполняет-скрипт-извлечения-токена-доступа&quot;&gt;Шаг 5: Приложение выполняет скрипт извлечения токена доступа&lt;/h3&gt;
  &lt;p id=&quot;eXsW&quot;&gt;Приложение возвращает веб-страницу, которая содержит скрипт для извлечения токен доступа из полного URI перенаправления, сохранённого пользовательским агентом.&lt;/p&gt;
  &lt;p id=&quot;FWt1&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;Шаг-6-Токен-доступа-передаётся-приложению&quot;&gt;Шаг 6: Токен доступа передаётся приложению&lt;/h3&gt;
  &lt;p id=&quot;mZG2&quot;&gt;Пользовательский агент запускает скрипт извлечения токена доступа, а затем передаёт извлечённый токен приложению.&lt;/p&gt;
  &lt;p id=&quot;03DO&quot;&gt;Теперь приложение авторизовано! Оно может использовать токен для доступа к пользовательскому аккаунту через API сервиса с заданными ограничениями доступа до тех пор, пока не истечёт срок действия токена или токен не будет отозван.&lt;/p&gt;
  &lt;h2 id=&quot;Тип-разрешения-на-авторизацию-учётные-данные-владельца-ресурса&quot;&gt;Тип разрешения на авторизацию: учётные данные владельца ресурса&lt;/h2&gt;
  &lt;p id=&quot;PygI&quot;&gt;При этом типе разрешения на авторизацию пользователь предоставляет приложению напрямую свои авторизационные данные в сервисе (имя пользователя и пароль). Приложение, в свою очередь, использует полученные учётные данные пользователя для получения токена доступа от сервиса. Этот тип разрешения на авторизацию должен использоваться только в том случае, когда другие варианты не доступны. Кроме того, этот тип разрешения стоит использовать только в случае, когда приложение пользуется доверием пользователя (например, является частью самого сервиса, или операционной системы пользователя).&lt;/p&gt;
  &lt;h3 id=&quot;Процесс-с-учётными-данными-владельца-ресурса&quot;&gt;Процесс с учётными данными владельца ресурса&lt;/h3&gt;
  &lt;p id=&quot;uZ6t&quot;&gt;После того, как пользователь передаст свои учётные данные приложению, приложение запросит токен доступа у авторизационного сервера. Пример POST-запроса может выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;L8H6&quot;&gt;https://oauth.example.com/token?grant_type=password&amp;amp;username=USERNAME&amp;amp;password=PASSWORD&amp;amp;client_id=CLIENT_ID&lt;/pre&gt;
  &lt;p id=&quot;lkdh&quot;&gt;Если учётные данные корректны, сервер авторизации вернёт токен доступа приложению. Теперь приложение авторизовано!&lt;/p&gt;
  &lt;p id=&quot;hOi7&quot;&gt;&lt;strong&gt;Внимание:&lt;/strong&gt; DigitalOcean в настоящее время не поддерживает тип разрешения на авторизацию с использованием учётных данных владельца ресурса, поэтому ссылка выше ведёт на воображаемый авторизационный сервер “oauth.example.com”.&lt;/p&gt;
  &lt;h2 id=&quot;Тип-разрешения-на-авторизацию-Учётные-данные-клиента&quot;&gt;Тип разрешения на авторизацию: Учётные данные клиента&lt;/h2&gt;
  &lt;p id=&quot;F5vS&quot;&gt;Тип разрешения на авторизацию с использованием учётных данных клиента позволяет приложению осуществлять доступ к своему собственному аккаунту сервиса. Это может быть полезно, например, когда приложение хочет обновить собственную регистрационную информацию на сервисе или URI перенаправления, или же осуществлить доступ к другой информации, хранимой в аккаунте приложения на сервисе, через API сервиса.&lt;/p&gt;
  &lt;h3 id=&quot;Процесс-с-учётными-данными-клиента&quot;&gt;Процесс с учётными данными клиента&lt;/h3&gt;
  &lt;p id=&quot;dQgU&quot;&gt;Приложение запрашивает токен доступа путём отправки своих учётных данных, своего идентификатора клиента и секрета клиента авторизационному серверу. Пример POST-запроса может выглядеть следующим образом:&lt;/p&gt;
  &lt;pre id=&quot;vlzW&quot;&gt;https://oauth.example.com/token?grant_type=client_credentials&amp;amp;client_id=CLIENT_ID&amp;amp;client_secret=CLIENT_SECRET&lt;/pre&gt;
  &lt;p id=&quot;Ngk4&quot;&gt;Если учётные данные клиента корректны, авторизационный сервер вернёт токен доступа для приложения. Теперь приложение авторизовано для использования собственного аккаунта!&lt;/p&gt;
  &lt;h2 id=&quot;Пример-использования-токена-доступа&quot;&gt;Пример использования токена доступа&lt;/h2&gt;
  &lt;p id=&quot;O2aC&quot;&gt;После того, как приложение получит токен доступа, оно может использовать этот токен для доступа к пользовательскому аккаунту через API сервиса с заданными ограничениями доступа до тех пор, пока не истечёт срок действия токена или токен не будет отозван.&lt;/p&gt;
  &lt;p id=&quot;blqS&quot;&gt;Ниже представлен пример запроса к API с использованием &lt;code&gt;curl&lt;/code&gt;. Обратите внимание, что он содержит токен доступа:&lt;/p&gt;
  &lt;pre id=&quot;Ibzt&quot;&gt;curl -X POST -H &amp;quot;Authorization: Bearer ACCESS_TOKEN&amp;quot;&amp;quot;https://api.digitalocean.com/v2/$OBJECT&amp;quot;&lt;/pre&gt;
  &lt;p id=&quot;59FZ&quot;&gt;Если токен доступа валиден, API обработает полученный запрос. Если срок действия токена доступа истёк или токен некорректен, API вернёт ошибку “invalid_request”.&lt;/p&gt;
  &lt;h2 id=&quot;Обновление-токена-доступа&quot;&gt;Обновление токена доступа&lt;/h2&gt;
  &lt;p id=&quot;oOyF&quot;&gt;После истечения срока действия токена доступа все запросы к API с его использованием будут возвращать ошибку “Invalid Token Error”. Если при создании токена доступа был создан и токен для обновления токена доступа (refresh token), последний может быть использован для получения нового токена доступа от авторизационного сервера.&lt;/p&gt;
  &lt;p id=&quot;G2S1&quot;&gt;Ниже представлен пример POST-запроса, использующего токен для обновления токена доступа для получения нового токена доступа:&lt;/p&gt;
  &lt;pre id=&quot;BBnf&quot;&gt;https://cloud.digitalocean.com/v1/oauth/token?grant_type=refresh_token&amp;amp;client_id=CLIENT_ID&amp;amp;client_secret=CLIENT_SECRET&amp;amp;refresh_token=REFRESH_TOKEN&lt;/pre&gt;
  &lt;h2 id=&quot;Заключение&quot;&gt;Заключение&lt;/h2&gt;
  &lt;p id=&quot;tzUu&quot;&gt;На этом мы завершаем наш обзор OAuth 2. Теперь у вас есть общее представление о том, как работает OAuth 2, а также о том, когда и как использовать существующие типы разрешения на авторизацию.&lt;/p&gt;
  &lt;p id=&quot;lKjY&quot;&gt;Если вы хотите узнать больше об OAuth 2, рекомендуем ознакомиться со следующими статьями:&lt;/p&gt;
  &lt;ul id=&quot;MNtW&quot;&gt;
    &lt;li id=&quot;K9tB&quot;&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-use-oauth-authentication-with-digitalocean-as-a-user-or-developer&quot; target=&quot;_blank&quot;&gt;Как использовать аутентификацию OAuth в DigitalOcean, если вы пользователь или разработчик&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;QlCK&quot;&gt;&lt;a href=&quot;https://www.digitalocean.com/community/tutorials/how-to-use-the-digitalocean-api-v2&quot; target=&quot;_blank&quot;&gt;Как использовать API v2 DigitalOcean&lt;/a&gt;.&lt;/li&gt;
    &lt;li id=&quot;pLTd&quot;&gt;&lt;a href=&quot;http://tools.ietf.org/html/rfc6749&quot; target=&quot;_blank&quot;&gt;Фреймворк авторизации OAuth 2.0&lt;/a&gt;.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>kbis:3Mxz91vS904</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/3Mxz91vS904?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Миграция API системы электронный кампус на .NET 6</title><published>2021-11-18T15:40:17.782Z</published><updated>2021-11-18T15:42:09.160Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img4.teletype.in/files/b9/51/b9515a79-91d8-4cd9-add0-c41328afa9b6.jpeg"></media:thumbnail><category term="elektronnyj-kampus" label="Электронный кампус"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/51/18/5118c64e-d5e0-4ec5-ba65-7c5ace5a7da7.jpeg&quot;&gt;8 ноября платформа .NET обновилась до шестой версии. Это важное событие, поскольку данная версия платформы является LTS-версией, что означает, что она будет поддерживаться довольно продолжительное время и будет считаться стандартной версией к распространению. </summary><content type="html">
  &lt;p id=&quot;wjPH&quot;&gt;8 ноября платформа .NET &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/announcing-net-6/&quot; target=&quot;_blank&quot;&gt;обновилась&lt;/a&gt; до шестой версии. Это важное событие, поскольку данная версия платформы является LTS-версией, что означает, что она будет поддерживаться довольно продолжительное время и будет считаться стандартной версией к распространению. &lt;/p&gt;
  &lt;figure id=&quot;r31b&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/51/18/5118c64e-d5e0-4ec5-ba65-7c5ace5a7da7.jpeg&quot; width=&quot;1200&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;CAz4&quot;&gt;Использование LTS-версий компонентов программных систем в свою очередь позволяет уменьшить технический долг и облегчить поддержку таких системы в долгосрочной перспективе. Именно поэтому мы мигрировали API системы &amp;quot;Электронный кампус&amp;quot;  на .NET 6 и будем использовать эту версию платформы до момента релиза следующей LTS-версии. &lt;/p&gt;
  &lt;p id=&quot;PgqO&quot;&gt;О новых возможностях .NET 6 можно детальнее узнать &lt;a href=&quot;https://habr.com/en/post/573434/&quot; target=&quot;_blank&quot;&gt;в этой&lt;/a&gt; публикации, а более подробно ознакомиться с жизненным циклом платформы .NET – &lt;a href=&quot;https://dotnet.microsoft.com/platform/support/policy/dotnet-core&quot; target=&quot;_blank&quot;&gt;здесь&lt;/a&gt;.&lt;/p&gt;

</content></entry><entry><id>kbis:luuGSWN0cpv</id><link rel="alternate" type="text/html" href="https://teletype.in/@kbis/luuGSWN0cpv?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=kbis"></link><title>Сертификат *.kpi.ua может быть временно невалиден в ближайшие несколько дней.</title><published>2021-10-28T13:48:22.655Z</published><updated>2021-10-28T13:48:22.655Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/a9/55/a955f327-4b93-4bf5-aa0a-568fb4a52c97.jpeg"></media:thumbnail><tt:hashtag>кпи</tt:hashtag><tt:hashtag>кпикампус</tt:hashtag><tt:hashtag>ssl</tt:hashtag><tt:hashtag>kpi</tt:hashtag><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/e3/81/e3818956-2dde-48dd-b891-0ab8c8981f5b.jpeg&quot;&gt;В связи с тем, что процедура продления договора на покупку сертификата *.kpi.ua проходит несколько дольше, чем планировалось, возможна ситуация, при которой во время посещения некоторых сервисов использующих wildcard сертификат, будет отображаться сообщение о небезопасном подключении. </summary><content type="html">
  &lt;figure id=&quot;C2BV&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/e3/81/e3818956-2dde-48dd-b891-0ab8c8981f5b.jpeg&quot; width=&quot;680&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fxGn&quot;&gt;В связи с тем, что процедура продления договора на покупку сертификата *.kpi.ua проходит несколько дольше, чем планировалось, возможна ситуация, при которой во время посещения некоторых сервисов использующих wildcard сертификат, будет отображаться сообщение о небезопасном подключении. &lt;/p&gt;
  &lt;p id=&quot;D37c&quot;&gt;Не стоит пугаться, после завершения формальных процедур необходимых для продления сертификата, сервисы вернуться в привычный режим работы. &lt;/p&gt;
  &lt;tt-tags id=&quot;FAZK&quot;&gt;
    &lt;tt-tag name=&quot;кпи&quot;&gt;#кпи&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;кпикампус&quot;&gt;#кпикампус&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;ssl&quot;&gt;#ssl&lt;/tt-tag&gt;
    &lt;tt-tag name=&quot;kpi&quot;&gt;#kpi&lt;/tt-tag&gt;
  &lt;/tt-tags&gt;

</content></entry></feed>