web-dev-qa-db-ja.com

SAML、Keycloak、Nextcloudを使用したSSO

KeycloakをIdP(IDプロバイダー)として、Nextcloudをサービスとして設定しようとしています。 SSO(シングルサインオン)ページを表示するようにKeycloakをセットアップします。

Intel互換CPUを搭載したLinuxサーバーを実行しています。正しい構成は何ですか?

9
MadMike

前提条件

この回答を使用するには、domain.comactualドメインownに置き換える必要があります。また、[email protected]を実際の電子メールアドレスに置き換えます。

Dockerおよびdocker-composeがインストールされ、実行されていることを前提としています。

Dockerを使用してサービスをセットアップする

Keycloakとnextcloudに加えて、次を使用します。

  • nginxリバースプロキシとして
  • letsencyrptを使用して、サブドメインのSSL証明書を生成します。

Dockerとdocker-composeを使用して、必要なすべてのサービスを設定しています。 docker-compose.ymlは次のようになります。

version: '2'

  nginx-proxy:
    image: jwilder/nginx-proxy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - "/etc/nginx/vhost.d"
      - "./proxy-default.conf:/etc/nginx/conf.d/my-proxy.default.conf:ro"
      - "/usr/share/nginx/html"
      - "/var/run/docker.sock:/tmp/docker.sock:ro"
      - "./le-cert:/etc/nginx/certs:ro"
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"

  letsencrypt-nginx-proxy-companion:
    image: jrcs/letsencrypt-nginx-proxy-companion
    restart: unless-stopped
    depends_on:
      - nginx-proxy
    container_name: le-proxy-companion
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
      - "./le-cert:/etc/nginx/certs:rw"
    volumes_from:
      - nginx-proxy

  keycloak:
    image: jboss/keycloak
    links:
      - keycloak-postgres:postgres
    ports:
      - 8080:8080
    volumes:
      - ./keycloak:/opt/jboss/keycloak
    environment:
      - KEYCLOAK_USER=admin
      - KEYCLOAK_PASSWORD=admin
      - "PROXY_ADDRESS_FORWARDING=true"
      - VIRTUAL_PORT=8080
      - VIRTUAL_Host=kc.domain.com
      - LETSENCRYPT_Host=kc.domain.com
      - [email protected]

  keycloak-postgres:
    image: postgres
    environment:
      - POSTGRES_DB=keycloak
      - POSTGRES_USER=keycloak
      - POSTGRES_PASSWORD=keycloak

  nextcloud:
    image: hoellen/nextcloud
    environment:
      - UPLOAD_MAX_SIZE=10G
      - APC_SHM_SIZE=128M
      - OPCACHE_MEM_SIZE=128
      - CRON_PERIOD=15m
      - TZ=Europe/Berlin
      - DOMAIN=nc.domain.com
      - ADMIN_USER=admin
      - ADMIN_PASSWORD=admin
      - DB_TYPE=mysql
      - DB_NAME=nextcloud
      - DB_USER=nextcloud
      - DB_PASSWORD=nextcloud
      - DB_Host=nc-db
    volumes:
      - ./nc/nc-data:/data
      - ./nc/nc-config:/config
      - ./nc/nc-apps:/apps2
      - ./nc/nc-themes:/nextcloud/themes
    environment:
      - VIRTUAL_Host=nc.domain.com
      - LETSENCRYPT_Host=nc.domain.com
      - [email protected]

  nc-db:
    image: mariadb
    volumes:
      - ./nc/nc-db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=nextcloud
      - MYSQL_PASSWORD=nextcloud
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

Dockerファイルをdockerフォルダーに配置し、このフォルダー内にプロジェクト固有のフォルダーを配置します。ここでkeycloak。次を使用して作成します。

mkdir -p ~/docker/keycloak

このフォルダーに好みのエディターでdocker-compose.yml- Fileを作成します。以下を使用してサービスを開始します。

cd ~/docker/keycloak
docker-compose up -d

しばらく待って、サービスをダウンロードして開始します。すべてが実行されているかどうかを確認するには:

docker-compose ps

サービスが実行されていない場合。 2番目のdocker-compose up -dを発行して、もう一度確認してください。

Keycloakを構成し、新しいレルムを追加します

ブラウザを開いて https://kc.domain.com に移動します。 管理コンソールをクリックします。 docker-compose.ymlで指定されているように、ユーザー名とパスワードはadminです。

ページの左上で、新しいRealmを作成する必要があります。 Addをクリックします。名前としてmy-realmを入力します。 Saveをクリックします。

Keys-タブをクリックします。 RSA- entryを見てください。その行の証明書をコピーする必要があります。 Certificateをクリックし、後で使用するためにコンテンツをテキストエディターにコピーアンドペーストします。

Nextcloudの秘密キーと証明書を準備する

ターミナルを開き、以下を発行します。

openssl req  -nodes -new -x509  -keyout private.key -out public.cert

これにより、private.keyおよびpublic.certの2つのファイルが作成されます。これらは、後でnextcloudサービスに必要になります。

