ユースカジノ チャット活用の答えは、CTC。」ユースカジノ 最低出金額 <,AWSセッションレポート<,[SVS404-R1]Amazon ユースカジノ 登録 を使って複数アプリケーションでのログイン/ログアウトを考える

Amazon ユースカジノ 登録 を使って複数アプリケーションでの
ログユースカジノ 登録/ログアウトを考える

はじめに

こんにちは、build service でソリューションアーキテクトをユースカジノ 登録いる丸山です。

今回は Amazon ユースカジノ 登録 を使用して、別々のアプリケーションに同じユーザー情報を使ってログインする方法と global sign out を実施したときのアプリケーション挙動についてご紹介します。

※ 正式名称は Amazon ユースカジノ 登録 ですが、以降 ユースカジノ 登録 と表記させていただきます。

ユースカジノ 登録 とは?

ユースカジノ 登録 とはモバイルや Web アプリケーションを作る際の認証/認可のために使用することができるサービスです。

ユーザーによるサインアップ機能や外部の ID プロバイダーなどと連携したユーザー認証、SAML、OpenID Connect、ソーシャル ID プロバイダー (Amazon、 Apple、 Facebook、 Google、 X など) による認証など、ユーザー認証/認可に必要な機能が一通り揃っており、インフラのスケールも AWS 管理のため運用負荷を最小限に抑えて認証機能を Web/Mobile ユースカジノ 登録に組み込むことができます。

念の為、認証と認可についての補足も記載ユースカジノ 登録起きます。

  • 認証: ユーザーの身元を確認することを意味する
  • 認可: ユーザーにリソースにアクセスするための権限を与えることを意味する

今回は ユースカジノ 登録 の機能のうち、User pool を使った認証の機能について取り上げますが、詳細な説明については下記の公式ドキュメントを参照ください。

https://docs.aws.amazon.com/ja_jp/ユースカジノ 登録/latest/developerguide/ユースカジノ 登録-user-pools.html

1つの User pool を使用して複数のユースカジノ 登録にログイン機能を実装する

まずそれぞれのユースカジノ 登録でログインできるようにする

今回はUser pool は 1 つで、複数のユースカジノ 登録に同じユーザー情報を使用してログインする方法について取り上げます。

コンシューマー向けアプリケーションの場合、最近ではソーシャル ID プロバイダーを利用して認証するものも一般的になっているので上記のようなケースはそれほど多くはないと思いますが、外部の ID プロバイダーを使用できない環境下で、複数のアプリケーションを運用する必要がある場合には ユースカジノ 登録 の User pool を使って実現することもできます。

以降で CDK (TypeScript 版) ユースカジノ 登録必要なリソースを定義する方法を紹介します。
(リソース定義で必要な部分のみ抜き出ユースカジノ 登録記載ユースカジノ 登録います)

まずは User pool の作成です。

今回はログユースカジノ 登録する処理だけを作ることにしますので Identity pool の設定は不要になりますが、ログユースカジノ 登録したユーザーで S3 など AWS リソースにアクセスが必要な場合には Identity pool も設定してください。

const userPool = new UserPool(this, 'UserPool', {
    userPoolName: 'multi-app-test-pool',
    removalPolicy: cdk.RemovalPolicy.DESTROY,
  });

CDK ユースカジノ 登録いる場合、デフォルトの設定が存在するため userPoolName, removalPolicy どちらも設定せずとも使用することはできます。

今回は User pool を見つけやすくするためと、検証終了後に User pool を残す必要がないので上記のような設定にユースカジノ 登録おりますが、これ以外にもカスタマイズ可能な多くの設定が存在しますので、必要に応じて設定を追加ユースカジノ 登録いただければと思います。

次はこの User pool を使用して Web ユースカジノ 登録からログインできるように App client を追加しますが、この App client は使用するユースカジノ 登録毎に作成します。

App client の詳細については下記の公式ドキュメントを参照ください。

https://docs.aws.amazon.com/ja_jp/ユースカジノ 登録/latest/developerguide/user-pool-settings-client-apps.html

