Hal pertama dan paling logis adalah memberi mereka akses ke Synology yang sudah tersedia.
Dan kemudian ada keinginan untuk melakukannya dengan indah, bukan dengan nama pengguna / kata sandi yang terpisah, tetapi menggunakan yang sudah dikeluarkan sebelumnya dari akun pribadi. Transisi yang mulus dari akun pribadi Anda ke layanan Synology adalah yang Anda butuhkan.
Deskripsi dan naskah di bawah potongan.
Untuk pekerjaan lebih lanjut, kami memerlukan Server LDAP dan Server SSO yang diinstal.
SSO Server adalah implementasi OAuth2.0 milik Synology.
Kami mengkonfigurasi LDAP dan membuat pengguna yang diinginkan, mengatur hak akses ke layanan untuknya.
Kemudian skrip php yang saya tulis, yang kami instal di situs, mulai beroperasi. Itu tidak besar dan tersedia di GitHub .
Sederhana saja dengannya. Unduh dan tempatkan di situs di / folder saya.
Di config.php Anda perlu mengganti nilai berikut dengan milik Anda:
config.php
<?php
define('APP_ID', 'a8d0f0835eda3517f3e8fd70c10500e7');
define('SSO_HOST', 'https://DSM:5001');
define('LOCAL_HOST', 'https://yourwebsite.ru');
define('REDIRECT_URI', 'https://yourwebsite.ru/my/SSO_Oauth.php');
?>
- APP_ID - Anda akan mendapatkannya di langkah berikutnya, saat mendaftar dengan SSO Server
- SSO_HOST - Alamat host untuk mengakses Synology
- LOCAL_HOST - alamat situs tempat skrip berada
- REDIRECT_URI - alamat tempat skrip SSO_Oauth.php tersedia
Dalam index.php (tempat yang ditunjukkan) tambahkan logika atau pengalihan lebih lanjut setelah pengguna berhasil masuk.
index.php
<?php
session_start();
include_once('config.php');
if (!isset($_SESSION['user_id'])) {
header('location: '.SSO_HOST.'/webman/sso/SSOOauth.cgi?app_id='.APP_ID.'&scope=user_id&redirect_uri='.REDIRECT_URI);
}
if (isset($_GET['logout'])) {
unset($_SESSION['user_id']);
header('location: '.LOCAL_HOST);
}
// here we can do something after login
echo 'User ID:'.$_SESSION['user_id'].' logged in';
?>
Nah, skrip pemrosesan permintaan itu sendiri:
SSO_Oauth.php
<?php
session_start();
include_once('config.php');
if (isset($_GET['access_token'])) {
$access_token = $_GET['access_token'];
$resp = file_get_contents(SSO_HOST.'/webman/sso/SSOAccessToken.cgi?action=exchange&access_token='.$access_token.'&app_id='.APP_ID);
$json_resp = json_decode($resp, true);
if($json_resp['success'] == true){
$_SESSION['user_id'] = $json_resp["data"]["user_id"];
header('location: '.LOCAL_HOST.'/my/');
}
exit();
}
?>
<html>
<body>
<script>
var get = window.location.hash.substr(1);
if (get) {
window.location.href = "<?=REDIRECT_URI?>?" + get;
}
</script>
</body>
</html>
Selanjutnya, Anda perlu mengikat otorisasi di situs melalui Server SSO. Semuanya cukup sederhana di dalamnya - Buka SSO Server > Application List > Add > Masukkan nama dan alamat URI ke skrip SSO_Oauth.php. Setelah mengklik "Ok", ID aplikasi akan dibuat . Ini perlu disalin dan ditempatkan di config.php> APP_ID kami .
Jadi, jika pengguna diotorisasi di situs Anda melalui SSO, lalu mengklik link ke salah satu layanan Synology yang aksesnya dia miliki di LDAP, dia tidak perlu melakukan otorisasi ulang. Ini benar dalam arah yang berlawanan - jika dia diberi otorisasi di cloud Anda, maka akun pribadi di situs juga akan tersedia.
Penerapannya ternyata tidak sesederhana itu. Saya hanya menemukan satu panduan tentang API ini di jaringan - Panduan API SSO Synology, tetapi semuanya dilakukan di sisi klien melalui ajax dan untuk beberapa alasan tidak terdeteksi bahwa pengguna diberi otorisasi, dan itu juga bekerja sangat lambat. Oleh karena itu, saya harus mencari solusi saya sendiri, tetapi ternyata jauh lebih pendek dan sederhana.
Saya akan senang jika itu berguna untuk orang lain.