허용되는 표준은 고정 된 API 키를 사용하는 것입니다. 이 정보 평화는 헤더의 각 요청에서 보내는 임의로 생성 된 문자열이어야합니다. 서버가 헤더에 API KEY가 있는지 확인하기 위해 매번 HTTP 요청을 확인해야하며, 그렇다면 API는 환경 변수에 저장된 값 (코드에 API KEY를 저장하지 마십시오)을 확인해야합니다.
API 키가 손상된 경우 쉽게 env 변수를 업데이트 할 수 있으며 다시 사용할 수 있습니다.
이제 누구나 트래픽을 탐지하고 API 키를 볼 수 있기 때문에이 솔루션은 HTTPS 연결 없이는 무의미합니다. 이 경우 암호화 된 연결이 필수입니다.
이 방법은 거의 모든 공개 API가 회사에 의해 사용된다 : 트위터, 페이스 북, Twilio를, 구글 등의 예를 들어
구글은 그들이 당신에게 만료되는 토큰을주고 추가 단계를 가지고 있지만,이 적어도 처음에는 당신의 경우에 과도한 살인이 될 것입니다.
다음 코드는 전체 구현 hear으로 전체 파일을 확인할 수 있습니다
app.use(function(req, res, next) {
//
// 1. Check if the APIKey is present
//
if(!req.headers.authorization)
{
return res.status(400).json(
{
message: "Missing APIKey.",
description: "Unable to find the APIKey"
}
);
}
//
// 2. Remove Basic from the beginning of the string
//
let noBasic = req.headers.authorization.replace('Basic ', '');
//
// 3. Convert from base64 to string
//
let b64toString = new Buffer(noBasic, 'base64').toString("utf8");
//
// 4. Remove the colon from the end of the string
//
let userAPIKey = b64toString.replace(':', '');
//
// 5. Check if the APIKey matches the one on the server side.
//
if(userAPIKey != process.env.API_KEY)
{
return res.status(400).json(
{
message: "APIKey don't match",
description: "Make sure what you are sending is what is in your server."
}
);
}
//
// -> Go to the next stage
//
next()
});
API 키 확인 내 구현의 예입니다.
준 관련 메모에서 보안, 시도 및 진정한 사용자/사용자뿐 아니라 HTTPS 사용이 첫 번째 단계라고 생각합니다. [LetsEncrypt] (https://letsencrypt.org/)에서 무료 인증서를 얻을 수 있습니다. 세션 인증 메커니즘 또한 XSS, CSRF 등과 같은 일반적인 공격으로부터 보호하기 위해 [OWASP] (https://www.owasp.org/index.php/Main_Page) 사이트의 정보를 읽어 보시기 바랍니다. – mscdex
감사합니다. ! 나는 XSS와 같은 공격을 이미 다룬'helmet'이라는 미들웨어를 활성화 시켰습니다. https://www.npmjs.com/package/helmet 링크를 살펴 보겠습니다. 메르시! 저는 HTTPS를 확실히 사용할 것이며, 개인 웹 사이트에 사용했기 때문에 LetsEncrypt (지금 생각하는 이름은 cerbot입니다)에 대해 알고 있습니다. 하지만 난 여전히 dev에 모드 (로컬 호스트)에있어 그래서 진짜 서버가 될 때 그것을 할 것입니다. 감사. – Ragnar