userPool.addClient('FirstAppClient', {
    userPoolClientName: 'FirstAppClient',
    authFlows: {
      userSrp: true,
    },
  });

  userPool.addClient('SecondAppClient', {
    userPoolClientName: 'SecondAppClient',
    authFlows: {
      userSrp: true,
    },
  });

今回は 2 つのユースカジノ 登録を使用しますので、2 つの client を作成しました。

これらをデプロイすると、userPoolId、userPoolClientId などは具体的な ID が割り当てられるのでそれらを使って Web ユースカジノ 登録側で認証機能の設定を行います。
今回は Amplify v6 の設定の例で見てみます。

interface AuthConfig {
    ユースカジノ 登録: {
      userPoolClientId: string;
      userPoolId: string;
    };
  }

  type AmplifyConfig = {
    Auth: AuthConfig;
  };

  const amplifyConfig: AmplifyConfig = {
    Auth: {
      ユースカジノ 登録: {
        userPoolId: 'デプロイされたリソースから取得',
        userPoolClientId: 'デプロイされたリソースから取得',
      },
    },
  };

  Amplify.configure(amplifyConfig);

AuthConfig は下記を参考に定義ユースカジノ 登録いますので、より詳しい情報は Amplify のドキュメントを参照ください。

https://docs.amplify.aws/gen1/javascript/tools/libraries/configure-categories/

上記の設定をし、Amplify の auth module が提供ユースカジノ 登録いるsignInmethod を呼び出すことで ユースカジノ 登録 に登録したユーザーでアプリケーションにログインすることができます。

認証情報入力の回数を減らす

ここまでで、それぞれのユースカジノ 登録で username と password を入力して signIn 処理を実施すればログインできますが、同じユーザー情報を使ってログインする必要のある別のユースカジノ 登録の場合、 username と password の入力の回数 (現在は FirstApp で 1 回、SecondApp で 1 回の計 2 回) を減らすことができるとユーザーとしても使い勝手が良くなりそうです。

上記を実現するために以下の変更を加えます。

  • ログイン画面を ユースカジノ 登録 の Hosted UI に変更して各 Web app では username, password の入力をしないように変更
  • 各 Web app ではsignInではなくsignInWithRedirectを使用して ユースカジノ 登録 の Hosted UI にリダイレクトして認証するように変更

ユースカジノ 登録 の Hosted UI を使用するに当たり User pool に domain を追加します。

userPool.addDomain('ユースカジノ 登録Domain', {
    ユースカジノ 登録Domain: {
      domainPrefix: 'multi-app-test-domain',
    },
  });

さらに、各 Web app 用の UserPoolClient に OAuth ユースカジノ 登録追加します。

import { OAuthScope } from 'aws-cdk-lib/aws-ユースカジノ 登録';

  // ...

  userPool.addClient('FirstAppClient', {
    userPoolClientName: 'FirstAppClient',
    authFlows: {
      userSrp: true,
    },
    oAuth: {
      callbackUrls: ['http://localhost:3001'],
      logoutUrls: ['http://localhost:3001'],
      flows: { authorizationCodeGrant: true, implicitCodeGrant: false },
      scopes: [OAuthScope.EMAIL, OAuthScope.OPENID, OAuthScope.PHONE, OAuthScope.ユースカジノ 登録_ADMIN],
    }
  });

  userPool.addClient('SecondAppClient', {
    userPoolClientName: 'SecondAppClient',
    authFlows: {
      userSrp: true,
    },
    oAuth: {
      callbackUrls: ['http://localhost:3002'],
      logoutUrls: ['http://localhost:3002'],
      flows: { authorizationCodeGrant: true, implicitCodeGrant: false },
      scopes: [OAuthScope.EMAIL, OAuthScope.OPENID, OAuthScope.PHONE, OAuthScope.ユースカジノ 登録_ADMIN],
    }
  });

CDK の変更はここまでです。

次は Web app の Amplify ユースカジノ 登録見直します。

