3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Android/Java】Cognitoで認証をするときのメモ

Posted at

Cognitoでユーザーのセッション状態を確認する

try {
    // Amplify プラグインの追加と初期化
    Amplify.addPlugin(new AWSCognitoAuthPlugin());
    Amplify.configure(getApplicationContext());
    Log.i("MyAmplifyApp", "Initialized Amplify");

    // ログイン状態の確認
    Amplify.Auth.fetchAuthSession(
      result -> Log.i("AmplifyQuickstart", result.toString()),
      error -> Log.e("AmplifyQuickstart", error.toString())
    );
} catch (AmplifyException error) {
    Log.e("MyAmplifyApp", "Could not initialize Amplify", error);
}

細かく見ていく

  • Amplify プラグインの追加と初期化
Amplify.addPlugin(new AWSCognitoAuthPlugin());
Amplify.configure(getApplicationContext());
Log.i("MyAmplifyApp", "Initialized Amplify");

AWS Amplify ライブラリに Auth プラグイン(AWS Cognito 認証プラグイン)を追加し、Amplify を初期化する。
Amplify.configure() メソッドは、Amplify ライブラリの初期化を行う。
まず、この処理をしていないと認証処理を実行するところでエラーになる。

  • ログイン状態の確認
Amplify.Auth.fetchAuthSession(
   result -> Log.i("AmplifyQuickstart", result.toString()),
   error -> Log.e("AmplifyQuickstart", error.toString())
);

fetchAuthSession() メソッドは、現在のユーザーセッションの状態を取得する。
成功した場合、result オブジェクトにセッション情報が含まれる。
エラーが発生した場合は、error オブジェクトにエラー情報が含まれる。

  • エラーハンドリング
} catch (AmplifyException error) {
    Log.e("MyAmplifyApp", "Could not initialize Amplify", error);
}

Amplify ライブラリの初期化中にエラーが発生した場合、AmplifyException がスローされ、その詳細をログに出力する。

セッション状態から認証済みユーザーのidTokenを取得する

Amplify.Auth.fetchAuthSession(
    // ユーザーセッションの取得が成功した場合の処理
    result -> {
        AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) sessionResult;
        switch (cognitoAuthSession.getUserPoolTokensResult().getType()) {
            case SUCCESS:
                // ユーザーセッションの取得に成功した場合
                assert cognitoAuthSession.getUserPoolTokensResult().getValue() != null;
                String idToken = cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken();

                // idTokenを使用した処理
                break;
            
            case FAILURE:
                // ユーザーセッションの取得に失敗した場合
                // エラー処理
                break;
        }
    },
    error -> // エラー処理
);

細かく見ていく

  • セッションの状態を確認する
 result -> {
        AWSCognitoAuthSession cognitoAuthSession = (AWSCognitoAuthSession) sessionResult;
        switch (cognitoAuthSession.getUserPoolTokensResult().getType()) {
    

result パラメータは、ユーザーセッションの情報を含むオブジェクト。
このオブジェクトをキャストして AWSCognitoAuthSession オブジェクトに変換する。
次に、cognitoAuthSession.getUserPoolTokensResult().getType() を使用してセッションの状態を確認することができる。

  • ID トークンを取得
    case SUCCESS:
        // ユーザーセッションの取得に成功した場合
        assert cognitoAuthSession.getUserPoolTokensResult().getValue() != null;
        String idToken = cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken();

        // idTokenを使用した処理
        break;

ユーザーセッションの取得が成功(case SUCCESS)した場合、
cognitoAuthSession.getUserPoolTokensResult().getValue().getIdToken() を使用して ID トークンが取得できる。
これは、認証済みユーザーの識別子。
取得した ID トークンを使用した処理を実装したい時はこうやって取得する。

おわりに

AndroidアプリでCognitoを使用した際にidTokenの取得に手こずったのでメモを残してみました。

Cognitoのユーザープールの設定とかアプリとの紐付けとかでも大変苦戦したので、AWS Cognitoのセットアップの記事も今後書きたいと思ってます!

認証機能がんばるぞい!

参考記事

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?