인증 헤더를 base64로 디코딩하는 grails 컨트롤러가 있습니다. CURL을 사용하여 PHP 스크립트에서 보냈습니다.Grails Base64 디코딩의 인증 헤더가 디코드시 변형되었습니다
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "[email protected]:india123");
내 Grails의 콘솔 로깅 쇼 : 위의 경우
Authorization raw: Basic dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=, isBase64: true
Authorization decoded: ´"q—ïÕ—•πë•Ñ¿≈—ïÕ–πçΩ¥È•πë•Ñƒ»Ã
나는 하원 Base64로 클래스를 사용하지만, 그루비 내장 decodeBase64이 같은 결과를 얻을 수 있습니다 사용하고 있습니다.
원시 입력은 올 바릅니다. 이것을 복사하고 PHP의 ecode를 통해 푸시하면 올바르게 디코딩됩니다.
echo base64_decode('dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM=');
문자열을 컨트롤러에 직접 복사하면
def decode = new String(Base64.encodeBase64("dGVzdGluZGlhMDFAdGVzdC5jb206aW5kaWExMjM="))
이렇게하면 올바르게 디코딩됩니다.
나는 나는 그것이
Base64.isBase64(auth)
그냥 실패 디코드의있는 유효한 base64로 문자열입니다 테스트 요청
def auth = request.getHeader("Authorization")
를 통해 헤더를 취득. 나는 해독에 변화하는 인코딩을 시도했다.
데프 = 새로운 String 디코딩 ISO-8859 및 Windows-1252하지만 다른 조작 된 문자열이 반환 될 때마다 같은 (auth.decodeBase64(), "UTF-8")
뿐만 아니라 다른 인코딩 .
CURL 요청에 수동으로 Accept-Encoding을 설정해 보았습니다.
나는 밖으로 아이디어입니다 :("기본"는 getHeader 반환 값의 일부로 포함되어 있기 때문에