windows phone アプリに認証と認可を実装する v1.0

41
1 Windows Phone アアアアアアアア アアアアアアアア アアアアアアアアアアアアア 日日日日日日日日日日日日日 日日日日日日日日 日日 日http://blogs.technet.com/junichia/ twitter @junichia 2011 日 8 日 19 日 日 01 日

Upload: junichi-anno

Post on 24-May-2015

2.854 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Windows Phone アプリに認証と認可を実装する V1.0

1

Windows Phone アプリケーション 開発支援セミナー~ 認証と認可の仕組み実装する

日本マイクロソフト株式会社エバンジェリスト

安納 順一http://blogs.technet.com/junichia/

twitter @junichia

2011 年 8 月 19 日第 01 版

Page 2: Windows Phone アプリに認証と認可を実装する V1.0

2

いきなりですが 意味 わかりますか?

利用者 アプリケーション Twitter

アプリ利用開始

Request Token を要求Redirect

認証 / 認可の画面を要求

Access Token 要求

認証 / 認可を完了

Access Token 発行

API 呼び出し

認証 / 認可 画面表示

CallBack url に Redirect

API

Request Token 発行

Page 3: Windows Phone アプリに認証と認可を実装する V1.0

3

本日の内容

• 企業内システム と ソーシャルアプリの思想の違いから発生する、認証および認可の考え方とアーキテクチャの違いについて理解しましょう

• Windows Azure AppFabric ACS が Windows Phone アプリに与えるインパクトを理解しましょう

• IAM テクノロジーに萌えましょう

Page 4: Windows Phone アプリに認証と認可を実装する V1.0

4

Agenda

1. 認証と認可を取り巻くトレンド– 企業システムとソーシャルアプリの違い– 何を認可するのか?

2. Windows Phone への実装– Twitter を使用するためのコーディング例

• OAuth 1.0a への対応– Windows Azure AppFabric ACS を使用したコーディング例

• 複数 IdP への一括対応

3. まとめ

Page 5: Windows Phone アプリに認証と認可を実装する V1.0

5

登場人物と相関図

サービス( Twitter, Facebook 等)

サービスに保存されている個人情報

個人情報にアクセスしたいアプリ

サービスの利用者アプリを使いたい人

利用している

使いたいアクセスしたい

自分のもの

Page 6: Windows Phone アプリに認証と認可を実装する V1.0

6

認証と認可を取り巻くトレンドここを理解すること

Page 7: Windows Phone アプリに認証と認可を実装する V1.0

7

認証と認可

• 認証:本人であることを確認• 認可:アクセス権を与えること

認証 認可

どんなシステムにも「認証」と「認可」はつきまとう

「認可」に関するプロトコルが注目を浴びている

Page 8: Windows Phone アプリに認証と認可を実装する V1.0

8

なぜ「認可」に注目が?

• システム間の連携(主に SSO )– アイデンティティ・フェデレーション– クレームベース セキュリティ

• クラウドへの移行– 社内ディレクトリサービスの活用– ソーシャルな IdP の活用

• ソーシャルアプリの台頭– 個人情報の保護

SAML

OAuth

Page 9: Windows Phone アプリに認証と認可を実装する V1.0

9

OAuth と SAML の違い

システム管理者

要求「情報が欲しい!」

応答「氏名、メアド ... 」

利用者(情報の持ち主)

• いずれも認可をするためのプロトコル• 認可プロセスの中に(必然的に)認証が含まれる• OAuth :「 API へのアクセス」を「利用者が」認可する• SAML :「情報の送出」を「管理者が」認可する• 現在は SAML 対応製品のほうが細かな制御ができる

SAML

OAuthユーザーの情報

承認

承認

アプリケーション

IdP事前に

環境設定

その都度

Page 10: Windows Phone アプリに認証と認可を実装する V1.0

10

企業内システムとソーシャルアプリの違い

• 企業内システム– システム間で「信頼」が担保されている

– アプリケーションを認証する必要は無い

– 認証と認可の対象は「利用者」

• SNS および ソーシャルアプリ– システム間の「信頼」は担保されていない

– 信頼関係のない者同志の認証と認可が必須• 「サービス」と「人」

• 「サービス」と「アプリ」

• 「人」と「アプリ」

• 「情報」と「アプリ」

登場人物が多い!

Page 11: Windows Phone アプリに認証と認可を実装する V1.0

11

なぜ ソーシャルアプリ は複雑なのか

広範囲な漏えいからの保護

主にシステム / 管理者企業システム

