> For the complete documentation index, see [llms.txt](https://b-docs.gitbook.io/bsims/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://b-docs.gitbook.io/bsims/sso.md).

# SSO

Sebelum lanjut menggunakan SSO B-Sims, Aplikasi Client diharapkan menginformasikan **data-data dibawah untuk kebutuhan integrasi** :&#x20;

| Nama          | Tipe                                          | Keterangan                                                                                                                                                      |
| ------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| client\_name  | <mark style="color:red;">**required**</mark>  | Nama Aplikasi Client.                                                                                                                                           |
| redirect\_url | <mark style="color:red;">**required**</mark>  | URL Redirect yang akan digunakan ketika user berhasil login. URL ini akan berisi **`token`** parameter yang akan di consume untuk mendapatakan data user login. |
| description   | <mark style="color:blue;">**optional**</mark> | Deskripsi dari Aplikasi Client                                                                                                                                  |
| policy\_url   | <mark style="color:blue;">**optional**</mark> | URL untuk info yang terkait ***kebijakan privasi*** yang di sediakan oleh aplikasi client.                                                                      |
| service\_url  | <mark style="color:blue;">**optional**</mark> | URL untuk info yang terkait ***persyaratan layanan*** yang di sediakan oleh aplikasi client.                                                                    |
| logo\_url     | <mark style="color:blue;">**optional**</mark> | URL menampilkan logo dari aplikasi client. Logo aplikasi client akan muncul di halaman SSO Login.                                                               |

## Langkah-langkah Mengakses SSO B-Sims

#### 1. Mendapatkan CLIENT\_ID

Sebelum memulai, aplikasi client harus mendapatkan **`CLIENT_ID`** yang valid. **`CLIENT_ID`** ini akan diberikan oleh penyedia layanan SSO dalam hal ini **PDSI BP Batam** dengan bersurat ke **BUP BP Batam** saat aplikasi client didaftarkan.

#### 2. Login

Setelah mendapatkan **`CLIENT_ID`** , aplikasi client dapat mengakses URL login SSO dengan menambahkan **`CLIENT_ID`** ke akhir URL. Contoh:

{% tabs %}
{% tab title="JavaScript" %}

```javascript
let APP_ID = 'your_client_id'; // ganti dengan CLIENT_ID Anda
let loginUrl = `https://b-sims.bpbatam.go.id/sso/access/login/${CLIENT_ID }`;
window.location.href = loginUrl; // mengarahkan user ke halaman login SSO
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$APP_ID = 'your_app_id'; // ganti dengan APP_ID Anda
$loginUrl = "https://b-sims.bpbatam.go.id/sso/access/login/" . $APP_ID;
header("Location: " . $loginUrl); // mengarahkan user ke halaman login SSO
exit();
?>

```

{% endtab %}
{% endtabs %}

Harap ganti `'your_client_id'` dengan `CLIENT_ID` Anda. Kode ini akan mengarahkan user ke halaman login SSO. Pastikan untuk menempatkan kode ini di tempat yang tepat dalam aplikasi Anda (Tidak Menggunakan API).

<figure><img src="/files/NE1aZFDLN9FTFK3eDfI2" alt=""><figcaption><p>Halaman Login SSO bSIMS</p></figcaption></figure>

#### 3. Mendapatkan Data User Login

Setelah user berhasil login, mereka akan diarahkan kembali ke aplikasi client dengan `jwt_token` di URL.

Contoh Redirect URL: `https://yourapp.com?token=`**`JWT_TOKEN`**.&#x20;

Aplikasi client dapat menggunakan `jwt_token` ini untuk mengakses data user login melalui URL `https://b-sims.bpbatam.go.id/sso/access/success` , dengan menambahkan `Authorization Bearer` pada header Request. Contoh :

{% tabs %}
{% tab title="JavaScript" %}

```javascript
let jwt_token = 'your_jwt_token'; // ganti dengan jwt_token Anda
let userDataUrl = 'https://b-sims.bpbatam.go.id/sso/access/success';

fetch(userDataUrl, {
  headers: {
    'Authorization': `Bearer ${jwt_token}`
  }
})
.then(response => response.json())
.then(data => console.log(data)); // data user login
```

{% endtab %}

{% tab title="PHP" %}

```php
<?php
$jwt_token = 'your_jwt_token'; // ganti dengan jwt_token Anda
$userDataUrl = 'https://b-sims.bpbatam.go.id/sso/access/success';

$ch = curl_init($userDataUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Authorization: Bearer ' . $jwt_token
]);

$response = curl_exec($ch);

if ($response !== FALSE) {
    $data = json_decode($response);
    print_r($data); // data user login
}

curl_close($ch);
?>

```

{% endtab %}
{% endtabs %}

Harap ganti `'your_jwt_token'` dengan `jwt_token` Anda. Kode ini akan mengambil data user login dari SSO menggunakan REST API SSO B-sims.

Contoh Response :

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
    "status_code": 200,
    "status": "success",
    "message": "success",
    "data": {
        "name": "xxxx",
        "username": "xxxxx",
        "email": "xxxxxx@gmail.com",
        "nik": "323123412313123",
        "company": {
            "comp_cd": "xxxx",
            "comp_nm": "XXXXX, PT",
            "comp_npwp": "xx.xxx.xxx.x-xxx.xxx",
            "comp_type": "Perusahaan Pelayaran Nasional (PELNAS)"
        }
    }
}
```

{% endtab %}
{% endtabs %}

#### 4. Logout

Untuk logout, aplikasi client dapat mengakses URL `https://b-sims.bpbatam.go.id/sso/access/logout` dengan `jwt_token` sebagai authorization bearer. Contoh:

{% tabs %}
{% tab title="JavaScript" %}

```javascript
let logoutUrl = 'https://b-sims.bpbatam.go.id/sso/access/logout';

fetch(logoutUrl, {
  headers: {
    'Authorization': `Bearer ${jwt_token}`
  }
})
.then(response => console.log('Logged out')); // user telah logout

```

{% endtab %}

{% tab title="PHP" %}

```php
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'https://b-sims.bpbatam.go.id/sso/access/logout',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_HTTPHEADER => array(
    'Accept: application/json',
    'Content-Type: application/json',
    'Authorization: Bearer xxxx,
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

```

{% endtab %}
{% endtabs %}

{% hint style="danger" %}
Jika menggunakan REST API pada saat logout, pastikan user di **redirect** ke halaman logout/base dari B-Sims atau Aplikasi Client.
{% endhint %}

***

**Contoh Akses Menggunakan REST API.**

**Headers**

| Name          | Value              |
| ------------- | ------------------ |
| Content-Type  | `application/json` |
| Authorization | `Bearer <token>`   |

**Response**

{% tabs %}
{% tab title="200" %}

```json
{
    "status_code": 200,
    "status": "success",
    "message": "Logout Success.",
    "data": null
}
```

{% endtab %}
{% endtabs %}

***

#### Closure

Harap dicatat bahwa ini adalah contoh dasar dan mungkin perlu disesuaikan sesuai dengan kebutuhan dan lingkungan aplikasi client. Selalu pastikan untuk menangani kesalahan dan pengecualian (contoh: menambahkan **`Try Catch Block`**) yang mungkin terjadi selama proses ini.
