質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

3643閲覧

AWSのS3,CloudFront,Cognitoを利用して、セキュアなwebページを作成したい。

voyagerleona

総合スコア5

Amazon CloudFront

Amazon CloudFrontは、AWSの高速且つ高パフォーマンスなコンテンツ配信(CDN) サービス。容量の大きいコンテンツをキャッシュさせてWebサーバの負荷を軽減し、サーバダウンの防止など安定した配信が可能になります。

OAuth 2.0

OAuth 2.0(Open Authorization 2.0)は、APIを通して保護されたリソース(サードパーティのアプリケーション)へアクセスする為のオープンプロトコルです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/06/03 00:10

前提・実現したいこと

AWSのS3,CloudFront,Cognitoを利用して、セキュアなwebページを作成したい。
CloudFrontデフォルトのホストされたUIで認証後、S3に配置したコールバックURLへ遷移した際に、そのコールバックURLを利用して
認証されていない別PCなどで同じコールバックURLを叩いても、何らかのエラーで閲覧できないようにしたい。

発生している問題・エラーメッセージ

CloudFrontデフォルトのホストされたUIで認証後、userPool.getCurrentUser()でcognitoUserが取得できれば、
index.html側も閲覧できるようにし、それ以外の場合は認証画面へリダイレクトする仕組みにしている。
認証後コールバックURL側でcognitoUserを取得しようとすると、nullが返却されて認証画面へリダイレクトされてしまう。
CloudFrontデフォルトのホストされたUIで認証した際に、cognitoUserを取得する方法があるか?
それともCloudFrontデフォルトのホストされたUIを使用せずに、独自で認証画面を用意して、ログインしなければだめか?

### 該当のソースコード (() => { // Amazon Cognito 認証情報プロバイダーを初期化します AWS.config.region = "ap-northeast-1"; // リージョン AWS.config.credentials = new AWS.CognitoIdentityCredentials({ IdentityPoolId: "hogehoge", }); // ユーザープールの設定 const poolData = { UserPoolId: "ap-northeast-1_hogehoge", ClientId: "hogehoge" }; const userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData); const cognitoUser = userPool.getCurrentUser(); // 現在のユーザー 言語 javascript,html ### 試したこと OAuth 2.0の設定、ID系が誤っていないかどうかの確認等は実施済。 必要なライブラリの読み込み等は確認済。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

下記をjsでやることでとりあえず解決。
URLのトークンを切り出すとユーザーIDとか色々取れる。

const idToken = (() => {
// ここはカスタマイズというか、もっとうまいことやったほうがいいかも
const params = new URLSearchParams(location.hash.slice(1));
return params.get("id_token");
})();

// Amazon Cognito 認証情報プロバイダーを初期化
AWS.config.region = "ap-northeast-1"; // リージョン
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: "hogehoge",
Logins: {
["cognito-idp.[region].amazonaws.com/[UserPoolID]"]: idToken,
}
});

if (idToken === null) {
// エラー
} else {
// 正常
}

AWS.config.credentials.get(function() {
const secretAccessKey = AWS.config.credentials.secretAccessKey;
if (secretAccessKey === undefined) {
console.log("login failed");
location.href = [認証画面URL]
} else {
console.log("login successful");
}
});

投稿2020/06/03 03:18

voyagerleona

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問