Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Ken'ichirou Kimura
April 20, 2024
Technology
1
1.9k
FrontDoorとWebAppsを組み合わせた際のリダイレクト処理の注意点
2024/04/20に開催されたGlobal Azure 2024(東京会場)の10分セッションの資料です。
https://jazug.connpass.com/event/311408/
Ken'ichirou Kimura
April 20, 2024
Tweet
Share
More Decks by Ken'ichirou Kimura
See All by Ken'ichirou Kimura
AI Agentがコードを書く時代に僕たちは何故C#を選ぶのか
kenichirokimura
0
57
設計は最強のプロンプト - AI時代に武器にすべきスキルとは?-
kenichirokimura
1
5.1k
新潟国際アニメーション映画祭の逆シャア上映記念で行われた御大と出渕裕氏の対談に救われた一人のエンジニアのお話
kenichirokimura
0
40
AI時代こそ求められる設計力- AWSクラウドデザインパターン3選で信頼性と拡張性を高める-
kenichirokimura
3
590
マルチクラウド対応サービスでCloudflareを使った話
kenichirokimura
1
39
モック作りのお供にGitHub Coding Agent
kenichirokimura
1
130
モック作りのお供にGitHub Coding Agent
kenichirokimura
1
130
Serverlessだからこそコードと設計にはこだわろう
kenichirokimura
5
1.6k
LINE Notify互換のボットを作った話
kenichirokimura
0
290
Other Decks in Technology
See All in Technology
StrandsとNeptuneを使ってナレッジグラフを構築する
yakumo
1
130
usermode linux without MMU - fosdem2026 kernel devroom
thehajime
0
240
OWASP Top 10:2025 リリースと 少しの日本語化にまつわる裏話
okdt
PRO
3
850
広告の効果検証を題材にした因果推論の精度検証について
zozotech
PRO
0
210
Embedded SREの終わりを設計する 「なんとなく」から計画的な自立支援へ
sansantech
PRO
3
2.6k
Tebiki Engineering Team Deck
tebiki
0
24k
予期せぬコストの急増を障害のように扱う――「コスト版ポストモーテム」の導入とその後の改善
muziyoshiz
1
2.1k
Webhook best practices for rock solid and resilient deployments
glaforge
2
310
Context Engineeringが企業で不可欠になる理由
hirosatogamo
PRO
3
680
(技術的には)社内システムもOKなブラウザエージェントを作ってみた!
har1101
0
310
AI駆動開発を事業のコアに置く
tasukuonizawa
1
390
AIエージェントを開発しよう!-AgentCore活用の勘所-
yukiogawa
0
190
Featured
See All Featured
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.3k
Information Architects: The Missing Link in Design Systems
soysaucechin
0
780
Accessibility Awareness
sabderemane
0
57
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
340
Crafting Experiences
bethany
1
53
The Curse of the Amulet
leimatthew05
1
8.7k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
140
For a Future-Friendly Web
brad_frost
182
10k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
170
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
170
Measuring & Analyzing Core Web Vitals
bluesmoon
9
760
AI: The stuff that nobody shows you
jnunemaker
PRO
2
280
Transcript
FrontDoorとWebAppsを組み合わせた際の リダイレクト処理の注意点 株式会社オルターブース 木村健一郎
自己紹介 株式会社オルターブース クラウドソリューション部 副部長 木村 健一郎(Kenichiro KIMURA) 大学院在籍中に未踏ソフトウェア創造事業に 採択され、その成果を元に設立したスタート アップに20年在籍。
2014年頃からクラウドの世界に触れる中で サーバレスとIoTに魅せられ、JAWS-UG福岡 やSORACOM UG九州のコアメンバーとして コミュニティ活動を行っている。 2020年にオルターブースにジョイン。テッ クリードとしてお客様の支援やプロダクトの 開発に従事している。 家に帰ると6歳の娘と戯れる日々。 AWS Samurai2019受賞 SORACOM MVC2020,2023受賞 Twitter: @show_m001(しょーちゃん) Copyright © Alterbooth Inc. All Rights Reserved. 2
• App Service(WebApps/Functions)の前段にFrontDoorやApplication Gatewayなどのリバースプロキシを置くときはリダイレクト処理に注意しま しょう • よくあるケースはOIDCやEasyAuthでの認証 • 根本的な問題は「App Serviceが、自身が何というドメイン名で動いていると
認識しているか」 • 解決方法は3つ • アプリを改修する(OIDCの場合) • App Serviceの設定をリソースエクスプローラーで変更する(EasyAuthの場合) • カスタムドメインを使う(万能) 本日の結論 Copyright © Alterbooth Inc. All Rights Reserved. 3
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 4 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 5 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 6 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 7 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと 社員だけがアクセスできるようにEntra IDで認証かけて ね!
サンプルケース Copyright © Alterbooth Inc. All Rights Reserved. 8 よし、社内用のWebアプリできたからWebAppsにデプ
ロイしよう 本番に備えてちゃんと前段にはFrontDoor置いてね! WebAppsへの直接アクセスも禁止して。 FrontDoor置いてWebAppsの設定変えて動作チェックも 完了・・っと 社員だけがアクセスできるようにEntra IDで認証かけて ね! EasyAuthでEntra IDの認証使おう・・・よし、設定完了
Copyright © Alterbooth Inc. All Rights Reserved. 9 認証完了したらこの画面になったぞ! 動いてないじゃないか!
彼がやったのは以下の3つです。一体何が悪かったのでしょうか? • FrontDoor経由でWebAppsにアクセスできるようにした • WebAppsへの直接アクセスを遮断した • WebAppsにEasyAuthでの認証を仕掛けた 一体何が起こったのか? Copyright ©
Alterbooth Inc. All Rights Reserved. 10
Copyright © Alterbooth Inc. All Rights Reserved. 11 EasyAuthやOIDCは、以下のような動作をします。 •
未認証のユーザからアクセスされると、認証サーバにユーザをリダイレクトす る • この時、戻って来て欲しいURL(主に自分自身)をredirect_uriというパラメータで渡す • 認証サーバはユーザを認証したら認証結果をつけてredirect_uriにリダイレク トする
Copyright © Alterbooth Inc. All Rights Reserved. 12 Entra IDで認証して、戻ってきたURLがWebAppsへの直接アクセスになってる!!
Copyright © Alterbooth Inc. All Rights Reserved. 13 実際にredirect_uriの値を確認するとWebAppsのURL(ドメイン名)になってます。 FrontDoorのドメイン名でアクセスしてるのに!
https://login.microsoftonline.com/****/oauth2/v2.0/authorize?response_type= code+id_token&redirect_uri=https%3A%2F%2F****.azurewebsites.net%2F.auth %2Flogin%2Faad%2Fcallback&*****
EasyAuthの場合、WebAppsが設定しています。 OIDCの場合はアプリケーションまたは認証フレームワークが設定しています。 この時、WebAppsやアプリケーションは「自分自身がどういうドメイン名で動 いているか」を知っていて、それをredirect_uriに設定します。 redirect_uri、誰が設定している? Copyright © Alterbooth Inc. All
Rights Reserved. 14
WebAppsは基本的にマルチテナントのSaaSなので、1つのインスタンス上で複 数のアプリが動きます。そして、どのHTTPリクエストをどのアプリにルーティ ングするかはホスト名(HTTP Hostヘッダ)で決定されます。 WebAppsはマルチテナントのSaaS Copyright © Alterbooth Inc. All
Rights Reserved. 15 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ site1.azurewebsites.netはアプ リ1、site2.azurewebsites.net はアプリ2だな
この時、アプリ1は自身がsite1.azurewebsites.netと認識しているし、アプリ2 は自身がsite2.azurewebsites.netと認識してるので、これをredirect_uriに設 定します。 Copyright © Alterbooth Inc. All Rights Reserved.
16 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ redirect_uriは自分自身を表 すsite1.azurewebsites.netに しよう redirect_uriは自分自身を表 すsite2.azurewebsites.netに しよう
ここで、WebAppsの前段にFrontDoorが入るとこうなります。 FrontDoorが入るとどうなる? Copyright © Alterbooth Inc. All Rights Reserved. 17
アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ site1.azurewebsites.netはアプ リ1、site2.azurewebsites.net はアプリ2だな https://site1.azurefd.net/ https://site2.azurefd.net/ site1.azurefd.netはsite1.azurewebsites.netのWebAppへ、 site2.azurefd.netはsite2.azurewebsites.netのWebAppへ転 送すればいいな
FrontDoorがあってもアプリ1は自分がsite1.azurewebsites.netだと思っている し、アプリ2は自分がsite2.azurewebsites.netだと思っています。 つまり Copyright © Alterbooth Inc. All Rights Reserved.
18 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ redirect_uriは自分自身を表す site1.azurewebsites.netにしよう redirect_uriは自分自身を表す site2.azurewebsites.netにしよう
特に指定しない場合はアクセスする際にDNSに問い合わせる名前とHostヘッダ は一致しますが、これを変更することもできます。 • DNS上の名前は「これからアクセスするリソースのIPアドレスを取得するた め」に使う • つまりOSI参照モデルで言えばL3 • HostヘッダはWebサーバ(WebApps)やリバースプロキシー(FrontDoor)に、 「これからどういうWebリソースにアクセスしたいか」を指示するために使
う • つまりOSI参照モデルで言えばL7 DNS名とHostヘッダ Copyright © Alterbooth Inc. All Rights Reserved. 19
本質的に言えば、WebAppsに「自身のドメイン名がFrontDoorのものと同じで ある」ということを認識させれば良いことになります。 そのためには、3つの方法があります。 どうしたら解決できる? Copyright © Alterbooth Inc. All Rights
Reserved. 20
リバースプロキシのホスト名はX-Forwarded-Hostというヘッダに入っています。 OIDCの場合は、これをredirect_uriに使うようにアプリを改修します。 1.アプリケーションを改修する(OIDCの場合) Copyright © Alterbooth Inc. All Rights Reserved.
21 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ redirect_uriはリバースプ ロキシを表す site1.azurefd.netにしよう redirect_uriはリバースプ ロキシを表す site2.azurefd.netにしよう
EasyAuthの場合はredirect_uriを設定してるのはWebAppsのため、改修はでき ません。WebAppsに「前段にリバースプロキシーがいるよ」ということを教え る必要があります。 2.WebAppsのproxy設定を変える(EasyAuthの場合) Copyright © Alterbooth Inc. All Rights
Reserved. 22 アプリ1 アプリ2 https://site1.azurewebsites.net/ https://site2.azurewebsites.net/ https://site1.azurefd.net/ https://site2.azurefd.net/ リバースプロキシーがいるから redirect_uriはリバースプロキシを 表すsite1.azurefd.netにしよう リバースプロキシーがいるから redirect_uriはリバースプロキシ を表すsite2.azurefd.netにしよう
Copyright © Alterbooth Inc. All Rights Reserved. 23 portalから設定できないので、リソースエクスプローラー (https://resources.azure.com/)
からアクセスします。 該当のリソースのconfig>authSettingsV2にアクセスします。
Copyright © Alterbooth Inc. All Rights Reserved. 24 forwardProxyという設定を「“convention”:“NoProxy”」から 「“convention”:“Standard”」に変えます。
FrontDoorとWebAppsに、同じカスタムドメインを設定します 3.カスタムドメインを設定する Copyright © Alterbooth Inc. All Rights Reserved. 25
アプリ1 アプリ2 https://example.com/ https://example.net/ example.comはアプリ1 のカスタムドメインだ からそちらへ example.netはアプリ2 のカスタムドメイン だからそちらへ site1.azurewebsites.netに Hostヘッダexample.comでアクセス site2.azurewebsites.netに Hostヘッダexample.netでアクセス
FrontDoorとWebAppsに、同じカスタムドメインを設定します 3.カスタムドメインを設定する Copyright © Alterbooth Inc. All Rights Reserved. 26
アプリ1 アプリ2 https://example.com/ https://example.net/ redirect_uriは自分自身 を表すexample.comに しよう redirect_uriは自分自 身を表すexample.net にしよう site1.azurewebsites.netに Hostヘッダexample.comでアクセス site2.azurewebsites.netに Hostヘッダexample.netでアクセス
• example.comやexample.netといったカスタムドメインのDNS設定は、 FrontDoorに向けます • バックエンド設定で、WebAppsに接続する際のHostヘッダをカスタムドメイ ンにします • 接続先ホスト名はWebAppsのドメイン名のままにします • WebAppsにカスタムドメインを設定する際はCNAMEの設定でのドメイン認
証が必要なので、順番としてはWebApps→FrontDoorの順でカスタムドメイ ンを設定します • AppService PlanはB1以上が必要です • この方法だと、WebAppsもアプリケーションも自身のホスト名をカスタムド メインと認識します • Hostヘッダがカスタムドメインになるから Copyright © Alterbooth Inc. All Rights Reserved. 27
• App Service(WebApps/Functions)の前段にFrontDoorやApplication Gatewayなどのリバースプロキシを置くときはリダイレクト処理に注意しま しょう • よくあるケースはOIDCやEasyAuthでの認証 • 根本的な問題は「App Serviceが、自身が何というドメイン名で動いていると
認識しているか」 • 解決方法は3つ • アプリを改修する(OIDCの場合) • App Serviceの設定をリソースエクスプローラーで変更する(EasyAuthの場合) • カスタムドメインを使う(万能) 本日の結論 Copyright © Alterbooth Inc. All Rights Reserved. 28
つまらない世界からもっと刺激のある世界へ変化させよう! Copyright © Alterbooth Inc. All Rights Reserved. 29