SynologySSOサーバー-サイトからの承認およびアクセスサービスを管理します

少し前に、クライアントの商業上の秘密を保護するために、サードパーティのクラウドサービスの使用を拒否するという課題に直面しました。



最初で最も論理的なことは、すでに利用可能な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を介してクライアント側で行われ、何らかの理由でユーザーが承認されたことが検出されず、動作も非常に遅くなりました。したがって、私は自分自身の解決策を見つけなければなりませんでしたが、それははるかに短くて単純であることがわかりました。



それが他の誰かに役立つなら私はうれしいです。



All Articles