2017-02-28 21 views
1

私はCognito User Pool Authorizerを使用してAPIゲートウェイ経由で実行されるラムダ関数を使用しています。Lambda Cognito User Pool承認者 - 私は自動的にカスタムユーザー属性を取得できますか?

「標準」ユーザー属性(subemailcognito:usernameなど)をevent.requestContext.authorizer.claimsから取得できることがわかりました。

ただし、これにはカスタムユーザー属性(custom:myAttributeなど)は含まれません。

私はadminGetUserで取得できますが、これはうまくいきますが、この呼び出しを保存して何らかの形でカスタム属性を自動的に取得できるかどうかは疑問です。event

+0

私のプロキシラムダ内にevent.requestContext.authorizer.claimsがあります。httpプロキシでイベントまたはオーソライザオブジェクトへのアクセスを取得するにはどうすればいいですか、私は自分のサーバにヘッダとしてユーザ名を送信します。助けてください –

答えて

1

カスタムクレームについてはこの文書を参照してください。 http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html。あなたはCognitoユーザプールにカスタム属性を追加し、ユーザーのためにそれに値を代入した後、それが勝った理由のカップルがあります

{ 
    "context" : { 
     "role" : "$context.authorizer.claims['custom:myAttribute']" 
    } 
} 
+0

私はこれは "ラムダプロキシの統合"を使用することはできませんと私は自分のボディマッピングテンプレートを記述する必要があると仮定します? 「はい」の場合、ラムダ機能が以前とまったく同じように機能するように(つまり、「プロキシ統合」で)、カスタム属性をコピーして追加できる標準テンプレートはありますか? – thomers

+0

Hmmだから、ラムダプロキシインテグレーション(上記で説明したシナリオに基本的には変わりません)とボディマッピングテンプレートを使用したメソッドを二重にチェックしました。違いはありません。どちらも "authorizer.claims"にカスタム属性が含まれています... 私は前に目が見えなかったか、それ以外のものが変更されました。 私はこの問題を監視し続け、新しいenlightmentsで更新します。 – thomers

+0

更新:それはまだチャームのように働いています。それが以前にはうまくいかなかった理由は考えられません。 – thomers

0

:あなたは、カスタム属性のための方法を以下にコンテキストを定義する必要があります コレクションはrequestContext.authorizer.claimsに表示されます。

最初に最も明白なのは、認証するIDトークンを生成するために使用するアプリクライアントを介してカスタム属性を読みやすくする必要があることです。 AWSコンソールを使用している場合は、App Clients -> Show Details -> Set attribute read and write permissionsにナビゲートして、ラムダに表示させたい属性をチェックします。

属性が表示されない2つ目の理由は、最初の手順を完了しても、ユーザーの主張が生成するIDトークンにエンコードされていることです。つまり、属性を読み込み可能にする前に作成されたIDトークンを使用している場合でも、それらは表示されません。これを解決するには、あなたのラムダの要求コンテキストに属性を表示する必要がある時点で、ユーザーの新しいIDトークンを生成するだけです。

関連する問題