ソーシャルアプリ 主にシステム

特定アプリへの情報公開

情報の持ち主

「システム」と「情報」と「アプリ」の持ち主が異なるアプリは「人」の認可を受けて、初めて「情報」にアクセス可能

Page 12: Windows Phone アプリに認証と認可を実装する V1.0

12

アプリから情報へのアクセスを認可する方法 ①

アクセス

自分のものU

serID

Passw

ord

アプリに ID と Password を渡してしまう• アプリは信頼できる?• パスワードが変わったら?

Page 13: Windows Phone アプリに認証と認可を実装する V1.0

13

アプリから情報へのアクセスを認可する方法 ②

アクセス

自分のものLv

1

認可

情報にアクセスするための 「 API へのアクセス権」を与える利用者は自身の判断でいつでもアクセス権をはく奪できる

API

( Lv

1)API

( Lv

2)API

( Lv

3)

Page 14: Windows Phone アプリに認証と認可を実装する V1.0

14

Identity&Service Provider( Twitter/Facebook/Google 等)

“API へのアクセスを認可する” とは?

氏名を閲覧

メールアドレスを閲覧

投稿を閲覧

各種特権

つながりを閲覧

近況を投稿

API Lv1

アプリ

属性の主体(持ち主)

つながりを編集

外部のアプリケーションに対し、各種情報にアクセスするための API の利用を認可する仕組み

① アプリ登録

③ API にアクセス

② アクセス認可

ユーザー情報

API Lv2

API Lv3

API Lv4

Page 15: Windows Phone アプリに認証と認可を実装する V1.0

15

TWITTER クライアントを作成するWindows Phone への実装

Page 16: Windows Phone アプリに認証と認可を実装する V1.0

16

Twitter ~ OAuth 1.0a の場合

利用者 アプリケーション Twitter

アプリ利用開始

Request Token を要求Redirect

認証 / 認可の画面を要求

Access Token 要求

認証 / 認可を完了

Access Token 発行

API 呼び出し

認証 / 認可 画面表示

CallBack url に Redirect

API

Request Token 発行

/request_token

/authorize

/Access_token

Page 17: Windows Phone アプリに認証と認可を実装する V1.0

17

Facebook ~ OAuth 2.0 の場合

利用者 アプリケーション Facebook

アプリ利用開始

認証 / 認可画面へ Redirect

Access Token 要求

認証 / 認可を完了

Access Token 発行

API 呼び出し

認証 / 認可 画面表示

CallBack url に Redirect

API

認可コードを発行

Page 18: Windows Phone アプリに認証と認可を実装する V1.0

18

Twitter アプリ サンプルコードBLOG にプロジェクトをアップロードしておきます(参考)Building a ‘real’ Windows Phone 7 Twitter App Part 2 - oAuth http://samjarawan.blogspot.com/2010/09/building-real-windows-phone-7-twitter_18.html※Phone アプリを一から勉強するのに最適!

使用している OAuth ライブラリ• Hammock.dll ( hammock.codeplex.com )

Page 19: Windows Phone アプリに認証と認可を実装する V1.0

19

Twitter ( OAuth 1.0a )での認可に必要な情報

ConsumerKey = "NsO5AFDsI0mzKD---------";

ConsumerKeySecret = "wE8aiRp1cbj4bb7wAf8onWbOQXhc--------";

RequestTokenUri = "https://api.twitter.com/oauth/request_token";

AuthorizeUri = "https://api.twitter.com/oauth/authorize";

AccessTokenUri = "https://api.twitter.com/oauth/access_token";

CallbackUri = "http://www.bing.com";

(参考) https://dev.twitter.com/docs/api/開発者サイトにアプリを登録すると提示される

Page 20: Windows Phone アプリに認証と認可を実装する V1.0

20

OAuth 1.0a のポイント• Request Token と Access Token– Request Token

: Access Token を取得するためのトークン– Access Token

: API にアクセスするためのトークン

• Callback Url– OAuth 1.0a では必須– 最終的に戻したいアプリケーションの URL– デスクトップアプリの場合はダミー URL を入れて、

リダイレクトをキャンセル※xAuth ではデスクトップアプリに対応

Page 21: Windows Phone アプリに認証と認可を実装する V1.0

21

ちなみに OpenID とは?

• 認証のためのプロトコル• どの OpenID Provider ( OP )の ID を使用しても RP にログオンできる• OP と RP の信頼は必須ではない(必要であれば RP で独自に実装する)• OAuth 2.0 ベースの OpenID Connect のリリースも控えている

