スマホ版ポータルアプリを作りたい。(MS-SSO編)

2024 年 12 月 27 日 by sugakir

はじめに

この取り組みは、最近当社でグループウェアの見直しを行なっており、
運用が変わる点もあるため、使いやすいスマホアプリがあればいいな。と
個人的にノウハウを形成していっているところです。
使用技術はFlutterです。
今回は、SSO認証として、MicrosoftのSSO機能(MSAL)を実装したいと思います!
(本記事では、iOSのみご紹介します。)

事前準備(ほぼ本題)

FlutterアプリでMicrosoftのSSOを行うには、Azureにアプリを登録する
必要があります。この後のコーディングはそれほど難しくないですが、
ここがかなり厄介です。

検索バーで、アプリの登録と検索
新規登録をクリック
名前とスコープを設定

ここまでで、アプリの登録が完了しました!

次にSSO認証で使用するリダイレクト URIを発行します。

サイドバーメニューから、管理>認証に遷移します。

プラットフォームを追加をクリック
iOSまたはmacOSをクリック

ここから2Stepはお見せできませんが、Bundle IDを入力すると、
以下のような画面にリダイレクトURIが発行されます。

Xcode側の実装

Info.plistファイルに以下のPermissionを追加します。

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>msauth.{BundleID}</string>
            </array>
        </dict>
    </array>

Flutter側の実装

Flutter側で行うことは、APIの呼び出しのみです。

// pubspec.yaml
  msal_flutter:

// 認証処理
  Future<void> _signIn() async {
    try {
      final clientId = "{AzureのクライアントID}";
      final redirectUri = '{作成したリダイレクトURI}';
      final auth = 'https://login.microsoftonline.com/{AzureのテナントID}';

      pca = await PublicClientApplication.createPublicClientApplication(
        clientId,
        iosRedirectUri: redirectUri,
        authority: auth,
      );
      const List<String> scopes = ['user.read']; // 権限設定
      await pca.acquireToken(scopes);

      context.go(AppStrings.homePagePath);
    } catch (e) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('サインインに失敗しました: $e')),
      );
    }
  }

動作確認

サインインボタンを押す
OSから許可するか聞かれるので、続ける
キャンセルを押すと。。。
ログイン画面にとどまります。

上記のようにエラーメッセージを出すかどうかはお好みです。

続行を押すと。。。

サインイン出来ました!
(私の場合、トークンが生きていたので、そのままホームに遷移
しましたが、初回、認証切れの際は、ID,PASS入力が必要です。)

まとめ

iOS、Android個別でのMSALは、よく技術記事等を見ることが
あるので困りませんが、FlutterでMSALを行うのは少し大変
でした。
FlutterでMSAL認証を実装したい方はぜひご参考ください!

タグ: , , ,

TrackBack