Windows.Web.Http.HttpClient
とWebAuthenticationBrokerで
Webサービスアクセス
@第9回まどべんよっかいち
2014/7/26
青木 宣明(@kumar0001)
今日の目標
Windowsストアアプリにおいて
Windows.Web.Http.HttpClientと
WebAuthenticationBrokerを使って
OAuth認可&RESTアクセスをする
Windows Phone 8.1でWABを使うと
きの注意点を知ってもらう
WPFで使えるSystem.Net.Http名前
空間のHttpClientを知ってもらう
Webサービスへのアクセス
OAuthでリソースへのアクセス権限を得る
• リクエストトークンの取得
• ユーザ承認画面にアクセスしてリソースアクセス許可を得る
• アクセストークンを取得
リソースアクセスのURIにHTTPアクセスする
• 認証情報の設定
• 非同期でのHTTPアクセス
処理の流れ
HttpClient
HttpClient
WebAuthenticationBroker
OAuthとは
Oauthって何?
• OAuth is an open standard for authorization.
OAuth provides client applications a 'secure
delegated access' to server resources on
behalf of a resource owner.
http://en.wikipedia.org/wiki/OAuth
つまり
• サーバ上のリソースへのアクセス権を認可
のためのプロトコル
OAuthによるWebサービスアクセス
Twitter (OAuth 1.0a)
①
②
③
④
OAuthによるWebサービスアクセス
IIJmio (OAuth 2.0)
(Implicit Grant)
ここらでデモでも
OAuthの処理
HTTP GET/POSTでOAuthのエンドポイントにアクセスする
• ヘッダなどへの認証情報の設定
• 非同期アクセス
承認画面のURIにアクセスして、その結果のリダイレクトURIを受け取る
• ブラウザでのアクセス
• リダイレクトURIの解析
共通した処理
HttpClient
WebAuthenticationBroker
Windows.Web.Http.HttpClient
RESTでのWebサービスアクセスに便利
• GET/POST/PUT/DELETEに対応した非同期メ
ソッド
GetAsync/PostAsync/PutAsync/DeleteAsync
• 連鎖可能なフィルタ(IHttpFilter)
認証情報の付加など、HTTP通信を補助的に加工する処
理を追加できる
http://msdn.microsoft.com/en-us/library/windows/apps/bg182884.aspx
HttpClientのコンストラクタ
フィルタを指定
フィルタを指定しない場合はデフォルトの
HttpBaseProtocolFilterが使用される
IHttpFilerを実装するクラス
IHttpFilter
2個のメソッドを実装
・SendRequestAsync: HTTPリクエストを送信して結果を返す
・Dispose: リソースの廃棄
ヘッダに認証情報を
追加している
HTTPアクセス
GETの場合
GETアクセスはGetStringAsync以外に3パターン
・GetAsync / GetBufferAsync / GetInputStreamAsync
(結果の返し方が異なる)
結果を文字列で取得する版
戻り値は IAsyncOperationWithProgress<String, HttpProgress>
HTTPアクセス
POSTの場合
IHttpContentを実装したクラスをPostAsyncに指定する
戻り値は
IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress>
HTTPアクセス
PUTの場合
IHttpContentを実装したクラスをPutAsyncに指定する
戻り値は
IAsyncOperationWithProgress<HttpResponseMessage, HttpProgress>
IHttpContent
クラス 説明
HttpBufferContent バッファ(IBuffer)を使用するコンテンツ
(バイナリデータなど)
HttpFormUrlEncoded
Content
MIMEタイプ ”application/x-www-form-urlencoded”
名前/値のペアから構成されるコンテンツ
HttpStreamContent ストリーム(IInputStream)を使用するコンテンツ
HttpStringContent 文字列を使用するコンテンツ
(JSON,XMLデータなど)
HttpMultipartContent MIMEタイプ “multipart/*”のコンテンツ
HttpMultipartFormDa
taContent
MIMEタイプ “multipart/form-data”のコンテンツ
(formタグで送信されるフォームデータ)
Request/Response
Request
ユーザ承認画面への遷移
WPFなど従来は…
1. WebBrowserコントロールをログイン画面にホストする
2. 認証画面のURLを指定して表示する
3. ユーザの承認操作の後、Navigatedイベントを監視して
コールバックURLにリダイレクトされたのを検知する
4. リダイレクトされたURLのパラメータからトークンなど
を取得する
WebBrowserOAuth処理
②認証画面の表示
③Navigatedイベント④URLから
トークン取得
①WebBrowserコント
ロールをホスト
WebAuthenticationBroker
1. 認証画面のURLを指定して非同期で実行。画面はブローカーが
表示する
2. 認証終了後に成功・失敗の結果を見る
• 成功ならリダイレクト先URLのパラメータからトークンなどを取得
2つのHttpClient
WPFなどWindows 8.1より前では
System.Net.Http.HttpClientを使う
• それ以外のクラスも同様の機能を持つクラ
スがある
HttpClient ⇒ HttpClient
IHttpFiler ⇒ HttpMessageHandler
HttpContent ⇒ HttpContent
…
• 詳細はデモコードで
WP8.1での注意点
WebAuthenticationBrokerはアプリ
を中断させる
• 認証が終わるとアプリが起動されて
Activatedイベントが発生する
イベント引数から認証終了後の起動か判別して
残りの処理を行う
• 詳細はデモコードで
まとめ
HttpClientで非同期・認証情報の処理が手軽に
• IHttpFilterで認証情報の設定をHTTP通信処理から分離できる
• async/awaitで非同期処理を扱える
• GET/POST/PUT/DELETEに対応したアクセスメソッド
WebAuthenticationBrokerで認証画面の処理を手軽に
• 認証画面URLとコールバックURLを指定すれば、ユーザ承認後の処
理が自動化される
• ユーザ承認に成功したらリダイレクトURLのパラメータを処理する

Windows.Web.Http.HttpClientとWebAuthenticationBroker