1

AWS Cognitoを使用して(Googleを使用して)認証し、ユーザーを認証しようとしています。承認されたユーザーにIAMロールを割り当てることを意図しています。AWS Cognito - 資格情報の問題

私はそのように受け取る 「グラント・フロー」を使用しています http://docs.aws.amazon.com/cognito/latest/developerguide/authorization-endpoint.html

GoogleのOAuthのプロセスを起動するための許可エンドポイントを使用して、今までは、以下の手順に

  1. を踏襲していますas code=b3e8bca6-5a01-45db-b4c6-cd6900d0xxxx

  • 投稿を投稿トークン宣誓へのリクエスト/ http://docs.aws.amazon.com/cognito/latest/developerguide/token-endpoint.html

    私は、以下の情報を受け取る:

    "id_token": "eyJraWQiOiJJR2NVdHJcL3pOa3pQK1lre...........", 
    "access_token": "eyJraWQiOiJCbWx0cjJvMnJlVGhHW..........", 
    "refresh_token": "eyJjdHkiOiJKV1QiLCJlbmMiOi............", 
    "expires_in": 3600, 
    "token_type": "Bearer" 
    
  • てみCognitoIdentityCredentials

    AWS.config.credentials = new AWS.CognitoIdentityCredentials({ 
        IdentityPoolId: environment.identityPoolId, // Federated ID eu-west-2:af47703f-350c-4018-ae6a-xxxxxx 
        RoleArn: environment.roleArn,// IAM role 
        Logins: { 'accounts.google.com': data.id_token }, 
    }); 
    
    AWS.config.getCredentials((error) => { 
        if(error) console.log("Error: ", error); 
        this.creds = AWS.config.credentials; 
    }); 
    
  • Iを使用してAWSのcredntionsをフェッチすると取得する 質問

    1. の悪い要求500エラー

    {"__type":"NotAuthorizedException","message":"Invalid login token. Issuer doesn't match providerName"} 
    

    カップルは、一連のステップが正しいの後ですか?

  • CongnitoUserIdを取得するにはどうすればよいですか? id_tokenは非常に長い文字列ですが、どの情報を抽出できますか?
  • 最後に、AWSコールを行うaccessKeyを取得するにはどうすればよいですか?
  • ご迷惑をおかけして申し訳ございません。

    おかげ

    答えて

    1

    は、一連のステップが正しいの後ですか?

    私はそう信じています。

    id_tokenは非常に長い文字列ですが、どの情報を抽出できますか?

    id_tokenaccess_tokenの両方がJWT秒です。ドットの間の文字列をbase64でデコードして、トークンの内容を抽出することができます。一般的には、中間セクション、つまりペイロードに関係しています。

    this oneのようなデコーダにこれらのトークンを貼り付け、ブラウザの中身を見ることができます。JavaScriptの場合、atob()は期待通りに機能します。

    あなたのユーザーIDはわかりませんが、ユーザー名が十分であれば、id_tokenにはcognito:usernameというキーが含まれています。

    最後に、AWSコールを行うためのaccessKeyを取得するにはどうすればよいですか?

    Loginsマップでプロバイダを変更してください。あなたの例が示すように

    /oauth2/authorize経由)Cognitoを通じてGoogleに話とは対照的に、あなたは、Googleに直接話していた場合、あなたはLoginsマップでaccounts.google.comを使用します。

    しかし、あなたが戻ってくるトークンは、Googleのものではなく、Cognitoのものです。両方のトークンにはiss(発行者)キーが含まれています。これは(おそらく)あなたのユーザープールIDです。これはLoginsマップで使用する値です。発行者があなたのユーザープールであると仮定すると:

    Logins: { 
        'cognito-idp.us-east-1.amazonaws.com/us-east-1_xxxxxxxx': token 
    } 
    
    +0

    ありがとう!!私はトークンを解読することができ、上記のissキーを使ってログインマップを修正しましたが、同じエラーメッセージ{"__type": "NotAuthorizedException"、 "message": "無効なログイントークン。プロバイダ名 "}。ログインマップの "token"によって、私はあなたがid_tokenを参照していると仮定します。 – maxkart

    +0

    以下は私のid_token詳細 "アイデンティティ" は、次のとおりです。[ { "はuserId": "1068 ..."、 "providerNameで": "グーグル"、 "providerType": "グーグル"、 "発行者":ヌル、 //これで問題とプロバイダが一致しないのですか? "primary": "true"、 } ]、 – maxkart

    +1

    ありがとうございます!最後にそれを動作させるために、私はissキーからhttps://を取り除かなければならなかった。 – maxkart

    関連する問題