2016-10-28 17 views
19

私はAngular2シングルページアプリとECS上で動作する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)トークンが本物であることを確認しますか? "server"はJWT自体を発行していないので、独自のシークレットを使用することはできません(基本的なJWTの例hereで説明されています)。

    私はCognitoのドキュメントを読んでたくさんのグーグルで探ってきましたが、サーバー側でJWTをどうすればよいかについての良いガイドラインは見つかりません。

  • +0

    あなたはノード/ Expressのアプリを使用している場合は、私は[cognito-エクスプレス]と呼ばれるNPMパッケージ(httpsを作成しました:// WWWを.npmjs.com/package/cognito-express)あなたのCognitoユーザープールからJWKをダウンロードし、IDトークンまたはアクセストークンのJWTの署名を確認します。 – ghdna

    +0

    @ghdna最近私はcognito-expressをダウンロードしてサーバーにインストールしましたが、クライアント側のCognitoからは、accessKey、secretKey、sessionKey、および有効期限があります。 IDトークンまたはアクセストークンがどこからでも返されないことがわかります。どこかにRefresh Tokenもあります。だから、私が現在コギトエクスプレスから私のコンソールに入っているのは、アクセストークンがヘッダーにないか、または有効でないJWTです。すべてのポインタ? – elarcoiris

    答えて

    14

    私はドキュメントを正しく読まなかった。 hereについて説明しています(「Web APIでIDトークンとアクセストークンを使用する」までスクロールしてください)。

    APIサービスは、Cognitoの秘密をダウンロードし、受信したJWTを確認するために使用することができます。完璧。

    Groadyさんのコメント@編集

    が点にある。しかしはどのようあなたはトークンを検証していますか?私はjose4jnimbus(どちらもJava)のような戦闘テスト済みのライブラリを使用して、自分で検証を実装しないと言うでしょう。

    Here私は最近Java/dropwizardサービスでこれを実装しなければならない時に私を始めたnimbusを使ったSpring Bootの実装例です。

    +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はRSAのキーマップをAmazonが提供しているとおり正確に取得します。私は、キーが文字列でなければならないと思ったときに、私の車輪を回転させるのに多くの時間を費やしました。 – Law

    4

    同様の問題がありましたが、APIゲートウェイを使用していませんでした。私の場合は、AWS Cognito Developer Authenticatedアイデンティティルートを介して取得したJWTトークンの署名を検証したかったのです。私はトークンの外部すなわち、サーバ側またはスクリプト経由で

    は私が出て考え出したと思うと入れAWS JWTの署名を検証するために、トラブル一緒に縫い合わせ、正確にビットを必要としていたさまざまなサイト上の多くのポスターのように

    〜に向けてverify an AWS JWT token signature。これは、PySwtのPySwtまたはPKCS1_v1_5cを使ってAWS JWT/JWSトークンを検証します。

    これは私の場合はPythonです要求)。

    私はこれを理解しようとしているときに、私は大部分が正しいことをしていましたが、python dictの注文や欠如、json表現などのニュアンスがあったからです。

    誰かのどこかに助けてくれることを願っています。ここで

    1

    はNodeJSに署名を検証する方法です:

    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 
    
    関連する問題