> 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/bahasa-indonesia/use-cases/ssi/single-sign-on.md).

# Sistem Masuk Tunggal

Single sign-on (SSO) adalah metode autentikasi yang memungkinkan pengguna untuk mengautentikasi dengan aman pada beberapa aplikasi dan situs web dengan menggunakan hanya satu set kredensial.

## Bagaimana cara kerjanya?

Anda meminta pengguna membuat SSID (Single Sign-On ID) serta token identitas dari SSID tersebut. Untuk masuk ke layanan Anda, mereka hanya perlu memasukkan ID dari token identitas.

Di latar belakang, Anda memeriksa bahwa token identitas (yang merupakan NFT) benar-benar milik pengguna dan jika iya, mendapatkan SSID dari token identitas.

Untuk mendapatkan SSID dari token identitas, Anda harus melakukan kueri pada fungsi **metadata** dari kontrak SSI (Single Sign-On Identity) yang membutuhkan ID token identitas.

```solidity
// Contoh kode
ISSI(ssiContract).metadata(identity_token_id)
```

Ini akan mengembalikan objek metadata dengan format berikut.

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

Untuk mendapatkan SSID sebenarnya, Anda akan mendapatkan variabel jawaban setelah memverifikasi bahwa pertanyaannya benar-benar SSID.

```solidity
// Kode lengkap
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
}
```

Anda akan menggunakan data SSID pengguna yang dikumpulkan dari token identitas mereka sebagai pengenal mereka dan masuk setelah Anda melakukan pemeriksaan cepat tersebut.
