Apacheサーバーを設定して受け入れることは可能ですか?大文字と小文字を区別しないユーザー名基本認証用ですか?
現在、私はこれに似たパターン(インクルードファイル内)をhttpd.conf
<Location "/admin/">
AuthType Basic
AuthName "Admin Area"
AuthUserFile "/path/to/auth-file"
Require valid-user
</Location>
パスワードでは大文字と小文字が区別される必要があります。
答え1
認証ファイルのユーザー名を同じ大文字/小文字にできると仮定します。大文字だとします。
あなたが望むことを達成するには、私は次のことを行います。
- mod_rewriteを使用する
RewriteMap
Python(または他の)スクリプトを呼び出す - 脚本では、
- 認証ヘッダーをbase64でデコードする
- ユーザー名を大文字にする(列の前の部分)
- 認証ヘッダーをbase64でエンコードする
- 新しい大文字の認証ヘッダーを使用する
私はそれをテストするためのセットアップを持っていませんが、皆さんの参考として、このアイデアを実装する Python スクリプトを以下に示します (わかりやすくするために強調していますが、もっと短くすることもできます)。
#!/usr/bin/python
import base64
import sys
import string
#Get the header value
header = sys.stdin.readline()
#Base 64 decode it
authentication = base64.b64decode(header)
#Split username and password
userpass = authentication.split(':')
#Make username uppercase
userpass[0] = userpass[0].upper()
#Rebuild the authentication with the upper case username
authentication = string.join(userpass,':')
#Send the base64 result back
print (base64.b64encode(authentication))
のためによく知られているパスワード:
$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | openssl base64 -d
Aladdin:open sesame
このスクリプトはユーザー名を大文字にします:
$ echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | python uppercase_basic.py
QUxBRERJTjpvcGVuIHNlc2FtZQ==
$ echo QUxBRERJTjpvcGVuIHNlc2FtZQ== | openssl base64 -d
ALADDIN:open sesame
注意: ユーザー名に非 ASCII 文字が含まれている場合、このコードは失敗します。私のマシンでは、 にétudiant78
なります。éTUDIANT78