最初で最も論理的なことは、すでに利用可能なSynologyへのアクセスを提供することです。
そして、別のユーザー名/パスワードではなく、個人アカウントから以前に発行されたものを使用して、それを美しくやりたいという願望がありました。個人アカウントからSynologyサービスへのシームレスな移行が必要です。
カットの下の説明とスクリプト。
さらに作業を進めるには、LDAPサーバーとSSOサーバーをインストールする必要があります。
SSOサーバーは、Synology独自のOAuth2.0実装です。
LDAPを構成して目的のユーザーを作成し、そのユーザーのサービスへのアクセス権を設定します。
次に、サイトにインストールした、私が作成したphpスクリプトが動作します。大きくはなく、GitHubで入手できます。
彼にとっては簡単です。/ myフォルダのサイトにダウンロードして配置します。
でconfig.phpをあなた自身に次の値を交換する必要があります。
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-SSOサーバーに登録するときに、次のステップで取得します
- SSO_HOST-Synologyにアクセスするためのホストアドレス
- LOCAL_HOST-スクリプトが配置されているサイトのアドレス
- REDIRECT_URI-SSO_Oauth.phpスクリプトを使用できるアドレス
index.php(場所が示されている)は、ユーザが正常にログインした後、さらに、ロジックまたはリダイレクトを加えます。
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';
?>
さて、リクエスト処理スクリプト自体:
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>
次に、SSOサーバーを介してサイトの認証をバインドする必要があります。すべてが非常に単純です-SSOサーバーを開く>アプリケーションリスト>追加> SSO_Oauth.phpスクリプトに名前とURIアドレスを入力します。 「OK」をクリックすると、アプリケーションIDが生成されます。コピーして、config.php> APP_IDに配置する必要があります。
したがって、ユーザーがSSOを介してサイトで承認されている場合、LDAPでアクセスできるSynologyサービスへのリンクをクリックしても、再承認する必要はありません。これは反対の方向にも当てはまります。彼があなたのクラウドで承認されている場合は、サイトの個人アカウントも利用できます。
実装はそれほど単純ではないことが判明しました。ネットワーク上のこのAPIに関するガイドはSynologySSO APIガイドの1つだけでしたが、すべてがajaxを介してクライアント側で行われ、何らかの理由でユーザーが承認されたことが検出されず、動作も非常に遅くなりました。したがって、私は自分自身の解決策を見つけなければなりませんでしたが、それははるかに短くて単純であることがわかりました。
それが他の誰かに役立つなら私はうれしいです。