Amazon Cognito Node SDK 시작
그러나 Cognito SDK를 직접 사용하는 자원은 더욱 희소하다.이 문서는 다양한 스택 넘침 답안, AWS 문서 기사, 그리고 이 서비스를 이용하여 기능 검증 시스템에 필요한 순수한 시도와 오류를 절약할 수 있기를 바랍니다.
본고는 나체 Express 응용 프로그램에 사용되는 Github repo를 포함하고 Cognito 방법을 보여 준다."이 강좌의 목적으로"한 줄은 내가 이 프로그램을 위해 사용자 풀을 만들 때 취한 절차를 나타낸다.
Cognito 설정
사용자 풀 관리 를 클릭한 다음 사용자 풀 생성 을 클릭합니다.
사용자 풀 생성
풀 이름을 입력하고 [단계적 설정] 을 클릭합니다.
속성
사용자가 로그인할 수 있는 방법을 선택하십시오.
각 사용자가 원하는 필수 속성 선택
정책
사용자가 직접 등록할 수 있는지 또는 관리자가 사용자를 등록해야 하는지 선택하십시오.
MFA 및 검증
-MFA는 이 강좌의 범위를 넘어서는 복잡성을 증가시켰다.그러나 이것은 미래 문장의 주제일 수도 있다.
사용자가 계정을 복구할 수 있는 방법을 선택하십시오.
메시지 사용자 정의
메시지 사용자 정의: 사용자가 응용 프로그램을 등록할 때 보내는 전자 메일을 사용자 정의할 수 있습니다.
e-메일 인증 - 코드 및 링크
태그
필요한 리소스 레이블 추가
설비
사용자 장치를 기억할지 여부를 선택하십시오. 이것은 MFA와 관련이 있습니다.
애플리케이션 클라이언트
Auth Flows에서 "ALLOW\u ADMIN\u USER\u PASSWORD\u Auth"를 선택합니다.
트리거
어떤 트리거에 필요한 람다 함수를 분배합니다.
되돌아보다
이전 단계에서 언급한 모든 필드를 작성했는지 확인하십시오
응용 프로그램에서 Cognito 사용
필요한 NPM 패키지
환경 변수
중요한 보조 함수
// Authentication flows require the value returned by this function
import {createHmac} from 'crypto';
const {AWS_COGNITO_SECRET_HASH, AWS_CLIENT_ID} from './environment';
function createSecretHash(username){
return createHmac('sha256', AWS_COGNITO_SECRET_HASH)
.update(username + AWS_CLIENT_ID).digest('base64');
}
// Authentication flows require request headers to be formatted as an
// array of objects with the shape {headerName: string, headerValue: string}
// this tutorial assumes you're using express and formats the headers
// according to that assumption
function formatHeaders(headers){
let formattedHeaders = [ ];
for(const headerName in headers){
formattedHeaders.push({
headerName,
headerValue:headers[headerName]
});
}
return formattedHeaders;
}
JWT 서명 확인
https://cognito-idp.{YOUR_AWS_REGION}.amazonaws.com/{YOUR_AWS_USER_POOL_ID}/.well-known/jwks.json
const jsonwebtoken = require('jsonwebtoken');
const jwkToPem = require('jwkToPem');
const jwks = require('./jwks.json');
function verifyTokenSignature(token){
// alternatively you can use jsonwebtoken.decode()
const tokenHeader = JSON.parse(
Buffer.from(token.split('.')[0], 'base64').toString()
);
const properJwk = jwks.find(jwk => jwk.kid === tokenHeader.kid);
const pem = jwkToPem(properJwk);
return new Promise((resolve, reject) => {
jsonwebtoken.verify(
token,
pem,
{algorithms: ['RS256']},
(err, decodedToken) => {
err ? reject(false): resolve(true);
}
)
});
}
주의해야 할 중요한 것은 JWT 서명을 검증한 후에도 몇 가지 절차를 취해야 한다는 것이다 here 및 here.예제 용법
const cognito = new CognitoIdentityServiceProvider({
secretAccessKey:'YOUR_SECRET_ACCESS_KEY',
accessKeyId:'YOUR_ACCESS_KEY_ID',
region:'YOUR_COGNITO_POOL_REGION'
});
function register(Username, Password){
const params = {
ClientId: 'YOUR_AWS_CLIENT_ID',
Username,
Password,
SecretHash: createSecretHash(username)
}
return cognito.signUp(params).promise()
}
주의사항
register 방법을 호출하고 사용자 이름을 지정한 사용자가 존재할 때, Cognito는 "주어진 전자 우편을 가진 계정이 이미 존재합니다"라고 메시지를 되돌려줍니다.이것은 나쁜 사람이 당신의 응용 프로그램에 대해 사용자 매거 조작을 실행할 수 있게 한다(read more.가능한 해결 방안은 오류를 처리할 때 이 특정 메시지를 검사하고 오류가 아닌 기본 등록 성공 메시지를 되돌려주는 것이다.
admin Initiate Auth 방법으로 영패 흐름을 새로 고칠 때, 사용자가 영패 (랜덤 문자열처럼 보이는 것) 의 사용자 이름 필드에 접근하는 것을 사용합니다.그렇지 않으면 기밀 검증 해시 실패 메시지가 표시됩니다.
결론
풀 설정과 기본적인 조수 함수가 완성되면 Cognito를 사용하면 매우 간단해진다. 정확한 매개 변수를 필요한 함수에 전달하기만 하면 된다.Cognito 설정으로 서버가 종료되지 않도록 보호합니다.또 많은 다른 중요한 절차를 채택해야 한다.OWASP 메모장은 어플리케이션 보호에 대한 더 많은 정보를 얻을 수 있는 좋은 장소입니다.
참조 링크
AWS SDK documentation for Cognito
한층 더 읽다
Reference
이 문제에 관하여(Amazon Cognito Node SDK 시작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/blakebuck/a-primer-on-the-amazon-cognito-node-sdk-27i6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)