Apache での大文字と小文字を区別しない基本認証

Apache での大文字と小文字を区別しない基本認証

Apacheサーバーを設定して受け入れることは可能ですか?大文字と小文字を区別しないユーザー名基本認証用ですか?

現在、私はこれに似たパターン(インクルードファイル内)をhttpd.conf

<Location "/admin/">
   AuthType Basic
   AuthName "Admin Area"
   AuthUserFile "/path/to/auth-file"
   Require valid-user
</Location>

パスワードでは大文字と小文字が区別される必要があります。

答え1

認証ファイルのユーザー名を同じ大文字/小文字にできると仮定します。大文字だとします。

あなたが望むことを達成するには、私は次のことを行います。

  1. mod_rewriteを使用するRewriteMapPython(または他の)スクリプトを呼び出す
  2. 脚本では、
    1. 認証ヘッダーをbase64でデコードする
    2. ユーザー名を大文字にする(列の前の部分)
    3. 認証ヘッダーをbase64でエンコードする
  3. 新しい大文字の認証ヘッダーを使用する

私はそれをテストするためのセットアップを持っていませんが、皆さんの参考として、このアイデアを実装する 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

関連情報