> For the complete documentation index, see [llms.txt](https://docs.payswap.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.payswap.org/russkii/use-cases/ssi/single-sign-on.md).

# Единая точка входа

Единый вход (SSO) - это метод аутентификации, который позволяет пользователям безопасно аутентифицироваться в нескольких приложениях и веб-сайтах, используя только один набор учетных данных.

## Как это работает?

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

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

Чтобы получить SSID из токена идентификации, вам нужно будет запросить функцию **metadata** контракта SSI, в которую вы передаете идентификатор токена идентификации

```solidity
// Пример кода
ISSI(ssiContract).metadata(identity_token_id)
```

Это вернет объект метаданных в следующем формате

```solidity
struct SSIData {
    uint senderProfileId;
    uint receiverProfileId;
    uint auditorProfileId;
    uint deadline;
    string question;
    string answer;
    ProofType proofType;
}
```

Чтобы получить фактический SSID, вы получите переменную answer после проверки, что вопрос действительно является SSID

```solidity
// Полный код
function getSSID(uint _identity_token_id) external returns(string memory) {
    SSIData memory data = ISSI(ssiContract).metadata(identity_token_id)
    require(keccak256(abi.encodePacked(data.question)) == keccak256(abi.encodePacked("ssid")))
    return data.answer
}
```

Вы будете использовать данные SSID ваших пользователей, собранные из их токенов идентификации, в качестве их идентификаторов и входить в систему после быстрой проверки.
