ベーシック認証とダイジェスト認証

HTTPの認証方法で代表的なものとしてベーシック認証、ダイジェスト認証などがある。

ベーシック認証

ベーシック認証は基本認証と呼ばれることもあり、ユーザとパスワードをコロンで繋ぎBase64エンコードしたものを送信する。

サーバには以下のようなフォーマットでヘッダに含まれる。

Basic Z3Jtbjpob2dlaG9nZQ==

セキュリティ

盗聴された場合はbase64でデコードすることで簡単にユーザ・パスが判明する。

$ echo 'Z3Jtbjpob2dlaG9nZQ==' | base64 -D
grmn:hogehoge

設定方法(Apacheの場合)

htpasswdの作成

$ htpasswd -c -b /path/to/.htpasswd <ユーザ名> <パスワード> #新規作成
$ htpasswd -b /path/to/.htpasswd <ユーザ名> <パスワード> #追記

Apacheの設定

AuthType Basic
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user

ダイジェスト認証

ベーシック認証で問題となった盗聴・改竄を防ぐために考案された。 パスワードをMD5でハッシュ化したものを送信する。ユーザ名は平文で流れる。

サーバには以下のようなフォーマットで送信される。

Digest username=\"grmn\", realm=\"Access to the staging site\", nonce=\"uWyUio91BQA=272da557c40a99343123d4de48a6ed1024cb5f60\", uri=\"/path/to/index.html\", algorithm=MD5, response=\"6b752b43a30e613c520f78b346553775\", qop=auth, nc=00000001, cnonce=\"2c2e499270c1169b\"

ダイジェスト認証の大枠の流れはDigest認証 - Wikipediaがわかりやすい。

htpasswdの作成

新規作成の場合は「-cオプション」を追加。追記の場合は「-cオプション」を除く。

$ htdigest -c /path/to/.htpasswd "Access to the staging site" ユーザ名
Adding password for grmn in realm Access to the staging site.
New password:<パスワード応答>
Re-type new password:<パスワード応答>

Apacheの設定

AuthType Digest
AuthName "Access to the staging site"
AuthUserFile /path/to/.htpasswd
Require valid-user

参考

HTTP 認証 - HTTP | MDN

Digest認証 - Wikipedia

Apache(mod_wsgi) + Flask環境でベーシック認証が効かない

Apacheの設定にWSGIPassAuthorization Onを追加する必要があある。

例) /etc/httpd/conf.d/wsgi.conf

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/python/run/baselinenv
WSGISocketPrefix run/wsgi
WSGIRestrictEmbedded On

WSGIPassAuthorization — mod_wsgi 4.6.5 documentation

Docker ERROR: 2 matches found based on name: network api_default is ambiguous

重複してるDockerネットワークを削除する

$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
a09c35602c0f        api_default         bridge              local
c33c065d9280        api_default         bridge              local
$ docker network rm c33c065d9280

参考

2 matches found based on name: network ddev_default is ambiguous · Issue #811 · drud/ddev · GitHub

WSGI(Web Server Gateway Interface)とは

  • WSGI(Web Server Gateway Interface)とは
    • WebサーバーとWebアプリケーションをつなぐ共通のインターフェース
  • どうしてWSGIが必要になったか
    • WebサーバーによってWebアプリケーションフレームワークが利用できなかったり制限が起きる問題を解決するため
  • WSGIのメリット
    • WebサーバとWebアプリケーションの実装を切り離すことができ,WebサーバとWebアプリケーションフレームワークの組み合わせを柔軟に選択することができる

参考

ERROR: Named volume "data:/var/lib/mysql:rw" is used in service "xxxx" but no declaration was found in the volumes section.

トップレベルにもvolumesを指定しないとだめ。

version: "3"

services:
  db:
    image: db
    volumes:
      - data-volume:/var/lib/db
  backup:
    image: backup-service
    volumes:
      - data-volume:/var/lib/backup/data

volumes:
  data-volume:

参考

Compose file version 3 reference | Docker Documentation