Nextcloudを構成する

ブラウザを開き、 https://nc.domain.com に移動します。 docker-compose.ymlで指定されているように、ユーザー名とパスワードはadminです。

デフォルトで無効になっているSSO & Saml Authenticateをアクティブにする必要があります。

重要ここから閉じないでくださいcurrentセットアップがテストされ実行されるまでのブラウザウィンドウ。すべてが機能する前にブラウザを閉じると、おそらくnextcloudの設定を変更できなくなります。そのような場合は、nextcloud-containerおよびnextcloud-db-containerを停止し、それぞれのフォルダーを削除し、それらを再作成して、最初からやり直す必要があります。

右上の歯車記号をクリックし、+ Apps-記号をクリックします。左側にSecurityというエントリのあるメニューバーが表示されます。クリックして。これで、すべてのセキュリティ関連アプリが表示されます。 SSO & SAML authenticationアプリの下のActivateボタンをクリックします。

右上のギアシンボルをもう一度クリックし、Adminをクリックします。 SSO & SAML authenticationをクリックします。

次の値を使用します。

  • UIDをマップする属性:username
  • 「NextcloudデスクトップクライアントにSAML認証を使用する(ユーザーの再認証が必要)」を有効にします
  • public.certの内容を「X.509証明書」フィールドにコピーします
  • private.keyの内容を「サービスプロバイダーのプライベートキー」フィールドにコピーします。
  • IdPの識別子:https://kc.domain.com/auth/realms/my-realm
  • SPが認証要求メッセージを送信するIdPのURLターゲット:https://kc.domain.com/auth/realms/my -realm/protocol/saml
  • SPがSLOリクエストを送信するIdPのURLロケーション:https://kc.domain.com/auth/realms/my-realm/protocol/saml
  • IdPのパブリックX.509証明書:my-realmKeys- tabからKeycloakから証明書をコピーします。キーの前に「----- BEGIN CERTIFICATE -----」を追加し、キーの最後に「----- END CERTIFICATE -----」を追加する必要があります。
  • サービスプロバイダーデータ:
    • 属性、表示名:ユーザー名
    • 属性、メールアドレス:emailDownload metadata XMLをクリックし、次のステップのためにファイルを保存します。
  • セキュリティ設定、enable次のオプション:
    • このSPによって送信されたメッセージが署名されるかどうかを示します。[SPのメタデータはこの情報を提供します]
    • このSPによって送信されたメッセージが署名されるかどうかを示します。
    • このSPによって送信されたメッセージが署名されるかどうかを示します。
    • このSPが署名するために受信した要素との要件を示します。
    • このSPが署名するための要素。SPがこの情報を提供します。
  • Metadata valid-ボタンの横にDownload metadata XMLがあることを確認します This part of the configuration should look like this
  • Download metadata XML-ボタンをクリックします。これにより、XMLファイルが生成および送信されます。それを保存。

Keycloak、クライアントの構成

管理コンソールに再度アクセスします。 Clientsをクリックし、右上のCreate-ボタンをクリックします。

[インポート]の横にある[Select File-]ボタンをクリックします。 Nextcloudの最後のステップで作成したXMLファイルを選択します。

変化する:

Saveをクリックします。

新しい画面が表示されます。次のフィールドを変更します。

タブMattersで:

  • 事前に割り当てられたrole listDelete-ボタンをクリックします
  • Create [.____]をクリックします。
    • 名前:username
    • マッパータイプ:ユーザープロパティ
    • プロパティ:username
    • SAML属性名:username
    • SAML属性の名前形式:Basic
    • Saveをクリックします
  • Create [.____]をクリックします。
    • 名前:email
    • マッパータイプ:ユーザープロパティ
    • プロパティ:email
    • SAML属性名:email
    • SAML属性の名前形式:Basic
    • Saveをクリックします

Keycloakの構成、ユーザーの追加

  • 左側で、Usersをクリックします
  • 右上の[Add users]をクリックします
  • 次の値を設定します。
  • タブCredentials ::
    • 新しいパスワード:user
    • パスワードの確認:user
    • 一時的:Off
    • Reset Passwordをクリックします
  • ウィンドウがポップアップします:
    • Change Passwordをクリックします

テスト走行

シークレットモード/プライベートモードで新しいブラウザウィンドウを開きます。例えば。 google-chromeの場合はCtrl-Shift-Nを押し、Firefoxの場合はCtrl-Shift-Pを押します。 Keepnextcloudセットアップページopenで他のブラウザウィンドウを保持します。それ以外の場合は、ロックアウトする可能性があります。

シークレット/プライベートブラウザウィンドウで https://nc.domain.com にアクセスします。キークロークのユーザー名/パスワードのページが表示されます。名前とパスワードとしてuserを入力します。 nextcloudのようこそ画面が表示されます。

了承

27
MadMike

次に、nextcloud 15/16のわずかに更新されたバージョンを示します。

ブラウザを開いて https://kc.domain.com に移動します。管理コンソールをクリックします。 docker-compose.ymlで指定されているように、ユーザー名とパスワードはadminです。