type OAuthScope = 'openid' | 'email' | 'phone' | 'profile' | 'aws.ユースカジノ 登録.signin.user.admin';

  // loginWith 以下が追加
  interface AuthConfig {
    ユースカジノ 登録: {
      userPoolClientId: string;
      userPoolId: string;
      loginWith: {
        oauth: {
          domain: string;
          scopes: OAuthScope[];
          redirectSignIn: string[];
          redirectSignOut: string[];
          responseType: 'code' | 'token';
        };
      };
    };
  }

  // 変更なし
  type AmplifyConfig = {
    Auth: AuthConfig;
  };

  // loginWith 以下の設定を追加
  // FirstApp の設定例
  const amplifyConfig: AmplifyConfig = {
    Auth: {
      ユースカジノ 登録: {
        userPoolId: 'デプロイされたリソースから取得',
        userPoolClientId: 'デプロイされたリソースから取得',
        loginWith: {
          oauth: {
            // https:// 部分は不要
            // <ユースカジノ 登録-domain で設定した prefix.auth.<region.amazonユースカジノ 登録.com の形式で記載
            domain: 'デプロイされたリソースから取得',
            scopes: ['openid', 'email', 'phone', 'aws.ユースカジノ 登録.signin.user.admin'],
            redirectSignIn: ['http://localhost:3001'],
            redirectSignOut: ['http://localhost:3001'],
            responseType: 'code',
          },
        },
      },
    },
  };

  Amplify.configure(amplifyConfig);

今回は Web app を起動ユースカジノ 登録いる server が local PC 上の開発サーバーを想定ユースカジノ 登録 localhost の URL を記載ユースカジノ 登録いますが、実際には Web app が配信されている server の URL を設定します。

同様の Amplify 設定を 2 つの Web app で行い、FirstApp で ユースカジノ 登録 の Hosted UI に遷移して username と password を実施します。

その後、SecondApp を開き signInWithRedirect を呼び出すボタンを押すと ユースカジノ 登録 の Hosted UI に遷移したあと既に認証済みの扱いとなり、すぐに redirectSignIn の項目で設定した URL にリダイレクトが行われます。

リダイレクトされたあとの SecondApp では ユースカジノ 登録 のユーザー情報が Amplify の API (getCurrentUser など) を使用して取得可能になっているため、ログインを完了している状態として扱うことができます。

今回は SecondApp 側でもサユースカジノ 登録ユースカジノ 登録のボタンを設置し、それを押すことで認証処理が実行されるようにしましたが、特定の URL や特定のパラメータが付与されている場合は自動的に認証処理を実行するように実装を行うことで、より自然な画面遷移を実現できるのではないかと思います。

サユースカジノ 登録アウト時の挙動の注意

サユースカジノ 登録アウト時の挙動が Web app のログユースカジノ 登録しているユーザーを確認する機能の実装に影響を与えることがありますので、注意事項として共有しておきます。

Amplify の API を見るとsignOutという method には{ global: boolean }というオプションが存在し、これを true で指定したうえで signOut を呼び出すと、同じ UserPool を使用している他のユースカジノ 登録からもログアウトすることができます。

以下、sign out に関する Amplify の公式ドキュメントです。

https://docs.amplify.aws/javascript/build-a-backend/auth/connect-your-frontend/sign-out/

ドキュメントを確認すると、global sign-out が呼び出されると refresh token が無効になるため access token、 id token の更新時にエラーが出るようになりますが、access token と id token の有効期限は token 発行後 1 時間であるため、最長で 1 時間は他のユースカジノ 登録でログインセッションが継続される可能性があります。

access token や id token の期限が切れるまではそのまま動作しても問題なければ特段対策を講じる必要はないのですが、他の端末、他のユースカジノ 登録でログアウトが行われた際、今操作しているユースカジノ 登録でも即座にログアウトさせたい場合には、使用している token (access token か id token) が有効なのかをチェックする必要があります。

Amplify には ユースカジノ 登録 の有効性を確認するためだけの用途の関数は用意されていないため、以下のような方法を検討する必要がありそうです。

  • token の有効性を確認するためのライブラリユースカジノ 登録用する
  • token を使用する API を call ユースカジノ 登録 API 側で token の有効性をチェックユースカジノ 登録もらう

token の有効性を確認するためのライブラリユースカジノ 登録用するについては、ユースカジノ 登録 のドキュメントに JWT の検証のための方法とライブラリが紹介されているので参考にしていただければと思います。

