金融系アプリでブラウザ起動するのはなぜ?

投稿者: | 2024年8月27日

モバイル開発におけるセキュアな認証方法:2024年の展望

AndroidでもiPhoneでも金融系のアプリではブラウザが起動してログイン、振込、等と言うことを経験したことがあると思う。その理由はセキュリティで、2016年頃には始まっていた。2024年の現在、その辺りがどうなっているか、開発者としてどう対応すべきかについて纏めた。

1. 序論

モバイルアプリケーションにおけるユーザー認証は、セキュリティと使いやすさの両立が求められる重要な要素である。本文書では、AndroidとiOSプラットフォームにおけるセキュアな認証方法について、2024年8月現在の最新の方針と推奨される実装手法を概説する。

2. プラットフォーム別の方針

2.1 Android (Google)

Googleは2021年以降、WebViewを使用した認証方法を制限し、より安全な代替手段を推奨している。

  • 制限される使用ケース
    • ユーザーログイン
    • アカウント作成
    • 金融取引
    • 機密情報の閲覧
  • 推奨される方法
    • Chrome Custom Tabs
    • Android App Links

2.2 iOS (Apple)

Appleは、WebViewベースの認証に対して明示的な禁止は行っていないものの、より安全な代替手段を推奨している。

  • 推奨される方法
    • ASWebAuthenticationSession
    • Universal Links
    • Sign In with Apple

3. プラットフォーム別の推奨実装手法

3.1 Android

  1. Chrome Custom Tabs

    Chrome Custom Tabsは、アプリ内でWebコンテンツを表示する際に推奨される方法である。

    実装例:

    import androidx.browser.customtabs.CustomTabsIntent
    import android.net.Uri
    
    fun openCustomTab(url: String) {
       val customTabsIntent = CustomTabsIntent.Builder().build()
       customTabsIntent.launchUrl(context, Uri.parse(url))
    }
    
  2. Android App Links

    App Linksを使用することで、特定のURLをアプリで直接開くことができ、フィッシング攻撃のリスクを軽減できる。

    実装手順:

    • AndroidManifest.xmlにintent-filterを追加
    • Digital Asset Linksファイルをウェブサーバーに配置

3.2 iOS

  1. ASWebAuthenticationSession

    iOS 12以降で推奨される、セキュアなWeb認証のための方法である。

    実装例:

    import AuthenticationServices
    
    func startAuthentication() {
       let url = URL(string: "https://your-auth-url.com")!
       let session = ASWebAuthenticationSession(url: url, callbackURLScheme: "your-callback-scheme") { callbackURL, error in
           // Handle authentication result
       }
       session.presentationContextProvider = self
       session.start()
    }
    
  2. Sign In with Apple

    iOS 13以降で利用可能な、Appleが提供する統合認証システムである。

    実装手順:

    • Xcode projectにSign In with Apple機能を追加
    • AuthenticationServices frameworkをインポート
    • ASAuthorizationAppleIDButtonを実装

4. クロスプラットフォームの考慮事項

  1. OAuth 2.0 / OpenID Connect

    両プラットフォームで広く支持される標準プロトコルであり、セキュアな認証フローを実装できる。

  2. HTTPS通信の強制

    すべての認証関連の通信でHTTPSを使用し、中間者攻撃のリスクを軽減する。

  3. 多要素認証(MFA)の実装

    パスワードに加え、生体認証やワンタイムパスワードなど、複数の認証要素を組み合わせる。

5. セキュリティベストプラクティス

  1. 証明書ピンニング

    特定の証明書や公開鍵をアプリにハードコードし、中間者攻撃を防ぐ。

  2. 安全なデータストレージ

    認証トークンなどの機密情報は、KeychainやEncrypted SharedPreferencesなど、プラットフォーム提供のセキュアなストレージに保存する。

  3. 定期的なセキュリティ監査

    アプリのセキュリティを定期的に評価し、新たな脆弱性に対処する。

6. 結論

2024年現在、モバイルアプリにおける認証は、プラットフォーム提供のセキュアな方法を利用することが強く推奨される。WebViewベースの認証は、特にAndroidにおいて制限されており、代替手段の採用が必要である。開発者は、各プラットフォームの最新のガイドラインに従いつつ、クロスプラットフォームでの一貫性とセキュリティを考慮した実装を行うべきである。

参考文献

  1. Google Developers. (2024). Android Security Best Practices.
  2. Apple Developer. (2024). Authentication Services Framework.
  3. OAuth 2.0. (2024). OAuth 2.0 for Native Apps.

コメントを残す