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
Ken'ichirou Kimura
April 20, 2024
Technology
1
1.5k
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
LINE Notify互換のボットを作った話
kenichirokimura
0
100
自分がご機嫌になれる 素敵な場所を守るために
kenichirokimura
2
73
AWSで動くプログラムをC#で書こう ~主にLambdaのお話~
kenichirokimura
1
59
Amazon Q Developerで.NET Frameworkプロジェクトをモダナイズしてみた
kenichirokimura
1
270
Alternative GitHub Secret Manager
kenichirokimura
0
81
SORACOMで実現するIoTのマルチクラウド対応 - IoTでのクリーンアーキテクチャの実現 -
kenichirokimura
0
580
How to use Amazon Cognito user pools with custom UI and also OIDC
kenichirokimura
0
380
あなたも今日からIoTと握手! SORACOM/SORACOM UGの紹介
kenichirokimura
1
130
推し活の1つとしての株購入~みんなでソラコムの株主になろう~
kenichirokimura
0
240
Other Decks in Technology
See All in Technology
SSH公開鍵認証による接続 / Connecting with SSH Public Key Authentication
kaityo256
PRO
2
200
[CATS]Amazon Bedrock GenUハンズオン座学資料 #2 GenU環境でRAGを体験してみよう
tsukuboshi
0
120
React Server Componentは 何を解決し何を解決しないのか / What do React Server Components solve, and what do they not solve?
kaminashi
5
1k
Cline、めっちゃ便利、お金が飛ぶ💸
iwamot
18
17k
パスキー導入の課題と ベストプラクティス、今後の展望
ritou
7
1.1k
Alpine.js を活用した Laravel MPA フロントエンド最適化戦略 / Alpine.js MPA
tzmfreedom
1
830
技術的負債を正しく理解し、正しく付き合う #phperkaigi / PHPerKaigi 2025
shogogg
7
1.6k
AIエージェントキャッチアップと論文リサーチ
os1ma
6
940
Vision Language Modelを活用した メルカリの類似画像レコメンドの性能改善
yadayuki
9
1.1k
技術好きなエンジニアが _リーダーへの進化_ によって得たものと失ったもの / The Gains and Losses of a Tech-Enthusiast Engineer’s “Evolution into Leadership”
kaminashi
0
180
Go製のマイグレーションツールの git-schemalex の紹介と運用方法
shinnosuke_kishida
1
350
View Transition API
shirakaba
1
850
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
Typedesign – Prime Four
hannesfritz
41
2.6k
KATA
mclloyd
29
14k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.4k
Unsuck your backbone
ammeep
669
57k
Testing 201, or: Great Expectations
jmmastey
42
7.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.3k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Designing for Performance
lara
605
69k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
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