Salesforceを認証プロバイダとしてAmazon CognitoでAWSのAPIを叩く方法を書いていきます!
参考URLは以下。今回のソースやら設定方法は、ほぼこちらのパクリです。
Building an App Using Amazon Cognito and an OpenID Connect Identity Provider

Cognitoの基本的な使い方や考え方に関しては以下が詳しいです。

1. 接続アプリケーションの作成

こんな感じで作成します。コールバック先は4のコードを実行する場所になります。あとはopenidがscopeに入っていればOKです。

sfdc-cognito-connectionapp

2. IAMでOpenID Connect Providerを作成

IAMでIdentity Providerを作成します。

sfdc-cognito-create-provider1

Provider TypeはOpenID Connect、Provider URLは本番環境であればhttps://login.salesforce.com、Sandboxであればhttps://test.salesforce.com、マイドメインの環境であればhttps://{マイドメイン}を入力します。Audienceには接続アプリケーションのクライアントIDを入力します。
※現時点ではドメインにハイフンとか入っていると、Cognitoのベリファイ通らなくなるっぽいので、マイドメインにハイフンがある場合は注意して下さい。(利用不可?)

sfdc-cognito-create-provider2

[Next Step]をクリックするとProviderURLのベリファイが行われます。ベリファイが通ったら[Create]ボタンをクリックします。

sfdc-cognito-create-provider3

3. Amazon CognitoでIdentity Poolを作成

CognitoでIdentity Poolを作成します。

sfdc-cognito-identitypool1

Authentication providersではOpenIDのタブを開いて、2で作成したプロバイダを設定します。

作成したRoleにはS3のReadアクセスのポリシーを付与しておきます。

sfdc-cognito-attach-policy

4. コードを作成

以下のHTMLを作成します。基本的にはOpenID Connectのid_tokenをAWS.CognitoIdentityCredentialsのパラメータとしてセットするだけでOK。あとはCognitoがid_tokenのベリファイをして、通ったらAWSの一時的なクレデンシャルを発行してくれます。

実際の動作

こんな感じでホーム画面が表示されて

cognito-sample-flow1

[Salesforceでログイン]ボタンをクリックすると、認証・認可画面が表示されて

cognito-sample-flow2

戻って、[S3 – List Objects]をクリックするとS3のアクセス権限が付与されているので一覧が表示される、という認証あるあるな地味な画面フロー

cognito-sample-flow3

ちなみに、Cognitoでダッシュボードを表示しても、指定したIdentity Providerに対してログインカウントされていませんでした。何故だろう…。

cognito-dashboard