54
わかった気になる! ID連携の最新事情 for developers SAMLOAuth、あるいはOpenID Connectについて 神原 淳史 @atsukanrock 2015/02/27 (第八回) ネクストスケープ×Sansan .NET勉強会

Latest Status of Identity Federation

Embed Size (px)

Citation preview

Page 1: Latest Status of Identity Federation

わかった気になる!ID連携の最新事情

for developers

SAML、OAuth、あるいはOpenID Connectについて

神原淳史

@atsukanrock2015/02/27(第八回) ネクストスケープ×Sansan .NET勉強会

Page 2: Latest Status of Identity Federation

自己紹介

•神原淳史 @atsukanrock

https://github.com/atsukanrock

• Sansan株式会社 (2014年11月から)

アバナード株式会社 (2011年7月~2014年10月)

• Software Developer: Domain-Driven Design / .NET / C# / Microsoft Azure

• Strong: トラブルシューティングが速い、アーキとか組める

• Weak: 酒にだらしない

Page 3: Latest Status of Identity Federation

ID連携 (identity federation)

複数のアイデンティティ管理システムに分散して格納された個人のユーザー情報を仮想的に再結合したもの (Wikipedia – 連合アイデンティティ)

Page 4: Latest Status of Identity Federation

SAML

OAuth

OpenID Connect

AD FS

Azure AD

JWT

OpenID

WS-Trust

WS-Federation

Open AM

Azure ACS

MFA

Page 5: Latest Status of Identity Federation

なるほどまったくわからん

Page 6: Latest Status of Identity Federation

Developerから見たID連携

•用語多すぎ

•歴史長すぎ

•展開速すぎ (ググってたらすぐ古い非推奨な情報が出てくる)

•興味なさ杉

Page 7: Latest Status of Identity Federation

今日のゴール

•自分のサービスにID連携を実装したいDeveloper向け

• ID連携の歴史、最新事情、今後をざっくり把握

•意思決定 (技術選定) ができるようになる

Windows / Active Directoryに偏ってますがご容赦ください

Page 8: Latest Status of Identity Federation

Agenda

•なんでID連携なの?

• ID連携ってなに?

• ID連携の歴史

• SAML

• OAuth

• OpenID Connect (OAuth 2.0 for Login)

•まとめ

Page 9: Latest Status of Identity Federation

なんでID連携なの?Why on earth do we need identity federation?

Page 10: Latest Status of Identity Federation

世はセキュリティの時代

時代の要請

•個人情報保護

たった1回の個人情報流出が企業の存続に関わる

•情報セキュリティ

ビジネスデータをきっちり守らなければならない

IT管理者が思うこと

•社員が管理するアカウント数を減らしてあげたい

(さもないとあいつら絶対パスワード使い回す)

• Active Directoryで全部管理したい

(全部俺様の管理下におかないとあいつら何するか分からない)

•退職者対応が面倒

Page 11: Latest Status of Identity Federation

ID連携ならできます

•企業のActive DirectoryにID管理を一元化

•ユーザは普段Windowsにサインインする時のID / Passwordで各種サービスにログイン可能

• Active Directoryでアカウントを無効化したら各種サービスへのログインが即刻不可能に

Page 12: Latest Status of Identity Federation

サービス提供者の視点

強固な認証の実装は非常に難しい

•ロックアウト

•パスワード再発行

• N段階認証

•普段と違うIPアドレスからのアクセス

Developerが思うこと

•実装したくない

•どっかに丸投げしたい

Page 13: Latest Status of Identity Federation

ID連携ならできます

•認証の仕組みは全て連携先に移譲

•移譲先が複雑な実装を担保してくれる

•アプリは認証OKだった「結果」のみを受け取る

結果=トークン

Page 14: Latest Status of Identity Federation

ID連携ってなに?So, what the hell is the identity federation?

Page 15: Latest Status of Identity Federation

ID連携フロー (抽象化)

Page 16: Latest Status of Identity Federation

ID連携の歴史The history of identity federation

Page 17: Latest Status of Identity Federation

それはプロトコルの歴史

2000年 2005年 2010年

イントラ Web デバイス

KerberosSAML

WS-FederationOAuth

Open ID Connect

高速なら

何でも

HTTP

テキスト軽量

ID連携のプロトコル

テクノロジーへの要求

時代の要請

年代

Page 18: Latest Status of Identity Federation

SAML (あるいはWS-Federation)

It’s LEGACY… but still de facto standard of identity federation