OP

OP

OPOP

OP

RPRP

RP

SSO

Page 22: Windows Phone アプリに認証と認可を実装する V1.0

22

OpenID と OAuth の違い

お勧め:非技術者のための OAuth 認証 (?) と OpenID の違い入門     http://www.sakimura.org/2011/05/1087/

by 崎村さん( OpenID Foundation )

• OpenID はユーザー認証のためのプロトコル• RP ごとに ID/Password が異なる不便を回避• どの OP で認証しても RP にアクセスできる

• OAuth は API へのアクセス認可のためのプロトコル• アプリケーションやWEB サイトに、ユーザー ID と

パスワードを渡す必要が無い

Page 23: Windows Phone アプリに認証と認可を実装する V1.0

23

Twitter の場合

OAuth を「認証」に使うことの危険性

OAuth は「 API アクセスを認可」するためのプロトコル

認可された API は使い放題!家の鍵を預けるようなもの(崎村氏)

ここまでの権限が本当に必要?

Page 24: Windows Phone アプリに認証と認可を実装する V1.0

24

複数 IDP に対応させるWindows Phone への実装

Page 25: Windows Phone アプリに認証と認可を実装する V1.0

25

インターネットには IdP がいっぱい

Page 26: Windows Phone アプリに認証と認可を実装する V1.0

26

個別に対応すると大変 ...orz

RESTful Web Service

Application

Access Tokenここで複数 IdPに対

Access Token の正当性に不安改ざんされているかも!?

Windows Live

Google

Yahoo!

Facebook

AD FS 2.0

IdP

OpenID

Page 27: Windows Phone アプリに認証と認可を実装する V1.0

27

Windows Azure AppFabric ACS を使うと ...

RESTful Web Service

Windows Live

Google

Yahoo!

Facebook

AD FS 2.0

Application

IdP

Windows Azure AppFabric ACS

信頼

信頼

OpenID

AccessToken

Request Token

アプリは AppFabric ACS にだけ対応すればよい

Page 28: Windows Phone アプリに認証と認可を実装する V1.0

28

Windows Azure AppFabric Access Control Service V2

サポートされているプロトコル• OAuth WRAP 2.0• WS-Federation• WS-Trust• OAuth 2.0 (Draft 13)• OpenID 2.0

トークンフォーマット• Simple Web Token ( SWT )• SAML 1.1/2.0

既成の Identity Provider との Passive な連携• Windows Live ID/ Google/ Facebool/ Yahoo!(.com)/ OpenID• Active Directory Federation Service 2.0

クラウド上に用意された STSアプリケーションのコードを変更することなく、新たな Identity Provider と連携することができる

Page 29: Windows Phone アプリに認証と認可を実装する V1.0

29

コーディング例• Windows Azure Toolkit for Windows Phone 7

└ WindowsPhoneCloud.ACS

詳細な使用方法を BLOG にまとめますのでお待ちを

Page 30: Windows Phone アプリに認証と認可を実装する V1.0

30

WindowsPhoneCloud.ACS で使われているオリジナルライブラリ

• AspProviders: Windows Azure Tables 用の ASP.NET Providers (Membership, Roles, Profile and Session State Store)

