base64 で認証ヘッダーをデコードする grails コントローラーがあります。これを CURL を使用して PHP スクリプトから送信しました。
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "testindia01@test.com:india123");
私のgrailsコンソールのログには次のように表示されます:
Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•Ñƒ»Ã
上記のケースでは、Commons Base64 クラスを使用していますが、Groovy 組み込みの decodeBase64 を使用しても同じ結果が得られます。
Authorization raw が入ってくるのは正しいです。これをコピーして PHP の ecode にプッシュすると、適切にデコードされます。
echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=');
文字列をコントローラーに直接コピーすると、たとえば
def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM="))
次に、これも正しくデコードします。
リクエスト経由でヘッダーを取得します
def auth = request.getHeader("Authorization")
私はそれが有効なbase64文字列であることをテストします
Base64.isBase64(auth)
失敗するのはデコードだけです。デコード時にエンコーディングを変更してみました。
デフデコード = 新しい文字列 (auth.decodeBase64(), "UTF-8")
ISO-8859-1 や Windows-1252 などの他のエンコーディングと同様に、毎回異なる不正な文字列が返されます。
また、CURL リクエストで Accept-Encoding を手動で設定しようとしました。
私はアイデアがありません:(