https://docs.aws.amazon.com/ja_jp/ユースカジノ 登録/latest/developerguide/amazon-ユースカジノ 登録-user-pools-using-tokens-verifying-a-jwt.html#amazon-ユースカジノ 登録-user-pools-using-tokens-aws-jwt-verify

2 つ目の方法とユースカジノ 登録紹介したtoken を使用する API を call ユースカジノ 登録 API 側で token の有効性をチェックユースカジノ 登録もらうという方法ですが、今回はちょうど ユースカジノ 登録 に登録された User に設定されている属性情報を取得する必要があったのでこちらを活用してみました。

Amplify の auth から提供されているfetchUserAttributesがこれに該当するのですが、この関数を呼び出すと ユースカジノ 登録-idp の endpoint に通信が行われ、access token が無効だとNotAuthorizedException: Access ユースカジノ 登録 has been revokedというエラーが返却されます。

これを活用ユースカジノ 登録以下のように処理を作成ユースカジノ 登録みました。

{
    try {
      const { userId, username } = await getCurrentUser();
      const { locale } = await fetchUserAttributes();

      const userInfo: UserInfo = {
        userId,
        username,
        locale: locale ?? 'none',
      };

      return userInfo;
    } catch (e) {
      console.warn(`findUserInfo error: `, e);

      // 他のユースカジノ 登録でサインアウトしている場合はこのエラー処理にたどり着くので この app からもサインアウトする
      // 本来であれば Error の詳細を確認して `NotAuthorizedException: Access Token has been revoked`
      // だった場合にのみこの処理を呼び出すほうがよい
      await signOut();

      return null;
    }
  };

こちらの処理をユースカジノ 登録起動時や何かしらのユーザー操作に紐づけて実行されるように実装することで、他のユースカジノ 登録でログアウト処理が行われた場合に即座にログアウトするという挙動を実現することができるようになります。

※ 今回の実装では、開いているユースカジノ 登録が自動的にログアウトする挙動ではなく、ユーザーによる何らかの処理をトリガーに上記の判定処理を回してログアウトする処理になります。ユーザー操作なしに自動的にログアウトさせる必要がある場合はもう少し工夫が必要になります。

まとめ

ユースカジノ 登録 の User pool を活用して、複数のアプリケーションでログインに必要な手間を削減する方法と、複数のアプリケーションから同時にサインアウトする方法についてご紹介しました。

要件によっては ユースカジノ 登録 を利用できないケースなども存在するかもしれませんが、ユースカジノ 登録 が提供している機能と同等の仕組みを自前で用意しようと思うと多大な工数が必要となると思いますので、Web/Mobile アプリの開発を検討中で ユースカジノ 登録 の利用に対して何らかの制約 (社内のルールやネットワーク的にそもそも ユースカジノ 登録 の API と通信できないなど) がない場合には積極的に活用を検討すると良いのではないかと思います。

ユースカジノ 登録は、AWSのビジネス利活用に向けて、お客様のステージに合わせた幅広い構築・運用支援サービスを提供しています。
経験豊富なエンジニアが、ワンストップかつ柔軟にご支援します。
ぜひ、お気軽にユースカジノ 登録ください。

ユースカジノ 登録

関連ウェビナー

【著者ユースカジノ 登録フィール】

丸山 貴嗣(まるやま たかし)

伊藤忠テクノソリューションズ株式会社 ソリューションアーキテクト

自社 Cloud サービスの企画開発からプログラマーに転向し、モバイルユースカジノ 登録、Web ユースカジノ 登録、API 開発など様々な開発プロジェクトに従事。 現在は build service のソリューションアーキテクトとして Cloud を活用したシステム/ユースカジノ 登録の設計/開発の領域で活動中。

丸山 貴嗣(まるやま たかし)

ユースカジノ チャット活用の答えは、CTC。」ユースカジノ 最低出金額 <,AWSセッションレポート<,[SVS404-R1]Amazon ユースカジノ 登録 を使って複数アプリケーションでのログイン/ログアウトを考える

pagetop