Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥

MapLibre&EntraIDでAzureMapsをセキュアに使おう

 MapLibre&EntraIDでAzureMapsをセキュアに使おう

2025/12/20(土)に開催された .NETラボ 勉強会 2025年12月( https://dotnetlab.connpass.com/event/371159/ ) に参加した時に当日受付LTで発表した資料です。 #dotnetlab

Avatar for なかしょ

なかしょ

December 20, 2025
Tweet

More Decks by なかしょ

Other Decks in Technology

Transcript

  1. 自己紹介 • なかしょ(中島進也) @nakasho_dev • 所属:NTTテクノクロス株式会社 デジタルトランスフォーメーション事業部 • 業務:MaaS関連のスマートフォンアプリ開発担当 •

    趣味: ➢妻とモンハンデート ➢IT関連の勉強会(主にモバイル系 or アジャイル系 or Microsoft系) ➢技術コミュニティの運営スタッフ ✓eXtreme Programming Japan User Group(XPJUG) 2019〜 ✓TDD BootCamp Online (TDDBC) 2020~ ※本資料は私個人の意見であり、所属企業・部門見解を代表するものではありません。
  2. 5 以前のLTでAzure Mapsタイル取得APIを利用し MapLibreで表示 https://atlas.microsoft.com/map/tile?api-version=2022-08-01&tilesetId={tilesetId} &zoom={zoom}&x={x}&y={y}&subscription-key=SecretKey { "version": 8, "name":

    "Azure Maps Style", "sources": { "azure-maps": { "type": "raster", "tiles": [ "https://atlas.microsoft.com/map/tile?subscription-key=SecretKey&api-version=2022-08-01&tilesetId=microsoft.base.hybrid.road&zoom={z}&x={x}&y={y}" ], "tileSize": 256 } }, "layers": [ { "id": "azure-maps-layer", "type": "raster", "source": "azure-maps", "minzoom": 0, "maxzoom": 22 } ] } Subscription-keyを直指 定は漏洩の恐れが大きい
  3. Azure Maps 認証方式 6 • 共有キー認証 ➢最もシンプルな方法 ➢クライアントアプリに埋め込む場合はセキュリティリスクあり • Microsoft

    Entra ID 認証 ➢OAuth 2.0 アクセストークンを使用 ➢ユーザーまたはアプリケーションの ID に基づく認証 ➢RBAC(ロールベースアクセス制御)と統合可能 • Shared Access Signature (SAS) トークン認証 ➢時間制限付きのトークンを生成 ➢特定の操作やリソースへのアクセスを制限可能 • マネージド ID 認証 ➢Azure リソース(VM、App Service など)からの認証 https://learn.microsoft.com/ja-jp/azure/azure-maps/azure-maps-authentication
  4. iOS側で設定する認証等の情報 11 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST

    1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CLIENT_ID</key> <string>dd91b2d7-6aaf-4fdd-95cb-xxxxxxxxx</string> <key>TENANT_DOMAIN</key> <string>nakashoxxxxxx.onmicrosoft.com</string> <key>POLICY_NAME</key> <string></string> <key>REDIRECT_URI</key> <string>msauth.org.ukky.HowToEntraIos://auth</string> <key>SCOPES</key> <array> <string>https://atlas.microsoft.com/user_impersonation</string> </array> <key>AZURE_MAPS_CLIENT_ID</key> <string>72f36e60-412b-491f-99b1-xxxxxxx</string> </dict> </plist>
  5. Azure MapsへのリクエストにAccesssTokenを付与 12 let sessionConfig = URLSessionConfiguration.default sessionConfig.httpAdditionalHeaders = [

    "Authorization": "Bearer \(token)", "x-ms-client-id": azureMapsClientId ] MLNNetworkConfiguration.sharedManager.sessionConfiguration = sessionConfig MapLibre iOSは、現状ホストを指定してHeaderを追加でき ないため、Map使用時のみ有効にする必要がある https://github.com/maplibre/maplibre-native/issues/126
  6. 14

  7. まとめ 15 • Map Libreを使うことでAzure Mapsのネイティブ表示は可能 ➢MAUIも非公式である(https://github.com/bjtrounson/maplibre-maui) ➢タイルデータによってはStyleのカスタマイズが必要 • Azure

    Mapsへの認証はSubscription-Keyではなく、Entra認証 を採用しよう ➢Microsoftの堅牢なセキュリティの仕組みを有効活用しよう • 今回のサンプルソース ➢https://github.com/nakasho-dev/HowToEntraIos/tree/azuremaplibre