先日紹介したWindows Azure Toolkit for Windows Phone 7を実際に使ってみました。
※ Windows Phone Developer Toolsも入れておきましょう。
先日紹介したWindows Azure Toolkit for Windows Phone 7を実際に使ってみました。
※ Windows Phone Developer Toolsも入れておきましょう。
お手紙ありがとうございます。
すっかり春の陽気で過ごしやすくなりましたね。まだまだ朝晩は冷え込みますのでお体にはお気を付けください。あ、MVPおめでとうございます。
おいらといいますと、おかげさまで元気に忙しく過ごさせて頂いています。
さて例のWCF Data ServicesをFormsAuthenticationでアレコレしてゴニョゴニョする件ですが、ASP.NET MVCのアクションメソッドでこうするとできるんだ~!という新しい知見が開けて大変興味深かったです。
ASP.NET MVCのアクションでやる場合、楽ちん・便利という視点ではなく、アプリケーション全体として見てどうなのかな?と単純に思いました。
WCF Data Servicesのみで完結させた場合は以下のような特徴が考えられます。
ではASP.NET MVCのアクションの場合はというと。
などがありそうです。まぁどちらもにわかな人が考えた内容なので間違ってるかもしれませんが。。
個人的に思うのはやっぱりアプリケーションの構成をどうするか、認証方式をどうするか/したいか、が一番大きなポイントでしょうか。
もともとはおいらが求めた要件にマッチするのがWCF Data Servicesで完結させる方法だった、というのとWebアプリ/データアクセス/認証をできるだけ分離しておきたかったというのが大きなポイントで以前の投稿のような形式になった背景がありますので、単純な比較は難しいですね。(Federation認証等ともからんじゃったり色々…)
ということでケースバイケースという魔法のことばでぽぽぽーん集約してしまいますが、ボツネタにならず公開して頂いてよかった!と思いますです。
あぁ、この内容こそ没ネタにすべきだったかなw
あと関係ないですがTHE CODE PROJECTはいろいろ勉強になりますね。
ではでは。
だいぶ前にWCF Data ServicesでForm認証をやりましたが、Cookieで認証してるんだからいずれCookieの期限が切れるわけです。
で、ASP.NETではCookieの自動更新を有効にするためのフラグ(slidingExpiration)があり、このフラグをtrueにしておくことで期限が半分過ぎた後にアクセスがあると、新しいCookieを発行してくれるようになります。
(レスポンスヘッダの”Set-Cookie”に新しいCookieが付与される)
<authentication mode="Forms"> <forms name="sample" timeout="1440" cookieless="UseCookies" slidingExpiration="true" /> </authentication>
さてブラウザ等はこの辺の処理を自動的にやってくれますが、アプリだと手動でやらないといけませんね。
ではEntityFrameworkではどうでしょう?
うーんそのまんまだとCookieどころかHTTPのレスポンスさえ見れませんね。
じゃぁどうしよう?と調べたところエンティティをQueryOperationResponseにキャストしてあげると良いみたいです。こんな感じ↓
ServiceReference1.Entities context = new ServiceReference1.Entities(new Uri("http://localhost/test.svc")); context.MergeOption = MergeOption.NoTracking; context.IgnoreMissingProperties = true; var nodes = context.Users; QueryOperationResponse<ServiceReference1.Users> response = nodes.Execute() as QueryOperationResponse<ServiceReference1.Users>; if (response.Headers.Keys.Contains("Set-Cookie")) { //response.Headers["Set-Cookie"] に新しいCookieが入ってる } foreach (var user in response) { Console.WriteLine(user.DisplayName); }
Cookieの有効期限が半分以上過ぎてからアクセスすると、レスポンスヘッダにちゃんとSet-Cookieが付与されているのがわかりますね。
あとはこの値をゴニョゴニョしておけばOKです。
※WCF Data Servicesで認証Cookie以外のCookieははかないと思いますが…一応注意ください。
これでForm認証するWCF Data Servicesとクライアントはばっちり?ですね!
WCF Data ServicesはHTTPベース(ODataやJSON等)を使用してデータの送受信ができる強力な仕組みです。このあたりの説明はとりあえず割愛。
で、便利が故にぽんぽん使ってるとそれなりに転送量や帯域も消費するわけでして。でHTTPベースであればgzipで圧縮して通信したいと思うのが世の常。
というわけでさくっとgzip圧縮する方法です。
前回の続きです。前回はこちら → Azure AppFabric ACS v1+ADFS+WCF Data Services
今回は実際にフェデレーション認証を利用するサービスとクライアントを作成します。
サービス側はWCF Data Servicesを利用して、トークンが有効な場合のみデータ(Entity)を返すようにします。
クライアントはActive Federation認証を行いますので、ADFS2.0とACSv1を使用し得られたトークンと利用してWCF Data Servicesにアクセスしデータを取得します。
ではまずサービス側から。
今日はWindows Azure AppFabric Access Controle Service v1 (現行)(以下ACSv1)とActive Directory Federation Services 2.0 (以下ADFS)を組み合わせてWCF Data ServicesをActive Federation認証してみようと思います。
WCF Data Servicesを利用するクライアントは今回はブラウザではなく、Windowsアプリとします。なのでブラウザが自動リダイレクトして認証画面に飛ぶようなPassive Federation認証ではなくActive Federation認証です。(自前でトークンのやり取りします)
そもそも、現行のACSv1はPassive Federationに対応していませんし、マルチテナントを考えるとちょっとWindows Identity Foundation(以下WIF)についてるFederation Utilityは使えないのでほぼコードでいろいろ制御することにします。
はっきりいって、ACSv2が出るまでのつなぎですね。ちなみに今回のネタはWIF トレーニングキットに付属するハンズオンラボ(IntroAppFabricAccessControl)を見ながらやればある程度できると思います。
今回想定している環境はこんな感じです。
※見ての通り(?)、WCF Data ServicesとSQL ServerはWindows Azure+SQL Azureでもまったく問題ありません。
では準備から。
前回のPOSTで書き忘れたこと。
インターセプターを使えば特定の列だけ値を変える等できます。OData and Authentication – Part 7 – Forms Authentication にも記載されていますが、たとえば認証されているときだけセンシティブな情報を返すとか。
認証ユーザーやロールに応じて1つのWCF Data Services で柔軟に操作範囲を変えたりできるのはすごく便利ですね。
あと忘れてましたがASP.NET開発環境だとうまくフォーム認証が動きませんでした。(.adxが見れない?)このあたりあまり情報なくてちょっと諦め気味…
面倒だけどデバッグはIISのワーカープロセスにアタッチする等したほうがいいのかも…?
またSQL Serverへの接続は手抜きですが、アプリケーションプールのユーザー等にアクセス権限無いと無駄に怒られますので注意。
最後に追加でいろいろリンクを置いておきます。
ちと調べてて悩んでたので一応吐き出しておきます。
WCF Data Services を使うとOData形式等で強力なデータ連携が可能になります。
特に Entity Framework や LINQとの相性は抜群です。
でもむやみやたりにデータ公開したくないわけで。特にクラウドに置いたりする場合は。
じゃやっぱり認証かけたいよね、ということで今回は以下のケースで考えてみます。
イントラネット等でWindows統合認証が使えるならこんな苦労はないのかも知れませんが、プログラム内から操作する方法だと取れる手法は限られてきます。
で、今回はお手軽にフォーム認証を使って Cookie ベースで制限をかけたいと思います。(まぁなんというか、やってることは OData and Authentication – Part 7 – Forms Authentication と変わりません。)
※ Cookie ベースならまぁローカルに保存してても許してくれそうですし。
ADFSまわりちまちま見てる。なんか名称が違うなぁとか思ってたら、 Microsoft Service Connector って WAP AppFabric Access Control Services になったのかな???
なんにしろ頭に入りきらないので進捗悪し。
あと以前紹介した「クラウド セキュリティ & プライバシー――リスクとコンプライアンスに対する企業の視点」本が届いたのでこちらも見てる。時間ねぇ。
↓元ネタ
Great New Article on Windows Azure Diagnostics – MikeKelly’s WebLo
既存AppのAzureへの移行など面白そうな記事も多いです。
実運用時はログの扱いは必須になるだろうから、注意ポイントですね~
どんどん充実してきてますね。感謝です!
開発者側からの視点としてはビルドの自動化ができたら次はタスクの管理やらソース管理、管理者側からはパフォーマンス管理あたりなのかな?次が楽しみです。
( ´Д`)=3 そろそろ寝よう。
金曜日は新人歓迎会でした。午前様でしたが物理セキュリティはかけられていませんでした⊂(^ω^)⊃ セフセフ!!
某氏みたいになるところでした。
土曜日はPC起動してのんびりヱヴァ新劇場版 破をみたりしてたら、あれPCがログオン画面に・・・
気づいたら再起動してました。大阪は気温が29度とかあるわけで、熱暴走なんかなーと思い見たりしてたのですけど
うーん。グラボの温度がちょっと高いけど普通っぽい。
でいろいろ見てると、
ということで電源容量不足な気がしてきた・・・でもこの数日で追加した機器なんて無いしなぁ。なんだろう。やっぱ気温でファンとかもろもろ逝ってんのかな・・・
もし電源交換とかなると痛い出費。。どうせなら全部刷新するか・・・!内緒で!でもお金無いので夢想だけど(´・ω・`)
VS 2010 comes with MVC 2, but it’s not a part of the .NET Framework proper. This means that if you go download the .NET Framework 4 redistributable, it will not include the MVC 2 runtime.