Translated ['', 'src/pentesting-cloud/azure-security/az-basic-informatio

This commit is contained in:
Translator
2026-02-05 12:38:15 +00:00
parent 387cd7ef11
commit b21a42105c
@@ -1,100 +1,100 @@
# Az - Токени та Публічні Додатки
# Az - Tokens & Public Applications
{{#include ../../../banners/hacktricks-training.md}}
## Основна Інформація
## Основна інформація
Entra ID - це хмарна платформа управління ідентифікацією та доступом (IAM) від Microsoft, яка слугує основною системою аутентифікації та авторизації для таких сервісів, як Microsoft 365 та Azure Resource Manager. Azure AD реалізує фреймворк авторизації OAuth 2.0 та протокол аутентифікації OpenID Connect (OIDC) для управління доступом до ресурсів.
Entra ID це хмарна платформа Microsoft для identity and access management (IAM), яка слугує базовою системою автентифікації та авторизації для сервісів, таких як Microsoft 365 і Azure Resource Manager. Azure AD реалізує фреймворк авторизації OAuth 2.0 та протокол автентифікації OpenID Connect (OIDC) для керування доступом до ресурсів.
### OAuth
**Ключові Учасники в OAuth 2.0:**
**Ключові учасники в OAuth 2.0:**
1. **Сервер Ресурсів (RS):** Захищає ресурси, що належать власнику ресурсу.
2. **Власник Ресурсу (RO):** Зазвичай кінцевий користувач, який володіє захищеними ресурсами.
3. **Клієнтський Додаток (CA):** Додаток, що намагається отримати доступ до ресурсів від імені власника ресурсу.
4. **Сервер Авторизації (AS):** Видає токени доступу клієнтським додаткам після їх аутентифікації та авторизації.
1. **Resource Server (RS):** Захищає ресурси, що належать resource owner.
2. **Resource Owner (RO):** Зазвичай це кінцевий користувач, який володіє захищеними ресурсами.
3. **Client Application (CA):** Додаток, який запитує доступ до ресурсів від імені resource owner.
4. **Authorization Server (AS):** Видає access tokens клієнтським додаткам після їх аутентифікації та авторизації.
**Обсяги та Згода:**
**Scopes and Consent:**
- **Обсяги:** Дрібні дозволи, визначені на сервері ресурсів, які вказують рівні доступу.
- **Згода:** Процес, за допомогою якого власник ресурсу надає клієнтському додатку дозвіл на доступ до ресурсів з конкретними обсягами.
- **Scopes:** Гранульовані дозволи, визначені на resource server, що вказують рівні доступу.
- **Consent:** Процес, під час якого resource owner надає client application дозвіл на доступ до ресурсів з певними scopes.
**Інтеграція з Microsoft 365:**
**Microsoft 365 Integration:**
- Microsoft 365 використовує Azure AD для IAM і складається з кількох "первинних" OAuth додатків.
- Ці додатки глибоко інтегровані та часто мають взаємозалежні відносини сервісів.
- Щоб спростити досвід користувачів і підтримувати функціональність, Microsoft надає "неявну згоду" або "попередню згоду" цим первинним додаткам.
- **Неявна Згода:** Деяким додаткам автоматично **надається доступ до конкретних обсягів без явного схвалення користувача або адміністратора**.
- Ці попередньо погоджені обсяги зазвичай приховані як від користувачів, так і від адміністраторів, що робить їх менш видимими в стандартних інтерфейсах управління.
- Microsoft 365 використовує Azure AD для IAM і складається з кількох "first-party" OAuth додатків.
- Ці додатки глибоко інтегровані й часто мають взаємозалежні сервісні відносини.
- Щоб спростити досвід користувача та зберегти функціональність, Microsoft надає "implied consent" або "pre-consent" цим first-party додаткам.
- **Implied Consent:** Певні додатки автоматично **granted access to specific scopes without explicit user or administrator approva**l.
- Ці попередньо погоджені scopes зазвичай приховані від користувачів та адміністраторів, що робить їх менш помітними в стандартних інтерфейсах керування.
**Типи Клієнтських Додатків:**
**Client Application Types:**
1. **Конфіденційні Клієнти:**
- Мають свої власні облікові дані (наприклад, паролі або сертифікати).
- Можуть **надійно аутентифікувати себе** на сервері авторизації.
2. **Публічні Клієнти:**
1. **Confidential Clients:**
- Мають власні облікові дані (наприклад, паролі або сертифікати).
- Можуть **securely authenticate themselves** до authorization server.
2. **Public Clients:**
- Не мають унікальних облікових даних.
- Не можуть надійно аутентифікуватися на сервері авторизації.
- **Безпекове Значення:** Зловмисник може видавати себе за публічний клієнтський додаток при запиті токенів, оскільки немає механізму для сервера авторизації, щоб перевірити легітимність додатка.
- Не можуть безпечно аутентифікуватися перед authorization server.
- **Security Implication:** Зловмисник може видавати себе за public client application під час запиту токенів, оскільки authorization server немає механізму для перевірки легітимності додатка.
## Токени Аутентифікації
## Authentication Tokens
Існує **три типи токенів**, що використовуються в OIDC:
- [**Токени Доступу**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Клієнт представляє цей токен серверу ресурсів для **доступу до ресурсів**. Він може використовуватися лише для конкретної комбінації користувача, клієнта та ресурсу і **не може бути відкликаний** до закінчення терміну дії - тобто 1 година за замовчуванням.
- **ID Токени**: Клієнт отримує цей **токен від сервера авторизації**. Він містить основну інформацію про користувача. Він **прив'язаний до конкретної комбінації користувача та клієнта**.
- **Токени Оновлення**: Надаються клієнту разом з токеном доступу. Використовуються для **отримання нових токенів доступу та ID токенів**. Він прив'язаний до конкретної комбінації користувача та клієнта і може бути відкликаний. За замовчуванням термін дії становить **90 днів** для неактивних токенів оновлення та **немає терміну дії для активних токенів** (з токена оновлення можливо отримати нові токени оновлення).
- Токен оновлення повинен бути прив'язаний до **`aud`**, до деяких **обсягів** та до **орендаря**, і він повинен мати можливість генерувати токени доступу лише для цього aud, обсягів (і не більше) та орендаря. Однак це не так для **токенів додатків FOCI**.
- Токен оновлення зашифрований, і лише Microsoft може його розшифрувати.
- Отримання нового токена оновлення не відкликає попередній токен оновлення.
- [**Access Tokens**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** Клієнт предвляє цей токен resource server для **доступу до ресурсів**. Його можна використовувати лише для конкретної комбінації користувача, клієнта та ресурсу і **не можна відкликати** до закінчення терміну дії за замовчуванням це 1 година.
- **ID Tokens**: Клієнт отримує цей **токен від authorization server**. Він містить базову інформацію про користувача. Він **прив'язаний до конкретної комбінації користувача і клієнта**.
- **Refresh Tokens**: Надаються клієнту разом з access token. Використовуються для **отримання нових access та ID токенів**. Вони прив'язані до конкретної комбінації користувача і клієнта та можуть бути відкликані. За замовчуванням термін придатності — **90 днів** для неактивних refresh токенів і **без терміну дії для активних токенів**refresh токена можливо отримувати нові refresh токени).
- Refresh token має бути прив'язаний до **`aud`**, до певних **scopes**, і до **tenant**, і він повинен мати можливість генерувати access tokens лише для того aud, scopes (і не більше) та tenant. Однак це не завжди так для **FOCI applications tokens**.
- Refresh token зашифрований і лише Microsoft може його розшифрувати.
- Отримання нового refresh token не відкликає попередній refresh token.
> [!WARNING]
> Інформація для **умовного доступу** **зберігається** всередині **JWT**. Тому, якщо ви запитуєте **токен з дозволеної IP-адреси**, ця **IP** буде **збережена** в токені, і тоді ви зможете використовувати цей токен з **недозволеної IP для доступу до ресурсів**.
> Інформація для **conditional access** **зберігається** всередині **JWT**. Тому, якщо ви запитали **token з дозволеної IP-адреси**, ця **IP** буде **записана** в токен, і потім ви зможете використовувати цей токен з **недозволеної IP для доступу до ресурсів**.
### Токени Доступу "aud"
### Access Tokens "aud"
Поле, вказане в полі "aud", є **сервером ресурсів** (додатком), що використовується для виконання входу.
Поле, вказане у полі "aud", — це **resource server** (додаток), що використовується для виконання логіну.
Команда `az account get-access-token --resource-type [...]` підтримує такі типи, і кожен з них додасть конкретний "aud" у результативний токен доступу:
Команда `az account get-access-token --resource-type [...]` підтримує наступні типи, і кожен з них додасть конкретний "aud" у отриманий access token:
> [!CAUTION]
> Зверніть увагу, що наступні - це лише API, підтримувані `az account get-access-token`, але є й інші.
> Зверніть увагу, що наведені нижче — лише API, які підтримує `az account get-access-token`, але їх більше.
<details>
<summary>приклади aud</summary>
<summary>aud examples</summary>
- **aad-graph (Azure Active Directory Graph API)**: Використовується для доступу до застарілого Azure AD Graph API (депрецований), який дозволяє додаткам читати та записувати дані каталогу в Azure Active Directory (Azure AD).
- **aad-graph (Azure Active Directory Graph API)**: Використовується для доступу до застарілого Azure AD Graph API (deprecated), який дозволяє додаткам читати та записувати дані каталогу в Azure Active Directory (Azure AD).
- `https://graph.windows.net/`
* **arm (Azure Resource Manager)**: Використовується для управління ресурсами Azure через API Azure Resource Manager. Це включає операції, такі як створення, оновлення та видалення ресурсів, таких як віртуальні машини, облікові записи зберігання тощо.
* **arm (Azure Resource Manager)**: Використовується для керування ресурсами Azure через Azure Resource Manager API. Це включає операції створення, оновлення та видалення ресурсів, таких як віртуальні машини, облікові записи сховища тощо.
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: Використовується для доступу до Azure Batch, сервісу, який дозволяє ефективно виконувати великомасштабні паралельні та високопродуктивні обчислювальні програми в хмарі.
- **batch (Azure Batch Services)**: Використовується для доступу до Azure Batch, сервісу, що дозволяє ефективно виконувати великомасштабні паралельні та високопродуктивні обчислювальні задачі в хмарі.
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: Використовується для взаємодії з Azure Data Lake Storage Gen1, який є масштабованим сервісом зберігання даних та аналітики.
* **data-lake (Azure Data Lake Storage)**: Використовується для взаємодії з Azure Data Lake Storage Gen1, масштабованим сервісом зберігання та аналітики даних.
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: Використовується для доступу до Azure Media Services, які надають хмарні послуги обробки та доставки медіа для відео та аудіо контенту.
- **media (Azure Media Services)**: Використовується для доступу до Azure Media Services, які надають хмарні сервіси для обробки та доставки медіаконтенту (відео та аудіо).
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Використовується для доступу до Microsoft Graph API, єдиного кінцевого пункту для даних сервісів Microsoft 365. Це дозволяє отримувати дані та інсайти з таких сервісів, як Azure AD, Office 365, Enterprise Mobility та Security services.
* **ms-graph (Microsoft Graph API)**: Використовується для доступу до Microsoft Graph API — уніфікованої точки доступу до даних сервісів Microsoft 365. Дозволяє отримувати доступ до даних і аналітики з таких сервісів, як Azure AD, Office 365, Enterprise Mobility та Security services.
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: Використовується для доступу до сервісів бази даних Azure для відкритих реляційних баз даних, таких як MySQL, PostgreSQL та MariaDB.
- **oss-rdbms (Azure Open Source Relational Databases)**: Використовується для доступу до сервісів баз даних Azure для open-source реляційних рушіїв, таких як MySQL, PostgreSQL і MariaDB.
- `https://ossrdbms-aad.database.windows.net`
</details>
### Обсяги Токенів Доступу "scp"
### Access Tokens Scopes "scp"
Обсяг токена доступу зберігається всередині ключа scp всередині JWT токена доступу. Ці обсяги визначають, до чого має доступ токен доступу.
Сфера (scope) access token зберігається в ключі scp всередині JWT access token. Ці scopes визначають, до чого має доступ access token.
Якщо JWT дозволено контактувати з конкретним API, але **не має обсягу** для виконання запитуваної дії, він **не зможе виконати дію** з цим JWT.
Якщо JWT дозволено звертатися до певного API, але **він не має scope** для виконання запитуваної дії, то **він не зможе виконати цю дію** з цим JWT.
### Приклад отримання токена оновлення та доступу
### Get refresh & access token example
```python
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
@@ -106,7 +106,7 @@ from typing import Any, Dict, List
# LOGIN VIA CODE FLOW AUTHENTICATION
azure_cli_client = msal.PublicClientApplication(
"04b07795-8ddb-461a-bbee-02f9e1bf7b46" # ID for Azure CLI client
"00b41c95-dab0-4487-9791-b9d2c32c80f2" # ID for Office 365 Management
)
device_flow = azure_cli_client.initiate_device_flow(
scopes=["https://graph.microsoft.com/.default"]
@@ -146,29 +146,29 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
### Інші поля токена доступу
- **appid**: Ідентифікатор програми, що використовується для генерації токена
- **appidacr**: Посилання на клас контексту автентифікації програми вказує, як клієнт був автентифікований, для публічного клієнта значення дорівнює 0, а якщо використовується секрет клієнта, значення дорівнює 1
- **acr**: Заява про клас контексту автентифікації є "0", коли автентифікація кінцевого користувача не відповідала вимогам ISO/IEC 29115.
- **amr**: Метод автентифікації вказує, як токен був автентифікований. Значення “pwd” вказує на те, що був використаний пароль.
- **groups**: Вказує на групи, в яких є членом принципал.
- **iss**: Видавець ідентифікує службу безпеки токенів (STS), яка згенерувала токен. наприклад, https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid - це ідентифікатор орендаря)
- **oid**: Ідентифікатор об'єкта принципала
- **tid**: Ідентифікатор орендаря
- **iat, nbf, exp**: Дата видачі (коли він був виданий), Не раніше (не може бути використаний до цього часу, зазвичай таке ж значення, як і iat), Час закінчення терміну дії.
- **appid**: Ідентифікатор застосунку, використаний для генерації токена
- **appidacr**: The Application Authentication Context Class Reference вказує, як був аутентифікований клієнт; для публічного клієнта значення 0, а якщо використовується client secret — значення 1
- **acr**: The Authentication Context Class Reference claim дорівнює "0", коли аутентифікація кінцевого користувача не відповідала вимогам ISO/IEC 29115.
- **amr**: Метод аутентифікації вказує, як було автентифіковано токен. Значення “pwd” означає, що використано пароль.
- **groups**: Вказує групи, у яких принципал є учасником.
- **iss**: Issuer ідентифікує security token service (STS), яка згенерувала токен. наприклад https://sts.windows.net/fdd066e1-ee37-49bc-b08f-d0e152119b04/ (uuid це tenant ID)
- **oid**: Object ID принципала
- **tid**: Tenant ID
- **iat, nbf, exp**: Issued at (коли було видано), Not before (не можна використовувати до цього часу, зазвичай те саме значення, що і iat), Expiration time.
## Підвищення привілеїв токенів FOCI
## FOCI Tokens Privilege Escalation
Раніше згадувалося, що токени оновлення повинні бути прив'язані до **областей**, з якими вони були згенеровані, до **програми** та **орендаря**, для яких вони були згенеровані. Якщо будь-яка з цих меж буде порушена, можливо підвищити привілеї, оскільки буде можливим генерувати токени доступу до інших ресурсів і орендарів, до яких користувач має доступ, і з більшою кількістю областей, ніж це було спочатку передбачено.
Раніше згадувалося, що refresh tokens повинні бути прив'язані до **scopes**, з якими вони були згенеровані, до **application** та **tenant**, для яких вони були створені. Якщо будь-який з цих кордонів буде порушений, можлива ескалація привілеїв, оскільки стане можливим генерувати access tokens для інших ресурсів і tenant-ів, до яких має доступ користувач, і з більшою кількістю scopes, ніж було задумано спочатку.
Більше того, **це можливо з усіма токенами оновлення** в [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (облікові записи Microsoft Entra, особисті облікові записи Microsoft та соціальні облікові записи, такі як Facebook і Google), оскільки, як зазначають [**документи**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Токени оновлення прив'язані до комбінації користувача та клієнта, але **не прив'язані до ресурсу або орендаря**. Клієнт може використовувати токен оновлення для отримання токенів доступу **по будь-якій комбінації ресурсу та орендаря**, де він має на це дозвіл. Токени оновлення зашифровані, і лише платформа ідентичності Microsoft може їх читати."
До того ж, це можливо з усіма refresh tokens в [Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/) (Microsoft Entra accounts, Microsoft personal accounts, and social accounts like Facebook and Google), оскільки, як згадують [**docs**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens): "Refresh tokens are bound to a combination of user and client, but **aren't tied to a resource or tenant**. A client can use a refresh token to acquire access tokens **across any combination of resource and tenant** where it has permission to do so. Refresh tokens are encrypted and only the Microsoft identity platform can read them."
Крім того, зверніть увагу, що програми FOCI є публічними програмами, тому **секрет не потрібен** для автентифікації на сервері.
Крім того, зауважте, що FOCI applications — це public applications, тому **no secret is needed** для автентифікації на сервері.
Тоді відомі клієнти FOCI, про які повідомлялося в [**оригінальному дослідженні**](https://github.com/secureworks/family-of-client-ids-research/tree/main), можуть бути [**знайдені тут**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
Відомі FOCI клієнти, зазначені в [**original research**](https://github.com/secureworks/family-of-client-ids-research/tree/main), можна [**found here**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv).
### Отримати різну область
### Get different scope
Продовжуючи з попереднього прикладу коду, у цьому коді запитується новий токен для іншої області:
Продовжуючи попередній приклад коду, у цьому коді запитується новий токен для іншого scope:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (
@@ -185,7 +185,7 @@ scopes=[
)
pprint(azure_cli_bearer_tokens_for_outlook_api)
```
### Отримати різні клієнти та області
### Отримати іншого клієнта та області доступу (scopes)
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
microsoft_office_client = msal.PublicClientApplication("d3590ed6-52b3-4102-aeff-aad2292ab01c")
@@ -203,25 +203,26 @@ pprint(microsoft_office_bearer_tokens_for_graph_api)
```
## Де знайти токени
З точки зору атакуючого, дуже цікаво знати, де можна знайти токени доступу та оновлення, коли, наприклад, ПК жертви скомпрометовано:
З точки зору атакуючого дуже цікаво знати, де можна знайти access і refresh токени, наприклад коли ПК жертви скомпрометовано:
- Всередині **`<HOME>/.Azure`**
- **`azureProfile.json`** містить інформацію про користувачів, які входили в систему раніше
- **`clouds.config` містить** інформацію про підписки
- **`service_principal_entries.json`** містить облікові дані додатків (ідентифікатор орендаря, клієнти та секрет). Тільки в Linux та macOS
- **`msal_token_cache.json`** містить токени доступу та токени оновлення. Тільки в Linux та macOS
- **`service_principal_entries.bin`** та **`msal_token_cache.bin`** використовуються в Windows і зашифровані за допомогою DPAPI
- **`msal_http_cache.bin`** є кешем HTTP запитів
- Завантажте його: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** містить інформацію про попередні входи за допомогою Az PowerShell (але без облікових даних)
- Всередині **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** є кілька `.bin` файлів з **токенами доступу**, ID токенами та інформацією про облікові записи, зашифрованими за допомогою DPAPI користувача.
- Можна знайти більше **токенів доступу** у файлах `.tbres` всередині **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**, які містять base64 зашифровані за допомогою DPAPI токени доступу.
- У Linux та macOS ви можете отримати **токени доступу, токени оновлення та ID токени** з Az PowerShell (якщо використовувався), запустивши `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- У Windows це просто генерує ID токени.
- Можна перевірити, чи використовувався Az PowerShell в Linux та macOS, перевіривши, чи існує `$HOME/.local/share/.IdentityService/` (хоча вміст файлів порожній і марний)
- Якщо користувач **увійшов в Azure через браузер**, відповідно до цього [**посту**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web), можливо, розпочати процес аутентифікації з **перенаправленням на localhost**, змусити браузер автоматично авторизувати вхід і отримати токен оновлення. Зверніть увагу, що є лише кілька FOCI додатків, які дозволяють перенаправлення на localhost (як az cli або модуль PowerShell), тому ці додатки повинні бути дозволені.
- **`azureProfile.json`** містить інформацію про користувачів, які виконували вхід раніше
- **`clouds.config contains`** містить інформацію про підписки
- **`service_principal_entries.json`** містить облікові дані застосунків (tenant id, clients і secret). Тільки в Linux & macOS
- **`msal_token_cache.json`** містить access tokens і refresh tokens. Тільки в Linux & macOS
- **`service_principal_entries.bin`** and msal_token_cache.bin використовуються в Windows і зашифровані за допомогою DPAPI
- **`msal_http_cache.bin`** кеш HTTP-запитів
- Завантажити його: `with open("msal_http_cache.bin", 'rb') as f: pickle.load(f)`
- **`AzureRmContext.json`** містить інформацію про попередні входи з використанням Az PowerShell (але без облікових даних)
- Всередині **`C:\Users\<username>\AppData\Local\Microsoft\IdentityCache\*`** є кілька `.bin` файлів з **access tokens**, ID tokens та інформацією про акаунти, зашифрованою за допомогою DPAPI користувача.
- Можна знайти більше **access tokens** у `.tbres` файлах всередині **`C:\Users\<username>\AppData\Local\Microsoft\TokenBroken\Cache\`**, які містять base64, зашифрований DPAPI, з access tokens.
- На Linux та macOS можна отримати **access tokens, refresh tokens і id tokens** з Az PowerShell (якщо використовується), запустивши `pwsh -Command "Save-AzContext -Path /tmp/az-context.json"`
- У Windows це генерує лише id tokens.
- Можна перевірити, чи використовувався Az PowerShell на Linux та macSO, перевіривши, чи існує `$HOME/.local/share/.IdentityService/` (хоча вміст файлів порожній і марний)
- Якщо користувач **увійшов в Azure через браузер**, згідно з цим [**постом**](https://www.infosecnoodle.com/p/obtaining-microsoft-entra-refresh?r=357m16&utm_campaign=post&utm_medium=web) можна запустити authentication flow з **redirect to localhost**, змусити браузер автоматично авторизувати вхід і отримати refresh token. Зауважте, що лише декілька FOCI applications дозволяють redirect на localhost (наприклад az cli або the powershell module), тому ці додатки мають бути дозволені.
- Інший варіант, описаний у блозі — використати інструмент [**BOF-entra-authcode-flow**](https://github.com/sudonoodle/BOF-entra-authcode-flow), який може використовувати будь-який додаток, оскільки він **отримає OAuth код, а потім отримає a refresh token з title фінальної auth сторінки**, використовуючи redirect URI `https://login.microsoftonline.com/common/oauth2/nativeclient`.
## Посилання
## References
- [https://github.com/secureworks/family-of-client-ids-research](https://github.com/secureworks/family-of-client-ids-research)
- [https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md](https://github.com/Huachao/azure-content/blob/master/articles/active-directory/active-directory-token-and-claims.md)