express를 통해 ALB로부터 인증 정보 얻기
컨디션
node 16.13.1
express 4.17.3
하고 싶은 일
ALB와 코그니토를 합작하여 인증 인정을 실현할 수 있는 기회가 많을 거라고 생각합니다.
ALB 인증을 통한 HTTP 접근에 관해서는express를 통해 인증된 사용자 정보를 추출하고 싶습니다.
ex.ALB 후방 API 서버에서 POST 요청을 한 사용자의 이름과 이메일을 취득하고 DB와 결합하여 등록합니다
구성 예
실현 방법
import { Request } from "express";
const getUserInfo = (req: Request): { name: string; email: string } => {
const oidcData = req.headers["x-amzn-oidc-data"];
if (oidcData && typeof oidcData === "string") {
// JWT形式の文字列からpayloadを取得
const payload = oidcData.split(".")[1];
// payloadをdecodeしてjson形式に変換
const decoded = JSON.parse(Buffer.from(payload, "base64").toString("utf8"));
return { name: decoded.name || "", email: decoded.email || "" };
} else {
return { name: "", email: "" };
}
};
해설
ALB는 그림의 9에 헤더 정보를 추가합니다.
사용자 정보는 x-amzn-oidc-data에 JWT로 포함됩니다.
JWT는 JSON에 대해base 64 인코딩을 했을 뿐 유효 하중 부분을 디코딩하면 사용자 정보를 간단하게 얻을 수 있다.
# デコード後のペイロード例
{
sub: '3344-abcd',
email_verified: 'false',
email: '[email protected]',
username: 'user_name',
exp: 1651818337,
iss: 'https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_AAAAA'
}
JWT 정보 최후
코그니토뿐만 아니라 아주르에이드 등의 IdP와 ALB가 연합하는 경우도 마찬가지로 진행될 것으로 보인다.
참고로 x-amzn-oidc-accesstoken도 JWT 형식으로 기술하고 디코딩 후 다양한 상황이 발생할 수 있습니다.
필요에 따라 적절한 사람으로부터 정보를 얻으십시오
# デコード後のx-amzn-oidc-accesstokenペイロードの例
{
sub: '3344-abcd',
'cognito:groups': [ 'ap-northeast-1_AAAA_pool' ],
iss: 'https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_AAAAA',
version: 2,
client_id: 'clientid',
origin_jti: 'aaaa-bb',
token_use: 'access',
scope: 'openid',
auth_time: 1651813462,
exp: 1651820813,
iat: 1651817213,
jti: 'aaaa-bbbbb',
username: 'user-name'
}
또한 우리는 이 방법을 응용하여'좋은 기능'을 실현하는 컨테이너 기반의 백엔드를 만들었다.가능하면 이쪽도 봐주세요.
Reference
이 문제에 관하여(express를 통해 ALB로부터 인증 정보 얻기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/nixieminton/articles/0b84e17147ce46텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)