Page 19: Latest Status of Identity Federation

プロトコルの歴史

2000年 2005年 2010年

イントラ Web デバイス

KerberosSAML

WS-FederationOAuth

Open ID Connect

高速なら

何でも

HTTP

テキスト軽量

ID連携のプロトコル

テクノロジーへの要求

時代の要請

年代

Page 20: Latest Status of Identity Federation

フロー (HTTP POST binding)

HTTP Redirect: SAML Request を query string に乗せる

HTTP POST: SAML Response を form に乗せる

Page 21: Latest Status of Identity Federation

ID連携のデファクトスタンダード

• ID連携 (実質AD連携) 方式がSAMLなSaaS:

• Salesforce

• Google Apps

• Cybozu

• Workday

• ServiceNow

etc.

Identity Provider (IdP) としてでなく、Service Provider (SP) としての話

Page 22: Latest Status of Identity Federation

「枯れた」プロトコル (良い意味で)

•最新バージョン: SAML 2.0

• SAML 2.0標準化: 2005年3月

• XMLベース

•エンタープライズID連携の世界で支配的シェア

Page 23: Latest Status of Identity Federation

But…

Page 24: Latest Status of Identity Federation

Heavyweight (SAML Responseのサンプル)

Page 25: Latest Status of Identity Federation

一方その頃

Page 26: Latest Status of Identity Federation

一方その頃MS (Windows系ID管理の支配者)は

こう思っていた

• SAML嫌ぁぁあああ!!

• WS-Federation推奨!!

WS-Federationの特徴:

• SAMLと似たようなもん

• XMLベース

• サポーター: MS

結論

• Windows Identity Foundation (WIF) ではWS-Federationだけサポートします

WIF: .NETでID連携を実装するための (当時唯一の) MS謹製ライブラリ

• AD FSではSAMLもサポートしますけど

Page 27: Latest Status of Identity Federation

結果

• 2010年頃までSAML vs WS-Federation抗争が継続

現在はMSのAD FSでのSAMLサポートにより概ね終息:

• オープンなサービスではSAML

• MS製品で固められるシステムではWS-Federation

• .NETでSAMLを実装するには自前実装が必要

もしくはサードパーティ製コンポーネント

Page 28: Latest Status of Identity Federation

OK, OK, I implement

SAML by myself

Page 29: Latest Status of Identity Federation

自前実装 is NOT that hard

リクエストを出す

• XMLのテンプレを埋める程度

string.Format で可能なレベル

レスポンス (トークン) を受け取る

• XMLの決まった位置から値を取り出す

•改ざんチェックは.NETがクラスを提供

• SignedXmlクラス

• 事前に公開鍵の入手が必要

Page 30: Latest Status of Identity Federation

署名チェック自前実装のイメージ

事前に入手した公開鍵 (.cerファイル) からX509Certificate2クラスをインスタンス化したもの

https://github.com/onelogin/dotnet-saml/blob/master/App_Code/Saml.cs (onelogin/dotnet-saml@GitHub)

Page 31: Latest Status of Identity Federation

But…

Page 32: Latest Status of Identity Federation

ネイティブアプリ (iOS / Android / Win8)

前提

•クライアントはWeb APIを呼び出す

• Web API呼び出しはステートレス

前提から導き出される要件

•「認証OK」を示す何かを毎回送る必要あり

Page 33: Latest Status of Identity Federation

ネイティブアプリの設計例

• SAMLトークンは重いので毎回送るわけにいかない

•別の軽い何か (access token) を発行する機能をサーバー側に自前実装

Page 34: Latest Status of Identity Federation

ネイティブアプリの設計例

埋め込みブラウザー (Web View)

HTTP Redirect: SAML Request を query string に乗せる

HTTP POST: SAML Response をform に乗せる

Page 35: Latest Status of Identity Federation

OAuthWe’re familiar with OAuth because Twitter and Facebook use it…

Page 36: Latest Status of Identity Federation

プロトコルの歴史

2000年 2005年 2010年

イントラ Web デバイス

KerberosSAML

WS-FederationOAuth

Open ID Connect

高速なら

何でも

HTTP

テキスト軽量

ID連携のプロトコル

テクノロジーへの要求

時代の要請

年代

Page 37: Latest Status of Identity Federation

フロー (Authorization Code Grant)

http://www.atmarkit.co.jp/ait/articles/1209/10/news105.html (デジタル・アイデンティティ技術最新動向 - @IT)

HTTP Redirectを命じる

Query stringにAuthorization Code

