Synology SSO Serverで純正WebアプリとコンテナアプリにSSOを実現する方法 | masao-Tec-blog

Synology SSO Serverで純正WebアプリとコンテナアプリにSSOを実現する方法

Synology NAS 応用

近年、業務アプリケーションやコンテナアプリが増える中、ユーザー管理やログインの手間が課題になっています。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用の認証Cookieyourdomainmameドメインで生成され、複数Webアプリ間でSSOが可能となります。

3-2.Synology純正Webアプリのエイリアス設定

  1. DSMコントロールパネル]>[ログインポータル]を開く
  2. アプリケーション]タブを選択
  3. 各アプリケーションにエイリアスを設定
    • 例:notefile
  4. 設定を保存

4.アプリケーション設定(Webアプリ)

ここでは、非純正WebアプリにSynology SSO Serverによる認証を付与する事例として、PortainerおよびGrafanaに設定を組み込む方法を紹介します。

4-1.SSOアプリケーション登録

事前にPortainerGrafanaの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環境が構築できます。

ポイント

  1. 同一ドメインに統一すること。
    • エイリアス機能でやに統一
  2. ログアウト機能は純正Webアプリから行う。
    • SSO Serverにはログアウト用エンドポイントがないため、コンテナ単独では不可

これで、ユーザーは一度の認証で複数アプリにアクセス可能となり、利便性とセキュリティが向上します。