2012-08-05 5 views
0

문제를 인코딩. 내가 발견하고 놀라게하는 것은 잘못 JWT Claim set를 반환 구글 데브에서 example of a JWT claim set에서 코드의이 부분 때 어떤 날 json_encode() 여기에 오류을 만드는 UTF-8 직렬화처럼 느끼게 사실 어떤 이유로 JWT Header 패스. Google Dev: Encoding the JWT Claim Set example of output구글 API OAuth2를 JWT 주장 세트는 UTF8로 직렬화 및 Base64url 안전 <code>google-api-php-client</code>와 구글 API OAuth2를 <code>Service Account</code>에 대한 액세스에

/* 
    Output: 

    JWT header: 
    Google Dev eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9. 
    My output eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9. 

    JWT Claim set: 
    Google Dev eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ. 
    My output eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOlwvXC93d3cuZ29vZ2xlYXBpcy5jb21cL2F1dGhcL3ByZWRpY3Rpb24iLCJhdWQiOiJodHRwczpcL1wvYWNjb3VudHMuZ29vZ2xlLmNvbVwvb1wvb2F1dGgyXC90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ. 
*/ 

어떤 제안에 설명 된 것과 다른

$JWT_Header = array(
    "alg" => "RS256", 
    "typ" => "JWT" 
); 
    $JWT_Body = array(
    "iss" => "[email protected]account.com", 
    "scope" => "https://www.googleapis.com/auth/prediction", 
    "aud" => "https://accounts.google.com/o/oauth2/token", 
    "exp" => 1328554385, 
    "iat" => 1328550785 
); 

    $segments = array(
    rtrim(strtr(base64_encode(json_encode($JWT_Header)), '+/', '-_'), '='), 
    rtrim(strtr(base64_encode(json_encode($JWT_Body)), '+/', '-_'), '=') 
); 
    //echo '<pre>'; print_r($segments); echo '</pre>'; 

?

답변

1

어떤 방법으로 UTF-8과 관련이있을 것 같지 않습니다.

$output = array(
    'eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOi8vd3d3Lmdvb2dsZWFwaXMuY29tL2F1dGgvcHJlZGljdGlvbiIsImF1ZCI6Imh0dHBzOi8vYWNjb3VudHMuZ29vZ2xlLmNvbS9vL29hdXRoMi90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ', 
    'eyJpc3MiOiI3NjEzMjY3OTgwNjktcjVtbGpsbG4xcmQ0bHJiaGc3NWVmZ2lncDM2bTc4ajVAZGV2ZWxvcGVyLmdzZXJ2aWNlYWNjb3VudC5jb20iLCJzY29wZSI6Imh0dHBzOlwvXC93d3cuZ29vZ2xlYXBpcy5jb21cL2F1dGhcL3ByZWRpY3Rpb24iLCJhdWQiOiJodHRwczpcL1wvYWNjb3VudHMuZ29vZ2xlLmNvbVwvb1wvb2F1dGgyXC90b2tlbiIsImV4cCI6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ', 
); 

foreach($output as $i){ 
    print_r(base64_decode(strtr($i, '-_', '+/'))) . PHP_EOL; 
    print_r(json_decode(base64_decode(strtr($i, '-_', '+/')))) . PHP_EOL; 
} 

그들이 앞으로 탈출하지 않는 것을 제외하고 당신은 구글 JSON 문자열이 동일한 값을 포함하는 것을 볼 수 있습니다 슬래시 :

Google: https://www.googleapis.com/auth/prediction 
You: https:\/\/www.googleapis.com\/auth\/prediction 
디버깅하려면, 단지 뒤쪽으로 동일한 알고리즘을 적용