[Unity]自作アセットをUPM(verdaccio)で認証付きで管理する(簡易ver)　後編

# はじめに
[こちらの](https://qiita.com/Yothuba3/items/6dd774bcb8e89e9070ff)記事の後編になります。
# verdaccioの認証設定
verdaccioはデフォルトの設定で、webサイトにアクセスしたユーザ全員にパッケージが見えるようになっています。   
今回はこれをログインしたユーザに限定し、かつUnityでupmの認証を通しつつ自作パッケージを扱えるようにする方法を
紹介します。

### 現状の設定
デフォルトのverdaccioは任意のクライアントから
```
npm adduser --registry your.domain.com
```
とすることで、だれでもURLさえ知っていればアカウントを追加できる状態になっています。 
ログインさえできてしまえばパッケージは見放題なのであまり好ましくありません。

### 目指す設定
今回は以下の要件に沿うように改編します。
- ユーザの追加を管理者以外が行えないようにする。
- webページにアクセスしても、ログインしていない場合はパッケージを見えなくする。

# アクセスを制限する

`qiita/verdaccio/config/config.yaml`を開きます。
`packages`ブロックにフォーカスします。
```yaml
packages:
  '@*/*':
    # scoped packages
    access: $all
    publish: $authenticated
    unpublish: $authenticated
    proxy: npmjs

  '**':
    access: $all

    publish: $authenticated
    unpublish: $authenticated
```
上記の部分がパッケージへのアクセスの制限であり、同時にwebページの制限の設定にもなります。
細かい解説は[公式](https://verdaccio.org/docs/authentication/)にも記載されていますで今回はざっくりいきます。  
今回は、知らない第三者がアクセスした際にパッケージを見えなくしたいので、`packages`内の`access`に許可されているユーザが`$all`
となっているのを、`$authenticated`に変更します。  
こうすると、第三者はwebページにアクセスしてもパッケージが何も登録されていない状態の画面を見ることになります。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/7414cce9-3677-da37-3a54-c3dbd805438c.png)


# ユーザの追加を禁止する
先ほどの設定でビュー制限をかけることが出来ましたが、ユーザとして登録が出来てしまえば見放題の状態です。  
なので今度はverdaccioへのユーザ追加を禁止し、管理者がサーバ側で直接追加するようにします。  

### ユーザ登録を無しにする
verdaccioのconfigファイルを開きます。`qiita/verdaccio/config/config.yaml`  
`auth`ブロックに`max_users: -1`を追記します。
```yaml
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を終了してから**以下のコマンドを実行します。
```terminal
sudo apt install apache2-utils
```
これで`htpasswd`コマンドが使えるようになります。
その後、`qiita/verdaccio/storage/`まで移動してから以下を実行することで
ユーザを登録することができます。細かいオプションの解説が[こちら](https://qiita.com/masakuni-ito/items/3d951035884184632b99)がおすすめ。
`htpasswd -b -c htpasswdへの相対パスor絶対パス ユーザ名`
今回は以下のように記述します
```terminal
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`を選択し、ウィンドウを出します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/cc91f5b2-0cbc-bf93-71df-708f5a5c509c.png)
＋ボタンからverdaccioを登録していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/114b493f-afb1-d743-e6e1-4b7dc4cc1d39.png)
Nameなど基本的にはjsonに直接記述するやり方と一緒ですが、今までのチュートリアル通りにやった場合の一例を記載しておきます。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/b0f7523f-7940-a25e-0a3a-23b2ebc1d059.png)
面倒くさくなってテキスト欄にやり方を載せてますが、大事なのは`Authentication/Credentials`の部分です。
更に下の`Generate token`の`method`で`npm login`を選択し、`Login`ボタンを押すことで、ログイン画面がでます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/7912be92-68da-6d4c-423f-9863e4b9f0e4.png)
ここに、先ほどhtpasswdで追加したユーザ情報でログインすることで、以降認証を通した状態で、Unityがverdaccioからパッケージを取得できるようになります。  

#### それぞれのパッケージの追加
認証を通した後でもmanifest.jsonから今まで通り直接インストールすることもできますし、`Packages -> add packages`からエディタから直接インストールすることもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411974/798ceabf-6b62-d3ee-ddbb-90a846cbf4f8.png)


# おわりに
前回書いた記事はかなりの文章量になっていたため、今回前後編と分けて簡潔にできたのは良かったです。  
何かあればコメントください！！