2016-10-28 2 views
19

ECS에서 실행중인 Angular2 단일 페이지 앱과 REST API로 구성된 시스템을 구축하고 있습니다. API는 .Net/Nancy에서 실행되지만 변경 될 수 있습니다.API 백엔드에서 AWS Cognito에서 JWT를 확인하는 방법은 무엇입니까?

나는 Cognito에게 시험을주고 싶습니다이 내가 인증 워크 플로우 상상하는 방법이다하십시오 JWT 사용자의

  1. SPA 표지판 및 수신
  2. SPA는 JWT가 모든 요청과 API를 REST로 전송
  3. 내 무, 자동 스케일링,로드 밸런싱 D 다음 JWT는

내 질문 3 단계 어떻게 내 서버 (또는 오히려 관한 정통

  • REST API의 verfies ocker containers) 토큰이 진짜인지 확인 하시겠습니까? "서버"가 JWT 자체를 발행하지 않았기 때문에 자신의 비밀을 사용할 수 없습니다 (기본 JWT 예제 here에서 설명).

    나는 Cognito 워드 프로세서를 읽고 봤지만 많이 봤지만 서버 측에서 JWT로 무엇을 할 지에 대한 좋은 지침을 찾을 수 없다.

  • +0

    , 나는 [cognito 익스프레스 (HTTPS라는 NPM 패키지를 만들었습니다 : 여기 – ghdna

    +0

    @ghdna 최근에 cognito-express를 다운로드하여 내 서버에 설치했지만 클라이언트 측의 Cognito에서 accessKey, secretKey, sessionKey 및 만료 만받습니다. ID 토큰 또는 액세스 토큰이 어디에서나 반환되는 것을 찾을 수 없습니다. 어딘가에 새로 고침 토큰이 있습니다. 그래서 지금 Cogito-express에서 내 콘솔에 들어가는 것은 액세스 토큰이 헤더에서 누락되었거나 유효한 JWT가 아닙니다. 어떤 포인터? – elarcoiris

    답변

    14

    밝혀졌습니다. 문서를 제대로 읽지 않았습니다. here으로 설명되어 있습니다 ("웹 API에서 ID 토큰 및 액세스 토큰 사용"까지 스크롤 다운).

    API 서비스는 Cognito의 비밀 정보를 다운로드하여 수신 된 JWT를 확인하는 데 사용할 수 있습니다. 완전한.

    Groady의 코멘트 @ 편집

    는 점에있다 :하지만 어떻게 당신은 토큰의 유효성을 검사합니까? 난 그걸로 jose4j 또는 nimbus (둘 다 자바)와 같은 전투 테스트 라이브러리를 사용하여 처음부터 검증을 구현하지 말 것.

    Here 님은 최근에 이것을 java/dropwizard 서비스에서 구현해야 할 때 시작한 nimbus를 사용하는 스프링 부트의 구현 예입니다.

    +21

    문서는 잘 쓰레기 다. 6 단계는 "디코드 된 JWT 토큰의 서명 확인"_... 예 ... HOW!?!? 이 [이 블로그 게시물] (https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/)에 따르면 JWK를 PEM으로 변환해야합니다. 그들은 공식 문서에 이것을 어떻게 할 수 있을까?! – Groady

    +0

    Groady에 대한 후속 조치로서이 문제를 해결할 것입니다. 라이브러리에 따라 pem으로 변환 할 필요가 없습니다. 예를 들어 필자는 Elixir를 사용하고 Joken은 Amazon에서 제공 한 RSA 키맵을 사용합니다. 열쇠를 줄로 생각할 때 나는 내 바퀴를 돌리는 데 많은 시간을 보냈다. – Law

    4

    비슷한 문제점이 있지만 API 게이트웨이를 사용하지 않았습니다. 필자는 AWS Cognito Developer Authenticated 신원 경로를 통해 얻은 JWT 토큰의 서명을 확인하려고했습니다. 내가 토큰 외부 즉, 서버 측 또는 스크립트를 통해이

    은 내가 알아 알아 냈다고 생각과를 놓여져 AWS JWT의 서명을 확인하는 데 문제가 조립할 정확히 비트를 필요로했던 여러 사이트에 많은 포스터처럼

    요지는 verify an AWS JWT token signature입니다. 그것은 PySwt 또는 PKCS1_v1_5c와 함께 AWS JWT/JWS 토큰을 확인할 것입니다.

    그래, 내 경우에는 파이썬 이었지만 노드에서도 쉽게 할 수있다. (npm install jsonwebtoken jwk-to-pem 의뢰).

    나는 이것을 알아 내려고 할 때 대부분 옳은 일을하고 있었지만 파이썬 사전의 순서 나 부족, 그리고 json 표현과 같은 뉘앙스가 있었기 때문에 주석에서 몇 가지 문제점을 강조하려고했다.

    어딘가에 누군가 도움이되기를 바랍니다.당신은 노드/익스프레스 응용 프로그램을 사용하는 경우

    var jwt = require('jsonwebtoken'); 
    var jwkToPem = require('jwk-to-pem'); 
    var pem = jwkToPem(jwk); 
    jwt.verify(token, pem, function(err, decoded) { 
        console.log(decoded) 
    }); 
    
    
    // Note : You can get jwk from https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json 
    
    1

    는 NodeJS의 서명을 확인하는 방법 // www가 .npmjs.com/package/cognito-express). Cognito 사용자 풀에서 JWK를 다운로드하고 ID 토큰 또는 액세스 토큰의 JWT 서명을 확인합니다.
    관련 문제