# 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.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://b-docs.gitbook.io/bsims/sso.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
