近年、業務アプリケーションやコンテナアプリが増える中、ユーザー管理やログインの手間が課題になっています。Synology SSO Serverを活用すると、1回のログインで複数のアプリケーションにアクセスできるシングルサインオン(SSO)環境を構築できます。本記事では、Synology SSO Serverを使って、File StationやNote Station、PhotosなどのSynology純正Webアプリと、PortainerやGrafanaなどのコンテナアプリでSSOを実現する手順を紹介します
前提 本記事でのDSM(OS)バージョンはSynology DSM 7.2を用いています。
1.Synology SSO Serverとは
Synology SSO Serverは、OpenID Connect(OIDC)、SAML、Synology独自のSSOなどをサポートする認証サービスです。
これを利用することで、ユーザーは複数のアプリケーションに対して一度のログインでアクセスでき、利便性とセキュリティが向上します。
特にSynology MailPlusなどのSynology NAS上のパッケージ向けには、OAuth 2.0フレームワークをベースにしたユーザー認証を提供しています。
2.Synology SSO Serverのインストールと全般設定
2-1.インストール
Synology NASの「パッケージセンター」を開き、Synology SSO Serverをインストールします。

2-2.全般設定
メニューより「SSO Server」を起動し、[全般設定]を選択します。
- アカウントタイプ:[ドメイン/LDAP/ローカル]を選択します。(DSMのローカルアカウントで認証を行う場合)
- サーバURL:「DSMのドメイン名/sso]とします。(後述するエイリアス設定と一致化させる)
※)本記事ではDSMにアクセスするドメイン名を全て[yourdomainname]で表現しているので、実際の設定時には各自のドメイン名に置き換えてください。

[ログイン設定]の[設定]ボタンをクリックします。
- エイリアス:[sso] を入力します。(ログイン先URLが前述のサーバURLと一致する)
設定が終わったら[保存]をクリックして確定させる。

2-3.OIDCサーバの有効化
- [サービス]設定でOIDCサーバを有効にするにチェック

- Well-known URLにアクセスすると以下のJSON情報が取得可能
{
"authorization_endpoint" : "https://yourdomainname/sso/webman/sso/SSOOauth.cgi",
"claims_supported" : [ "aud", "email", "exp", "groups", "iat", "iss", "sub", "username" ],
"code_challenge_methods_supported" : [ "S256", "plain" ],
"grant_types_supported" : [ "authorization_code", "implicit" ],
"id_token_signing_alg_values_supported" : [ "RS256" ],
"issuer" : "https://yourdomainname/sso/webman/sso",
"jwks_uri" : "https://yourdomainname/sso/webman/sso/openid-jwks.json",
"response_types_supported" : [ "code", "code id_token", "id_token", "id_token token" ],
"scopes_supported" : [ "email", "groups", "openid" ],
"subject_types_supported" : [ "public" ],
"token_endpoint" : "https://yourdomainname/sso/webman/sso/SSOAccessToken.cgi",
"token_endpoint_auth_methods_supported" : [ "client_secret_basic", "client_secret_post" ],
"userinfo_endpoint" : "https://yourdomainname/sso/webman/sso/SSOUserInfo.cgi"
}
3.同一ドメイン制約とエイリアス設定のポイント
Synology SSO Serverは 同一ドメイン内でのみSSOが有効 という制約があります。
例:AAA.yourdomainname と BBB.yourdomainnameは別ドメイン扱いでSSOは効きません。これはSynology純正Webアプリでも同様です。

3-1.エイリアスで同一ドメインに統一
エイリアスを使ってすべてのアプリを同一ドメインにまとめます。
- Synology純正Webアプリ設定例
- yourdomainmame/note(note Station)
- yourdomainname/file(file Station)
- SSO Server
- yourdomainname/sso
こうすることでSSO用の認証Cookieがyourdomainmameドメインで生成され、複数Webアプリ間でSSOが可能となります。
3-2.Synology純正Webアプリのエイリアス設定
- [DSMコントロールパネル]>[ログインポータル]を開く
- [アプリケーション]タブを選択
- 各アプリケーションにエイリアスを設定
- 例:note、file
- 設定を保存

4.アプリケーション設定(Webアプリ)
ここでは、非純正WebアプリにSynology SSO Serverによる認証を付与する事例として、PortainerおよびGrafanaに設定を組み込む方法を紹介します。
4-1.SSOアプリケーション登録
事前にPortainerやGrafanaのWebアプリケーションが設定済で、それぞれ以下のURLでアクセス可能となっている前提とします。
- Portainer:https://portainer.yourdomainname
- Grafana:https://grafana.yourdomainname
SSO Server>アプリケーション>追加>OIDCを選択して[次へ]をクリック