• System.Data.Services.Client: Windows Phone 用の OData client library (http://odata.codeplex.com)。 Azure Tables へのアクセスで使用。

• WindowsPhoneCloud.StorageClient: Windows Phone 用の Windows Azure Storage Client library .

• DPE.OAuth: Microsoft DPE OAuth2 library.

• SL.Phone.Federation: Microsoft Silverlight ACS sign in control.

• Notification Services (MPNS): Tile, Toast, and Raw.

• WindowsPhone.Recipes.Push.Messages: Push Notification Server Side Helper Library, a part of the Windows Phone 7 Push Recipe, that provides an easy way to send all three types of push notification messages that are currently supported by Microsoft Push

Windows Phone では WIF ( Windows Identity Foundation )がサポートされていないため、とても便利!

Page 31: Windows Phone アプリに認証と認可を実装する V1.0

31

WP7CloudApp5.Phone

WP7CloudApp5.Web

WindowsPhoneCloud.ACS がやってること

REST(OData)

Windows Azure AppFabric ACS

信頼

信頼

クレーム変換ルール

Simple Web

Token

OAuth Wrap

REST

Windows Live

Google

Yahoo!

Facebook

AD FS 2.0

IdP

OpenID

格納

Windows Azure

http authorization ヘッダーに入れて

送信サービスへのアクセスを認可

OA

uth

2.0

ACS sign in control で簡単に実装

Isolated Storage にクレデンシャルとクレームを格納

Page 32: Windows Phone アプリに認証と認可を実装する V1.0

32

SWT ~ Simple Web Token• ACS から返された SWT は

SL.Phone.Federation.Controls.RequestSecurityTokenResponseCompletedEventArgs から取得できる

• ACS から発行された SWT は、HTTP Authorization ヘッダーに格納して REST Service に POST する

"http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2femailaddress=junichia%40xxx.com&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fname=Junichi+Anno&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=https%3a%2f%2fwww.google.com%2faccounts%2fo8%2fid%3fid%3dAItOawlmkqO3aqYE1CE1PvWTjCLngPgHng3gZ6k&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=Google&Audience=uri%3awp7cloudapp5&ExpiresOn=1313686502&Issuer=https%3a%2f%2ftfazureforitpro.accesscontrol.windows.net%2f&HMACSHA256=g1WSUMaW8aOmO0kvfvtNj451qYIJODug29kx1H8l1Bo%3d"

Claim 1

Claim 2

Claim nIssure

AudienceExpiresOn

HMACHA256

KeyH

ash

ACS に保存されてい

Page 33: Windows Phone アプリに認証と認可を実装する V1.0

33

SWT を分解すると

http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2femailaddress = junichia%40xxx.com&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fname = Junichi+Anno&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier = https%3a%2f%2fwww.google.com%2faccounts%2fo8%2fid%3fid%3dAItOawlmkqO3aqYE1CE1PvWTjCLngPgHng3gZ6k&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider = Google&Audience = uri%3awp7cloudapp5&ExpiresOn = 1313686502&Issuer = https%3a%2f%2ftfazureforitpro.accesscontrol.windows.net%2f&HMACSHA256 = g1WSUMaW8aOmO0kvfvtNj451qYIJODug29kx1H8l1Bo%3d

Page 34: Windows Phone アプリに認証と認可を実装する V1.0

34

アプリケーション側の対応

• SWT 内の 4 つの主要クレームを検証する– 署名 : HMACSHA256– 発行者 : Issuer– 発行先 : Audience (== applies_to)– 有効期限 : ExpiresOn

• SWT を Authorization ヘッダーに格納して REST サービスに POST

• HTTP Authorization ヘッダーからクレームを取り出す• クレームの活用

• ユーザーのロールを判断し、サービスへのアクセス権を与える• データとしてストレージに保存

Windows Phone アプリケーション

REST サービス

Page 35: Windows Phone アプリに認証と認可を実装する V1.0

35

WINDOWS PHONE セキュリティトピック

Page 36: Windows Phone アプリに認証と認可を実装する V1.0

36

Windows Phone のセキュリティ関連機能対応状況

• Private Application Deployment 7.1• Windows Live ID Client API ×

→ OAuth 2.0 が使えます• Credential Manager & DPAPI Native コードの

み• Client Certificates ו Device Encryption ו Local Authentication Subsystem ×

– NTLM や Kerberos が使えない– Windows 統合認証が使えない

• WIF Support ו IPSEC Networking Stack ו IRM Protected Document 7.1• Encrypted Credential Store 7.1

WIF : Windows Identity Foundation

隠し URL による配信が可能

修正

Page 37: Windows Phone アプリに認証と認可を実装する V1.0

37

(参考) Active Directory の認証を受けるには

• Phone SDK は DirectoryService Namespace に対応しておらず、現時点では Windows 統合認証も使えない

∴ WCF を経由して AD FS を使用する

WCF Service

イントラネットDMZ

ADFS PROXY AD FS AD DS

https 445

Page 38: Windows Phone アプリに認証と認可を実装する V1.0

38

まとめ

Page 39: Windows Phone アプリに認証と認可を実装する V1.0

39

まとめアプリケーションの利用シナリオを明確にしましょう• 企業 or ソーシャルアプリ

情報漏えい [元 ] にならないように気を付けましょう• 余分な特権は要求しない

OAuth と OpenID 周辺の動向に注目しましょう• OAuth 2.0 Draft 20 ( Final )• OpenID Connect• トラストフレームワーク

企業システムには SAML も重要です

アイデンティティ萌えは アリ です

Page 40: Windows Phone アプリに認証と認可を実装する V1.0

40

世界中の “ ID” が利用者になる

Page 41: Windows Phone アプリに認証と認可を実装する V1.0

41