はじめに
こちらの記事の後編になります。
verdaccioの認証設定
verdaccioはデフォルトの設定で、webサイトにアクセスしたユーザ全員にパッケージが見えるようになっています。
今回はこれをログインしたユーザに限定し、かつUnityでupmの認証を通しつつ自作パッケージを扱えるようにする方法を
紹介します。
現状の設定
デフォルトのverdaccioは任意のクライアントから
npm adduser --registry your.domain.com
とすることで、だれでもURLさえ知っていればアカウントを追加できる状態になっています。
ログインさえできてしまえばパッケージは見放題なのであまり好ましくありません。
目指す設定
今回は以下の要件に沿うように改編します。
- ユーザの追加を管理者以外が行えないようにする。
- webページにアクセスしても、ログインしていない場合はパッケージを見えなくする。
アクセスを制限する
qiita/verdaccio/config/config.yaml
を開きます。
packages
ブロックにフォーカスします。
packages:
'@*/*':
# scoped packages
access: $all
publish: $authenticated
unpublish: $authenticated
proxy: npmjs
'**':
access: $all
publish: $authenticated
unpublish: $authenticated
上記の部分がパッケージへのアクセスの制限であり、同時にwebページの制限の設定にもなります。
細かい解説は公式にも記載されていますで今回はざっくりいきます。
今回は、知らない第三者がアクセスした際にパッケージを見えなくしたいので、packages
内のaccess
に許可されているユーザが$all
となっているのを、$authenticated
に変更します。
こうすると、第三者はwebページにアクセスしてもパッケージが何も登録されていない状態の画面を見ることになります。
ユーザの追加を禁止する
先ほどの設定でビュー制限をかけることが出来ましたが、ユーザとして登録が出来てしまえば見放題の状態です。
なので今度はverdaccioへのユーザ追加を禁止し、管理者がサーバ側で直接追加するようにします。
ユーザ登録を無しにする
verdaccioのconfigファイルを開きます。qiita/verdaccio/config/config.yaml
auth
ブロックにmax_users: -1
を追記します。
auth:
htpasswd:
file: /verdaccio/storage/htpasswd
max_users: -1
以上の設定で、ユーザの新規追加が完全に無効になりました。
htpasswdを編集してユーザ追加
さて、先ほどの設定でユーザは追加されることはなくなりましたが、
このままでは共同作業している仲間がいる場合や、まだ自分のユーザを作成していない場合などに困ってしまいます。
なのでここからは手動でユーザを追加していきます。
以下のコマンドをqiitaディレクトリで実行します。
もしもhtpasswdの場所を変えてる場合は適宜読み替えてください。今までの内容に沿っている場合は以下のコマンドで大丈夫です。
vim verdaccio/config/htpasswd
このhtpasswdファイルにユーザ情報を記述することで、以降verdaccioにログインできるようになります。(要再起動)
直接記述する場合は、https://hostingcanada.org/htpasswd-generator/
上記のサイトなどでパスワードを生成してください。(←平文を直接記入すると動かないため)
ただ、ほとんどの方はターミナルで完結させたいと思うのでそちらの方法も紹介します。
vimを開いている場合は閉じて、dockerを終了してから以下のコマンドを実行します。
sudo apt install apache2-utils
これでhtpasswd
コマンドが使えるようになります。
その後、qiita/verdaccio/storage/
まで移動してから以下を実行することで
ユーザを登録することができます。細かいオプションの解説がこちらがおすすめ。
htpasswd -b -c htpasswdへの相対パスor絶対パス ユーザ名
今回は以下のように記述します
htpasswd -b -c htpasswd qiita-user
その後、パスワードが聞かれるのでそれも完了したら、dockerを再度立ち上げましょう。
docker compose up --build -d
webサイトでログインできることを確認しましょう!!!
Unityで認証を通す
さて、unityではgithubやopen upm,verdaccioから、自作のパッケージをインストールすることができます。
が、あくまでもpublicアクセスが可能なもののみで、認証が必要なパッケージは一工夫する必要があります。
この作業がやや面倒くさいため、今回はおすすめのエディタ拡張を紹介します。
https://github.com/Halodi/halodi-unity-package-registry-manager
こちらのパッケージは自作パッケージの追加、認証をすべてエディタ上で完結させてくれる神ツールです。
インストール出来たら、packages->Manage scoped registries
を選択し、ウィンドウを出します。
+ボタンからverdaccioを登録していきます。
Nameなど基本的にはjsonに直接記述するやり方と一緒ですが、今までのチュートリアル通りにやった場合の一例を記載しておきます。
面倒くさくなってテキスト欄にやり方を載せてますが、大事なのはAuthentication/Credentials
の部分です。
更に下のGenerate token
のmethod
でnpm login
を選択し、Login
ボタンを押すことで、ログイン画面がでます。
ここに、先ほどhtpasswdで追加したユーザ情報でログインすることで、以降認証を通した状態で、Unityがverdaccioからパッケージを取得できるようになります。
それぞれのパッケージの追加
認証を通した後でもmanifest.jsonから今まで通り直接インストールすることもできますし、Packages -> add packages
からエディタから直接インストールすることもできます。
おわりに
前回書いた記事はかなりの文章量になっていたため、今回前後編と分けて簡潔にできたのは良かったです。
何かあればコメントください!!