CLOVER🍀

That was when it all began.

Infinispan Serverの管理コンソールにアクセスする & RESTエンドポイントに認証設定を行う

これは、なにをしたくて書いたもの?

Infinispan Serverの管理コンソールにアクセスしたり、RESTエンドポイントに認証設定をしたいと思いまして。

なお、Hot Rodでは以前に認証・認可設定を行っています。

Infinispan Server(Hot Rod)で、認証・認可設定を行う - CLOVER🍀

今回は、「認証」のみで設定します。

環境

今回の環境では、Infinispan Server 12.0.2.Finalを使用します。Infinispan Serverが動作しているサーバーのIPアドレスは、
172.17.0.2とします。

Infinsipan Serverを動作させているJavaのバージョンは、こちら。

$ java --version
openjdk 11.0.10 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 11.0.10+9, mixed mode)

なお、Infinispan Serverをバインドさせているアドレスは、0.0.0.0とします。

管理コンソールにアクセスする

まずはなにも考えずにInfinipan Serverの管理コンソール(http://[Infinispan ServerのIPアドレス]:11222/)にアクセスして
みます。

すると、こんなページが表示されます。

f:id:Kazuhira:20210403224457p:plain

「Open the console」と書かれているボタンを押すと、まだユーザーを作成していないため、こんなメッセージが
表示されます。

f:id:Kazuhira:20210403224519p:plain

どうやら、認証設定が必須なようです。

では、ユーザーを作成します。

$ bin/cli.sh user create ispn-admin -p ispn-password

この状態で管理コンソールにアクセスすると、Basic認証の入力ダイアログが出現するようになりますが、先に進むことが
できません。

先に進めるようになるのは、Infinispan Serverの再起動後ですね。

というわけで、Infinispan Serverを再起動してアクセスすると、管理コンソールが表示されます。

f:id:Kazuhira:20210403224756p:plain

とりあえず、cacheという名前でDistributed Cacheを作成してみます。

f:id:Kazuhira:20210403224949p:plain

Cacheが作成され、server/data/caches.xmlファイルにCacheの定義が追加されました。

server/data/caches.xml

<?xml version="1.0" ?>

<infinispan xmlns="urn:infinispan:config:12.0">
    <cache-container>
        <distributed-cache mode="SYNC" remote-timeout="17500" name="cache" statistics="true">
            <locking concurrency-level="1000" acquire-timeout="15000" striping="false"/>
            <state-transfer timeout="60000"/>
        </distributed-cache>
    </cache-container></infinispan>

Cacheにエントリを追加してみましょう。

一覧。

f:id:Kazuhira:20210403225426p:plain

追加。

f:id:Kazuhira:20210403225350p:plain

確認。

f:id:Kazuhira:20210403225453p:plain

RESTエンドポイントに対して、curlでアクセスしてみます。

URLは、こちらのドキュメントを見るとわかります。

Using the Infinispan REST Server

Using the Infinispan REST Server / Creating and Managing Caches

データの取得。

$ curl -i -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Digest realm="default", nonce="AAAACAAAD+Go2DNCRI+1FO8ewue2abPkThl1BYwlgsWM3Q0Amq3q0bqRjOU=", opaque="00000000000000000000000000000000", algorithm=MD5, qop=auth
content-length: 0

401になりました。では、先ほど作成したユーザーをBasic認証で指定してみましょう。

$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1
HTTP/1.1 403 Forbidden
content-length: 73

ISPN080052: The request authentication mechanism 'BASIC' is not supported

403になりました。Basic認証をサポートしていない、と言われます。

データの登録も同様です。

$ curl -i -u ispn-admin:ispn-password -XPUT -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2 -d 'value2'HTTP/1.1 403 Forbidden
content-length: 73

ISPN080052: The request authentication mechanism 'BASIC' is not supported

ちなみに、ユーザーを作成したので認証が通らないのではなく、ユーザーを作らない状態でも同じです。
つまり、RESTエンドポイントを使うためには認証設定が必須になります。

例外は、CacheManagerのヘルスチェックのみで、こちらは認証が不要です。

Using the Infinispan REST Server / Getting Cache Manager Health Status

$ curl -i 172.17.0.2:11222/rest/v2/cache-managers/default/health/status
HTTP/1.1 200 OK
Content-Type: text/plain
content-length: 7

HEALTHY

というわけで、RESTエンドポイントに認証設定を入れてみます。

Using the Infinispan REST Server / REST Authentication

Deploying and Configuring Infinispan 12.0 Servers / Manually Configuring REST Authentication

server/conf/infinispan.xmlのendpointsの箇所を

      <endpoints socket-binding="default" security-realm="default"/>

以下のように設定します。今回はrest-connectorのみ設定しました(hotrod-connectorはパスします)。

      <endpoints socket-binding="default" security-realm="default">
         <rest-connector>
            <authentication mechanisms="DIGEST BASIC"/> 
         </rest-connector>
      </endpoints>

RESTエンドポイントがサポートしている認証方法は、BasicとDigestのようです。

HTTP (REST): Basic and Digest

Deploying and Configuring Infinispan 12.0 Servers / Securing Access to Infinispan Servers

設定が終わったら、Infinispan Serverを再起動。

これで、RESTエンドポイントを使ってCacheへアクセスできるようになります。

$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1
HTTP/1.1 404 Not Found
content-length: 0

ですが、再起動したのでデータがなくなったのでした…。もう1度、データを管理コンソールで登録してから、取得。

$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key1
HTTP/1.1 200 OK
Etag: 282873
Content-Type: application/octet-stream
content-length: 6

value1

今度は取得できました。

データの登録と、取得。

$ curl -i -u ispn-admin:ispn-password -XPUT -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2 -d 'value2'HTTP/1.1 204 No Content
etag: 1200749911


$ curl -i -u ispn-admin:ispn-password -H 'Content-Type: text/plain' 172.17.0.2:11222/rest/v2/caches/cache/key2
HTTP/1.1 200 OK
Etag: 1200749911
Content-Type: application/octet-stream
content-length: 6

value2

こちらもOKです。

以前、Hot Rodで認証・認可設定を調べた時には認可設定まで行ったのですが、

Infinispan Server(Hot Rod)で、認証・認可設定を行う - CLOVER🍀

単に認証を設定するだけならエンドポイントに認証設定を入れるだけでよいみたいです。

この設定だと、認証さえ通ってしまえばCacheにアクセスすることができます。

Cacheに認可設定を行いたい場合は、cache-containerとcacheにsecurityの設定を入れましょう。

まとめ

Infinispan Serverの管理コンソールへのアクセスと、RESTエンドポイントの認証設定、および確認を行ってみました。

どちらもあまり使っていないので、1度確認しておいてもよかったかなと思います。

Emacsに、csharp-mode+lsp-modeを導入する

これは、なにをしたくて書いたもの?

先日、.NET(.NET Core)をUbuntu Linuxにインストールしてみたので、今度はEmacsでlsp-mode+C#を扱えるように
してみます。

Ubuntu Linux 20.04 LTSに、.NET 5.0/.NET Core 3.1をインストールしてみる - CLOVER🍀

言語は、C#にします。

LSP Mode - Language Server Protocol support for Emacs - LSP Mode - LSP support for Emacs

環境

使用しているEmacsのバージョンは、こちら。

$ emacs --version
GNU Emacs 26.3
Copyright (C) 2019 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.

lsp-mode(20210330.1510)、lsp-ui(20210330.428)、company(20210330.1459)は、以下の設定で導入済みと
します。

;; lsp-mode
(require 'lsp-mode)
(setq gc-cons-threshold 100000000)
(setq read-process-output-max (* 1024 1024))
(setq lsp-completion-provider :capf)
(setq lsp-idle-delay 0.500)
(require 'lsp-ui)
(setq lsp-ui-imenu-enable t)
(setq lsp-headerline-breadcrumb-enable t)

;; company
(require 'company)
(global-company-mode t)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 1)
(setq company-selection-wrap-around t)
(setq completion-ignore-case t)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "C-s") 'company-filter-candidates)

C# lsp-mode

C#向けのlsp-modeに関する情報は、こちら。

C# - LSP Mode - LSP support for Emacs

C#用のmode(csharp-mode)もインストールしておきましょう。バージョンは、20210328.2004でした。

GitHub - emacs-csharp/csharp-mode: A major-mode for editing C# in emacs

あとは、こちらを見ながら設定。

Installation / Vanilla Emacs

;; csharp-mode
(require 'lsp-mode)
(add-hook 'csharp-mode-hook #'lsp)

ドキュメントの手順に沿って、以下のコマンドを実行するとLanguage Serverがインストールされます。

M-x lsp-install-server RET csharp RET

C# - LSP Mode - LSP support for Emacs

これで、EmacsでC#のソースコードを扱う時に、csharp-modeとlsp-modeと協調動作するようになります。

Language Serverは、こちらが使われるようです。バージョンは、1.37.8でした。

GitHub - OmniSharp/omnisharp-roslyn: OmniSharp server (HTTP, STDIO) based on Roslyn workspaces

こんなところで。