この機能は委任を使用します。2017年6月8日より、アドオンを使用していないテナントでは、デフォルトで委任が無効になります。委任を必要とするアドオンを使用中のレガシーテナントは、引き続きこの機能を使用できます。今後、委任機能が変更されるか、サービスから削除されることがあれば、使用中のお客様が余裕を持って移行できるよう、あらかじめお知らせします。また、委任はカスタムドメインの使用をサポートしていないため、委任に依存する機能をカスタムドメインと共に使うとうまく機能しない可能性があります。
手順4 - Amazon API Gatewayで複数のロールを使用する
この手順では、認証情報に基づいて、ユーザーに異なるAWS IAMロールを割り当てます。- ソーシャル接続で認証するユーザーは、購入者として扱われます。
- データベース接続で認証するユーザーは、管理者として扱われます。
- JavaScript
- Auth0ルール
1.PetPurchase APIリソースを作成する
Amazon API Gatewayコンソールを使用して、Pets APIを選択します。[Resources(リソース)]ページが表示されます。 [Actions(アクション)] と [Create Resource(リソースを作成)] をクリックします。新しい子リソースに「Purchase(購入)
」という名前を付けます。[ Create Resource(リソースを作成) ]をクリックします。
以前、pets
用に「手順2:CORSをセットアップしてAPIを導入する」の「Amazon API Gatewayの保護と導入」で説明した方法で、OPTIONSメソッドをpurchase
リソースに追加します。
ペットを購入するために、PetPurchase
という新しいAWS Lambda関数を作成します。これにより、以下のように、isSold
とsoldTo
の属性がペットに追加されます。
purchase
リソースに追加します。これは、PetPurchase
Lambdaと呼ばれます。値が*
のAccess-Control-Allow-Origin
ヘッダーも忘れずにPOSTメソッドに追加します。これには、「手順2:CORSをセットアップしてAPIを導入する」の「Amazon API Gatewayの保護と導入」で説明されている、メソッド応答/統合応答の構成を使用します。
入力メッセージとして以下を指定して、API Gatewayメソッドをテストします。
2.IAMを使ってPurchasePet APIを保護する
IAMを更新する
APIを保護するため、本チュートリアルのパート2で実行した、新しいロールの追加プロセスを繰り返してください。新しいロールはauth0-api-social-role
とします。
IAMポリシーで保護するこのメソッドのARNは、次のようになります。
/pets/purchase
リソースのPOSTメソッドを選択します。 [Method Request(メソッド要求)] を選択して、 [Authorization Type(認可タイプ)] を「AWS_IAM」に変更します。チェックマークをクリックして設定を保存します。
この時点で2つのロールの定義が終わり、API Gatewayに使用できるようになりました。
auth0-api-role
:ペットの更新を許可auth0-api-social-role
:ペットの購入を許可
Login with Amazonを構成して、Auth0を更新する
Login with Amazon(LWA)を使用してソーシャルロールを作成することができます。 このチュートリアルではLogin with Amazonの使い方をご説明しますが、他のソーシャルプロバイダーも利用できます。- [Auth0 Dashboard]>[Authentication(認証)]>[Social(ソーシャル)]に移動して、 [Create Connection(接続の作成)] を選択します。
- セットアップしたい接続を選択して、同意します。
- ソーシャルIDプロバイダーで
クライアントID
とクライアントシークレット
をコピーして、貼り付けます。 [Attributes(属性)] (と、該当する場合は [Permissions(アクセス許可)] )を選択して、 [Save(保存)] をクリックします。 - [Applications(アプリケーション)] ビューを選択して、この接続を使用する各Auth0アプリケーションの切替を有効にして、 [Save(保存)] を選択します。
https://johndoe.auth0.com/login/callback
のような、Auth0アプリケーションのコールバックURLを必ず入力してください。入力する具体的なURLは、Auth0のヘルプページに記載されています。
[Auth0 Dashboard]>[Applications(アプリケーション)]>[Applications(アプリケーション)]に移動し、設定を表示するアプリケーションを選択します。 [Connections(接続)] ビューを選択して、 [Social(ソーシャル)] セクションに進み、 [Amazon] が有効になっていることを確認します。
APIを導入して、シングルページアプリケーションを更新する
APIを導入する
Amazon API Gatewayコンソールを使用して、再びAPIを導入して新しいJavaScript SDKを生成します。 この時点で、ペット購入を可能にするために必要な構成変更は完了しています。これを運用環境に反映させるには、新たにダウンロードしたSDKをコピーして、pets
フォルダーにある以前のものおよびAmazon S3バケットと置き換えます。
ログインコントローラーロジックを更新して、異なるタイプのユーザーに異なるロールを選択する
ログインコントローラーロジックは、getOptionsForRole
を使用して、異なるユーザーに異なるロールを選択します。委任トークンを取得したら、使用するロール(すなわち、ユーザーが管理者か否か)をAuth0に伝えることができます。
pets/login/login.js
ファイルで、先ほど作成したソーシャルユーザーIAMロールの非管理者ユーザーのrole
とprincipal
の値を変更します。
この時点で、Amazon資格情報 または 先ほど作成したデータベースユーザーを使ってログインできるはずです。UIを確認すると、ソーシャルユーザーにはペットの購入が、管理者ユーザーにはペットの追加と削除ができるようになっていることが分かります。
この機能性をテストするには、/pets/home/home.html
のng-show="isAdmin"
を削除することで、UIの削除ボタンを一時的に非表示にできます。
ホームコントローラーロジックを更新して、ソーシャルユーザーにペット購入を許可する
home.js
でbuyPet
機能を変更して、ペット購入ができるようにします。
Auth0ルールでロール割り当てを適用する
場合によっては、アプリケーションを使用して適切なロールを決定しているけれど(こちらを参照)、セキュリティ上の理由で(ユーザーが必要以上に権限のあるロールにつくのを防ぎたい場合)、ユーザー権限をサーバー側で決定しなければならないことがあります。 Auth0では、この設定をルールを使って行えます。ルールは、自分で定義するサービスロジックのステートメントで、Auth0認証のプロセス中に実行されます。たとえば、以下を行うルールを作成できます。- ブラウザーからアプリケーションにロール情報が渡されないようにする
- 認証ソースに基づいて、委任要求にロール情報を挿入する
ロール割り当てを適用する
ユーザーによって要求されたロールが許可されたものかを確認するルールを追加します。これは、紐づけられているのがソーシャル接続なのか、データベース接続なのかに応じて異なります。- [Auth0 Dashboard]>[Auth Pipeline(Authパイプライン)]>[Rules(ルール)]に移動して、 [Create Rule(ルールの作成)] を選択します。
- [Empty rule(空のルール)] テンプレートを選択します。
-
ルールに「 AWS Pets 」のような名前を付けてから、以下のJavaScriptコードを使ってルールの本文を入力します。
上記のコードは、必ず、実際の統合に合わせて正しい値に調整してください。フィールドは、 [Princial ARN(プリンシパルARN)] 、 [Role ARN(ロールARN)] 、および [Client Secret(クライアントシークレット)] となります。
- 変更を 保存します 。
注意事項
- ルールは、すべての認証のグローバルスコープで実行されます。特定のアプリケーションに紐づけられた認証要求に対してのみ、ロジックを実行する必要があります(これが、使用されているスクリプトがclientIDを求める理由です)。この情報がなければ、Auth0アカウントに紐づけられたすべての認証要求に対してロジックが実行されてしまいます。
- 情報は、コンテキストとユーザーと併せてルールに渡されます。
- ルールに渡されたオブジェクトは拡張できます。上記のコードでは、ルールが要求の本文でロール情報を確認します。ロールは、許可されたロールのaddonConfigurationコンテキストに設定され、常に要求本文の設定に優先されます。