2013-01-08 1 views
2

인증 헤더를 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 반환 값의 일부로 포함되어 있기 때문에

답변

1

이이었다. 나는이 벗겨 경우가 작동합니다. Base64.isBase64에만 문자가에 확인 base64 알파벳이므로 "기본"이어야합니다.

관련 문제