ページの左上で、新しいレルムを作成する必要があります。追加をクリックします。名前としてmy-realmを入力します。保存をクリックします。

[キー]タブをクリックします。 RSAエントリを見てください。その行の証明書をコピーする必要があります。 [証明書]をクリックし、後で使用するためにコンテンツをテキストエディターにコピーアンドペーストします。 Nextcloudの秘密キーと証明書を準備する

ターミナルを開き、以下を発行します。

openssl req -nodes -new -x509 -keyout private.key -out public.cert

これにより、private.keyとpublic.certの2つのファイルが作成されます。これらは、後でnextcloudサービスに必要になります。 Nextcloudを構成する

ブラウザを開き、 https://nc.domain.com に移動します。 docker-compose.ymlで指定されているように、ユーザー名とパスワードはadminです。

デフォルトで無効になっているSSOとSaml認証を有効にする必要があります。

重要ここからは、セットアップがテストされ実行されるまで、現在のブラウザーウィンドウを閉じないでください。すべてが機能する前にブラウザを閉じると、おそらくnextcloudの設定を変更できなくなります。そのような場合は、nextcloud-containerおよびnextcloud-db-containerを停止し、それぞれのフォルダーを削除し、それらを再作成して、最初からやり直す必要があります。

右上の歯車記号をクリックしてから、+アプリ記号をクリックします。左側に[セキュリティ]エントリのあるメニューバーが表示されます。クリックして。これで、すべてのセキュリティ関連アプリが表示されます。 SSOおよびSAML認証アプリの下の[アクティブ化]ボタンをクリックします。

右上のギアシンボルをもう一度クリックし、[管理]をクリックします。 [SSOとSAML認証]をクリックします。

次の値を使用します。

Attribute to map UID to:username
Enable "Use SAML auth for the Nextcloud desktop clients (requires user re-authentication)"
Copy the content ofpublic.cert into the 'X.509 Certificate'-field
Copy the content ofprivate.key into the 'Private key of Service Provider'-field.
Identifier of the IdP: https://kc.domain.com/auth/realms/my-realm
URL Target of the IdP where the SP will send the Authentication Request Message: https://kc.domain.com/auth/realms/my-realm/protocol/saml
URL Location of IdP where the SP will send the SLO Request: https://kc.domain.com/auth/realms/my-realm/protocol/saml
Public X.509 certificate of the IdP: Copy the certificate from Keycloak from the Keys-tab of my-realm. You will need to add '-----BEGIN CERTIFICATE-----' in front of the key and '-----END CERTIFICATE-----' to the end of it.
In Identity Provider Data:
    Attribute, displayname: username
    Attribute, email adress: email
    Attribute, Quota: nextcloudquota
    Click Download metadata XML and save the file for the next step.
Security Settings, enable the following options:
    Indicates whether the messages sent by this SP will be signed. [Metadata of the SP will offer this info]
    Indicates whether the messages sent by this SP will be signed.
    Indicates whether the messages sent by this SP will be signed.
    Indicates a requirement for the , and elements received by this SP to be signed.
    Indicates a requirement for the elements received by this SP to be signed. [Metadata of the SP will offer this info]
Check there is a Metadata valid beside the Download metadata XML-Button
Click the Download metadata XML-Button. This generate and send a XML file. Save it.

Keycloak、クライアントの構成

管理コンソールに再度アクセスします。 [クライアント]をクリックし、右上の[作成]ボタンをクリックします。

[インポート]の横にある[ファイルの選択]ボタンをクリックします。 Nextcloudの最後のステップで作成したXMLファイルを選択します。

変化する:

Client SAML Endpoint: https://kc.domain.com/auth/realms/my-realm

[保存]をクリックします。

新しい画面が表示されます。次のフィールドを変更します。

Name: Nextcloud
Valid Redirect URIs: https://nc.domain.com/ *
Click Save

タブ事項:

Click Delete-Button on the preassigned role list
Click Create
    Name: username
    Mapper Type: User Property
    Property: username
    SAML Attribute Name: username
    SAML Attribute NameFormat: Basic
    Click Save
Click Create
    Name: email
    Mapper Type: User Property
    Property: email
    SAML Attribute Name: email
    SAML Attribute NameFormat: Basic
    Click Save

作成をクリックします

Name: Roles
Mapper Type: Role List
Role attribute name: Roles
Friendly Name: roles
SAML Attribute NameFormat: Basic
Single Role Attrubute: On
Click Save

作成をクリックします

Name: nextcloudquota
Mapper Type: User Property
Property: nextcloudquota
SAML Attribute Name: nextcloudquota
SAML Attribute NameFormat: Basic
Click Save

Keycloakの構成、ユーザーの追加

On the left side, click on Users
On the top-right, click Add users
Set the following values:
    Username: user
    Email: [email protected]
    Click Save
On the tab Credentials:
    New Password: user
    Password Confirmation: user
    Temporary: Off
    Click Reset Password
A Window pops up:
    Click Change Password
1
Matthew Frost