Redirect命令を捕まえてAuthorization Codeを取り出す

HTTP POSTでAuthorization Codeを送る

ResponseにAccess Token

Page 38: Latest Status of Identity Federation

著名コンシューマー向けサービスが採用

• Facebook

• Twitter

• Instagram

etc.

Page 39: Latest Status of Identity Federation

Lightweight

SAMLトークンよりずっと軽い

毎回のWeb API呼び出しに乗せられる

Page 40: Latest Status of Identity Federation

But…

Page 41: Latest Status of Identity Federation

OAuth is NOT for AuthN but for AuthZ

OAuthは認証でなく承認

• 認証 (AuthN: Authentication)ユーザが「誰であるか」

• 承認 (AuthZ: Authorization)ユーザが「何をできるか」

例: Facebook’s OAuth

• ユーザが「誰であるか」を確認するのはFacebook

• アプリはFacebookから「そのユーザができること」を記したトークンを受け取る

• アプリが「ユーザが誰であるか」を知るには、それを知るためのAPIを叩く

Page 42: Latest Status of Identity Federation

セキュリティ上の弱点

•トークンの形式が標準化されていない

•アプリ側でトークンのvalidationができないアプリは発行されたトークンをそのまま受け渡すしかできない

•偽装トークンに対して脆弱

Page 43: Latest Status of Identity Federation

OpenID Connect (OIDC)The next standard for identity federation

Page 44: Latest Status of Identity Federation

プロトコルの歴史

2000年 2005年 2010年

イントラ Web デバイス

KerberosSAML

WS-FederationOAuth

Open ID Connect

高速なら

何でも

HTTP

テキスト軽量

ID連携のプロトコル

テクノロジーへの要求

時代の要請

年代

Page 45: Latest Status of Identity Federation

OAuth 2.0ベース (OAuth 2.0とほぼ同じフロー)

http://www.atmarkit.co.jp/ait/articles/1209/27/news138_2.html (デジタル・アイデンティティ技術最新動向 - @IT)

ID Tokenからユーザの基本情報が取り出せる

Page 46: Latest Status of Identity Federation

OAuthのセキュリティ上の弱点をカバー

• トークンの形式を標準化

• JWT: JSON Web Token

• JWTはトークンのvalidationが可能

• 改ざんされていないこと (トークン署名)

• 発行元がたしかにxxxであること

• 発行先がたしかに我々 (アプリ) であること

• 意図したユーザに対するトークンであること

http://blogs.msdn.com/b/tsmatsuz/archive/2015/02/18/azure-ad-service-web-api-programming-with-access-token-validation-check.aspx (松崎剛 Blog)

Page 47: Latest Status of Identity Federation

Lightweight (JWTのサンプル)

http://blogs.msdn.com/b/tsmatsuz/archive/2015/02/18/azure-ad-service-web-api-programming-with-access-token-validation-check.aspx (松崎剛 Blog)

そのままWeb APIのaccess tokenとして使える

Page 48: Latest Status of Identity Federation

MS謹製ライブラリが豊富

http://www.cloudidentity.com/blog/2015/02/20/IDENTITY-LIBRARIES-STATUS-AS-OF-02202015/ (Cloud Identity)

iOS / Android / JavaScript用まである…だと…

Page 49: Latest Status of Identity Federation

乗るしかないこのビッグウェーブに

個人の意見です

Page 50: Latest Status of Identity Federation

MS is now working on OpenID Connect

• Azure ADは対応

OpenID Connect and OAuth 2.0 support in Azure Active Directory has GA’d!http://blogs.technet.com/b/ad/archive/2014/09/09/openid-connect-and-oauth-2-0-support-in-azure-active-directory-has-ga-d.aspx (Active Directory Team Blog)

• AD FSは未対応

次バージョンで対応との噂も

Page 51: Latest Status of Identity Federation

まとめWrapping up

Page 52: Latest Status of Identity Federation

SAML vs OpenID Connect

SAML

Pros:• エンタープライズで支配的

• AD FSが対応

Cons:• Heavyweight

• 複雑

• .NETでの実装が大変

• コンシューマー向けサービスはIdP非対応が多い

OpenID Connect

Pros:• Lightweight

• シンプル

• .NETでの実装が容易

• コンシューマー向けサービスもIdP対応が多い

Cons:• AD FSが未対応

Page 53: Latest Status of Identity Federation

何を選ぶかはあなた次第です

Page 54: Latest Status of Identity Federation

質疑応答Q&A