アプリケーション名を入力
転送URIを入力します。
- Portainer:https://portainer.yourdomainname
- Grafana:https://grafana.yourdomainname/login/generic_oauth

入力が終わったら[完了]で内容を保存する。
設定後、アプリケーションIDとアプリケーションシークレットを取得する。

4-2.PortainerのOAuth設定
以下のドキュメントに従ってPortainerの設定を行います。
1.[Settings]>[Authentication]を開き、[OAuth]を選択します。

2.設定項目として以下の設定を行います。
- Use SSO:ON
- Automatic user provisioning:ON
ProviderとしてCustom(Custom OAuth provider)を選択し、以下の設定を行います。

- Client ID : SSO Serverで取得したアプリケーションID
- Client Secret : SSO Serverで取得したアプリケーションシークレット
- Authorization URL : authorization_endpoint(※1)
- Access token URL : token_endpoint(※1)
- Resource URL : userinfo_endpoint(※1)
- Redirect URL / Logout URL : PortainerのURL
- User identifier : username
- Scopes :openid email groups
- Auth Style : Auto Detect
(※1)Synology SSO ServerのWell-known URLにアクセスして出力されたJSONより転記します。
3.Save settingで設定を保存します。
4-3.PortainerのSSOログイン動作
PortainerのURLにアクセスすると以下のように[Login with OAuth]というボタンが現れるので、これをクリックします。

そうすると、Synology SSO Serverの認証画面にリダイレクトされるので、SynologyのDSMログインや純正Webアプリと同じ認証(多要素認証設定がされていれば同様に)を行います。

認証が通れば、Portainerの画面が表示されます。
4-4.GrafanaのOAuth設定
以下のドキュメントに従ってGrafanaの設定を行います。
1.Administration > Authentication > Generic OAuth を開く
2.設定項目として以下の設定を行います。

General Settings
- Client ID : SSO Serverで取得したアプリケーションID
- Client Secret : SSO Serverで取得したアプリケーションシークレット
- Auth URL:authorization_endpoint(※2)
- Token URL:token_endpoint(※2)
- API URL:userinfo_endpoint(※2)
- Allow sign up:ON
- Sign out redirect URL:アプリURL
(※2)Synology SSO ServerのWell-known URLを[Enter OpenID Connect Discovery URL]に入力することにより自動転記されます。
User Mapping
- Name attribute path:username(※3)
- Skip organization role sync:ON(※3)
(※3)上記設定でSSO Serverで認証するユーザ名と同じ名称でGrafanaに新規ユーザーが生成されます。よって、Grafanaに同名のローカルアカウントが既にある場合、OAuth認証がエラーとなるため、同名ユーザは予め無い状態にしておく必要があります。
また、新規生成されるユーザのroleはデフォルトのViewer(参照のみ)となるため、いったんローカルアカウントでログインして、新規生成されたアカウントのroleを変更します。
4-5.GrafanaのSSOログイン動作
GrafanaのURLにアクセスすると以下のように[Sign in with OAuth]というボタンが現れるので、これをクリックします。

以降の動作はPortainerの場合と同様です。
5.ログアウトに関する制約
Synology SSO Serverですが、ログアウトエンドポイントがありません。したがって、PornainerやGrafanaなどの非純正アプリでログアウトを行っても、当該Webアプリ自体はログアウトになりますが、Synology SSO自体はログアウトされないため、再度ログイン動作を行っても、Synology SSOの認証画面は表示されません。(Synology SSOはログイン状態のままであるため)
Synology SSO自体もログアウトしたい場合は、Synology純正Webアプリでログアウト(サインアウト)を行う必要があります。これにより、Synology SSOの認証状態がクリアされるため、PornainerやGrafanaなどの非純正アプリで再ログインを行うと、Synology SSOの認証画面が表示されるようになります。
6.まとめ
Synology SSO Serverを利用すると、Synology純正WebアプリやPortainer、GrafanaなどのコンテナアプリでもSSO環境が構築できます。
ポイント
- 同一ドメインに統一すること。
- エイリアス機能でやに統一
- ログアウト機能は純正Webアプリから行う。
- SSO Serverにはログアウト用エンドポイントがないため、コンテナ単独では不可
これで、ユーザーは一度の認証で複数アプリにアクセス可能となり、利便性とセキュリティが向上します。