SvelteKit을 사용하여 HTTP 기본 인증으로 페이지를 보호하는 방법
SvelteKit에서 관리 섹션이나 데모 앱과 같은 페이지에 간단한 인증을 추가하고 싶습니까? 글쎄, HTTP Basic Auth 당신이 찾고있는 것일 수 있습니다.
그러나 시작하기 전에 사용자 이름/비밀번호를 base64로 인코딩amongst other concerns하여 전송하기 때문에 HTTP 기본 인증이 매우 안전한 것으로 간주되지 않는다는 점을 알고 있어야 합니다. HTTPS를 사용하는 경우(이렇게 해야 합니다!) 이 특정 공격 벡터는 문제가 되지 않지만 여전히 이러한 요소를 고려해야 하며 고객/사용자 대면 로그인에는 절대 사용하지 않아야 합니다. 나는 HTTP Basic이 사이트의 페이지 또는 섹션을 (다소) 보호하는 유용하고 빠른 방법이라고 생각합니다. HTTP 기본을 선택하는 경우 보호하려는 페이지가 생각만큼 안전하지 않을 수 있다는 점에 유의하십시오.
좋아, 계속해!
이를 달성하려면 모든 요청에서 호출되는
handle
hook을 사용하여 모든 서버 측 요청을 가로채야 합니다.그런 다음 URL 경로 이름이
/admin
로 시작하는지 확인하여 /admin
를 포함하는 모든 페이지가 HTTP 기본 인증(예: /admin
, /admin/reports
) 뒤에서 보호되도록 합니다.그런 다음
Authorization
헤더를 확인하여 사용자가 로그인을 시도했는지(또는 로그인 대화 상자를 취소했는지) 사용자 이름:암호 콤보(base64 인코딩)와 비교하여 확인합니다. 일치하지 않으면 로그인되지 않은 것이므로 401
오류와 함께 권한이 부여되지 않았음을 나타냅니다.올바른 사용자 이름:암호 콤보를 입력하여 로그인에 성공하면 원하는 관리자 페이지로 이동됩니다.
import type { Handle } from "@sveltejs/kit";
import { ADMIN_LOGIN } from "$env/static/private";
export const handle: Handle = async ({ event }) => {
const url = new URL(event.request.url);
if (url.pathname.startsWith("/admin")) {
const auth = event.request.headers.get("Authorization");
if (auth !== `Basic ${btoa(ADMIN_LOGIN)}`) {
return new Response("Not authorized", {
status: 401,
headers: {
"WWW-Authenticate":
'Basic realm="User Visible Realm", charset="UTF-8"',
},
});
}
}
return resolve(event);
};
그런 다음
.env
파일(및 호스팅 공급자의 환경 변수 관리 시스템에서 설정)에서 사용자 이름/암호 콤보를 설정합니다.ADMIN_LOGIN="admin:sekret"
이제
/admin
또는 다른 위치에 페이지를 생성하고 로드를 시도하십시오. 로그인 프롬프트가 표시되고 사용자 이름에 admin
를 입력하고 암호에 sekret
를 입력하면 관리자 Svelte 페이지가 표시되어야 합니다.더 많은 웹 개발 및 시작 관련 콘텐츠를 보려면 나를 팔로우하고 Github
Reference
이 문제에 관하여(SvelteKit을 사용하여 HTTP 기본 인증으로 페이지를 보호하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/danawoodman/how-to-secure-pages-with-http-basic-auth-using-sveltekit-1iod텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)