WordPress REST API JWT 토큰을 검증하는 동안 jwt_auth_no_auth_header 오류가 발생했습니다.
WordPress 웹사이트용과 React 어플리케이션용 두 개의 AWS 인스턴스가 있습니다.WP REST API 접속을 위해 "WP REST API - OAuth 1.0a Server"와 "WP-API용 JWT 인증"을 사용하고 있습니다.
토큰을 생성할 수 있습니다./wp-json/jwt-auth/v1/token
단, 다른 엔드포인트에 접속하려고 할 때 또는 다음 방법으로 토큰을 검증하려고 할 때/wp-json/jwt-auth/v1/token/validate
다음 오류가 발생하였습니다.
{
"code": "jwt_auth_no_auth_header",
"message": "Authorization header not found.",
"data": {
"status": 403
}
}
찾아보니 덧붙일 게 몇 가지 있더군요..htaccess
찾을 수 있는 모든 것을 추가했지만 성공하지 못했습니다.
RewriteEngine On
RewriteBase /
# Enable HTTP Auth
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
# WordPress
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# For SetEnvIf Authorization
#RewriteRule (.*) - [env=myenv:1]
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
#SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
요청에 인증 헤더가 있는지 확인하기 위해 다음 코드를 추가했지만 없습니다.
add_filter( 'rest_pre_dispatch', 'prefix_show_request_headers', 10, 3 );
function prefix_show_request_headers( $result, $server, $request ) {
$result = $request->get_headers();
return $result;
}
여기(https://github.com/Tmeister/wp-api-jwt-auth/issues/6)에서 WordPress가 기본적으로 cookie 방식으로 인증을 시도하여 오류를 발생시키고 JWT 인증에 도달하지 못하고 있다고 읽었습니다.그래서 이 코드를 추가했지만 아직 성공하지 못했습니다.
add_filter( 'rest_authentication_errors', '__return_true' );
마지막으로 헤더에 username:password도 전송하는 "JSON Basic Authentication" 플러그인을 추가했습니다.그래서 헤더가 제거되는 것이 문제인지 잘 모르겠습니다.프로덕션 서버에는 권장되지 않기 때문에 JWT 인증이 필요합니다.
어떤 도움이라도 감사합니다.
htaccess의 행 순서를 변경할 때까지 같은 문제에 직면해 있었습니다.처음엔 선을 그었는데
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
규칙 끝에.
Rewrite Engine On 후에만 오류 jwt_auth_no_auth_header가 수정되었습니다.wp rest api의 jwt 인증 시
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
다른 사람이 이 문제에 직면했을 경우에 대비하여 이 코드를 추가했습니다..htaccess
가 작동하지 않을 수 있습니다.
# Enable HTTP Auth
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
그래서 플러그인 파일에서jwt-authentication-for-wp-rest-api/class-jwt-auth-public.php
, 라는 이름의 함수를 확인합니다.validate_token
, 그 후$auth
체크에 실패했습니다.다음 코드를 추가했습니다.
if (!$auth) {
$allHeaders = getallheaders();
$auth = isset($allHeaders['Authorization']) ? $allHeaders['Authorization'] : false;
}
이거면 알 수 있어Authorization
헤더와 JWT는 예상대로 동작합니다.
상기의 모든 것을 시험해, 인스톨 되고 있는 플러그 인을 체크해, 2개의 플러그 인이 있는 것을 알 수 있었습니다.하나는 「JWT Auth」, 다른 하나는 「WP-API용 JWT 인증」입니다."JWT Auth"를 비활성화 했을 때는 모든 것이 정상적으로 동작했습니다.이유는 모르겠지만 둘 사이에 무슨 갈등이 있는 것 같아요.
언급URL : https://stackoverflow.com/questions/44322866/jwt-auth-no-auth-header-error-on-validating-wordpress-rest-api-jwt-token
'programing' 카테고리의 다른 글
스프링 부트 ClassNotFoundException org.springframework.core.metrics.응용 프로그램 부팅 (0) | 2023.04.01 |
---|---|
WordPress에서 get_posts()에 대해 페이지 매김을 하려면 어떻게 해야 합니까? (0) | 2023.04.01 |
전류를 수동으로 설정할 때 useRef() 훅과 함께 사용하는 스크립트 유형은 무엇입니까? (0) | 2023.04.01 |
스프링 부팅 EntityManagerFactoryBuilder에 자동 전원이 필요하지 않습니다. (0) | 2023.04.01 |
일식 IDE를 사용한 angularj 설정 (0) | 2023.04.01 |