アイデンティティ2.0とoauth/openid connect

21
©Copyright 2014 Mashmatrix, Inc. All rights reserved. アイデンティティ2.0と OAuth/OpenID Connect Mashmatrix, Inc. www.mashmatrix.com Shinichi Tomita [email protected]

Upload: shinichi-tomita

Post on 09-May-2015

2.019 views

Category:

Internet


2 download

TRANSCRIPT

Page 1: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

アイデンティティ2.0と OAuth/OpenID Connect

Mashmatrix, Inc. www.mashmatrix.com

!Shinichi Tomita

[email protected]

Page 2: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

この資料は、株式会社ウフル (http://uhuru.co.jp/) の社内セミナーにて使用した資料です。ウフル様のご好意により、公開の許諾を得ましたので、公開いたします。

!

Page 3: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

前回のおさらい

• シングルサインオンがなぜ必要か

• 認証・認可

• SAML

Page 4: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

200X年は コンシューマWebの時代

Page 5: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

Weblog(ブログ)の隆盛• 2000年代前半、ブログによって誰でもカジュアルにWebへコンテンツ発信が可能に • MovableTypeなどのソフトウェア、RSSなどの発展

• 発生した問題 • ブログのコメント記入にスパムが多くなった。

• スパム回避のために、コメントする人の出自を明らかにしたい

• でも数あるブログサイトにコメントする人全員のログインアカウントを作る?無理無理。

Page 6: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

解決策とOpenIDの誕生• もうみんなWebのどこかに自分のサイト(ブログ)を持ってるよね?

• コメント主にはそのサイトの持ち主が自分であることを証明してもらったらいいんじゃない?

• Webのような分散した環境でも自分のアイデンティティを伝達できる仕組み(プロトコル)をつくろう! • ⇒ 2005年頃、Six ApartのメンバーがOpenID 1.0を提唱

Page 7: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OpenIDの特徴• World Wide Web、分散環境が大前提

• 誰でも自分のサイトでアイデンティティを主張できる

• どのサイトでも自分のアイデンティティを利用できる

• 最初から「シングルサインオン」を求めたわけではない • コメントするユーザの所有するWebサイトを識別することが最初の動機

• ユーザのアイデンティティはインターネット上にURLでアクセス可能である、という想定

• OpenID 2.0でシングルサインオン用途にも利用できるように拡張

• サイトを事前に登録したりする必要はない • 動的なディスカバリが仕様に含まれる

Page 8: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

参考:User-Centric Identity

• サイト中心のアイデンティティ(Identity 1.0) • ユーザのアイデンティティはサイトが管理する

• ⇒ アイデンティティのサイロ(Silo)/壁に閉ざされた庭(Walled Garden)

• ユーザ中心のアイデンティティ(Identity 2.0) • 利用者本人がアイデンティティ情報をコントロールする

Page 9: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

Identity 2.0• 高速プレゼンテーションスタイルで有名

• https://www.youtube.com/watch?v=RrpajcAgR1E

• ActiveState、SXIP創業者 • Chuck Mort(現SFDC Identity PM)は元SXIPに在籍していたことも

• SXIPのクローズ後、Microsoftを経て、現在フリー?

Dick Hardt

Page 10: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

マッシュアップとOAuth• WebサービスAPIを利用した「マッシュアップ」の流行

• パブリックなリソースだけでなく、アクセス保護されたリソースも扱いたい

• ⇒ 代理アクセスの必要性・権限の委譲

• OAuth1.0: Webアプリの認可のためのプロトコルを標準化 • Flickrなどで利用されていた権限委譲の仕組みがヒント

• スコープによって委譲する権限を指定可能

• 例:読み込みのみ/書き込み可/プロフィール情報のみ/コンタクト情報も可、など

• 現在もTwitterのAPIはOAuth1.0aで提供されている

• なお1.0にはプロトコルに脆弱性が見つかっているため、現在は改訂版の1.0aを使うべき

Page 11: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

Facebook Connect• Facebookの独自仕様で展開されたAPI接続の仕組み

• Webサイトから簡単にFacebookのサービスに接続するためのウィジット・ボタンを用意 • サーバサイドいらず、Webサイトにファイルを置くだけで導入できる簡単さ

• JavaScript SDKもあり、複雑なアプリの構築も可能

• Facebookの爆発的な普及により、多数のサイトで使われるように

Page 12: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OAuth 2.0• OAuth 1.0の反省

• セキュリティ維持のため複雑になってしまったプロトコル

• 電子署名の扱いに苦労する開発者

• OAuth 2.0 • Facebook Connectを参考にして、Dick HardtらがOAuth WRAPを提唱 ⇒ OAuth 2.0へ進化

• 署名のような面倒な手間を省き、セキュリティはSSLで保証する

• Facebookも後にOAuth2.0に合わせてAPIを変更

• Secret情報を持つことが難しいJavaScriptやスマホアプリからも利用できるImplicit Grant Flowも

Page 13: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OAuth 2.0(Authorization Code Flow)

http://www.atmarkit.co.jp/ait/articles/1209/10/news105.html

Page 14: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OAuth 2.0(Implicit Grant Flow)

http://www.atmarkit.co.jp/ait/articles/1209/10/news105.html

Page 15: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

ソーシャルログイン?

• 「既に外部のソーシャルサービスに保有しているアイデンティティを利用して、ユーザが(サイト|アプリ)にログインできる機能」に対する俗称 • 「アイデンティティ連携(Identity Federation)」という語が一般開発者には直感的でなかったことも原因か

• 実際はOAuthなどでソーシャルAPIへのアクセス権限を取得⇒ ユーザの識別情報を取得して「ログイン」

Page 16: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OAuthによる「ソーシャルログイン」の課題1. 標準化されていない

• ユーザ情報はサービス独自のAPIを利用して取ってくる

• 接続するサービスごとにクライアントの開発が必須

2.『認可』を『認証』に利用 • APIに対するアクセスの認可を与えられたとしても、そのAPIから得たユーザ情報をユーザの認証に利用してほんとにいいのか?

3. API権限を悪用したスパム • そもそもログインしたいだけなのに、なぜアクセス権限が必要なの?

4.(原理主義的には)ユーザー・セントリックでない • 外部のアイデンティティを選択できるという意味ではユーザー・セントリックだが、ユーザが任意のアイデンティティを持ち運べるわけではない

Page 17: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OpenID Connect

• 広く普及したOAuth2.0をベースにした、分散環境でユーザのシングルサインオンを実現するためのプロトコル

• 売り文句: • OAuth2を使った認証よりも標準化されており安心

• SAMLより簡単なので実装は容易

Page 18: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OpenID Connect の特徴• アイデンティティ情報を取得するためのスコープ”openid”を定義

• “UserInfo Endpoint” というユーザ情報を取得するAPIのスキーマを定義し、インターフェースを統一

• 従来のaccess_tokenの他に”id_token”というトークンを定義 • ユーザのアイデンティティを証明する(アサーション)トークン

• JWT(JSON Web Token)を利用し、電子署名で改ざんを防止

• UserInfo EndpointがFirewall内にある場合や、複数アプリをまたがってトークンが伝達される場合などに活用可能

• OpenID 2.0と同様に動的にサイト間の連携を行う仕組みもあり(関連仕様)

Page 19: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

OpenID Connectのフロー

http://www.atmarkit.co.jp/ait/articles/1209/27/news138.html

Page 20: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

まとめ• 企業システムを中心としたシングルサインオンの発展とは別に、コンシューマWebにおける要求からOpenIDおよびOAuthが生まれた

• OAuthは、成功したFacebook Connectを参考に、より簡潔さを重視したOAuth2.0へと発展した

• Facebook/Twitterの台頭により、外部アイデンティティを利用したログインという体験は一般化したが、一方でさまざまな問題を孕んだ

• OpenID Connect による標準化で連携はもっと楽になるかも

Page 21: アイデンティティ2.0とOAuth/OpenID Connect

©Copyright 2014 Mashmatrix, Inc. All rights reserved.

演習(OpenID Connect)• OpenID Connect を利用して、SalesforceをGoogleアカウントでログインできるようにする • 参考URL:

• http://blog.flect.co.jp/salesforce/2014/06/openid-connect-affa.html

• <発展演習>:上記の連携で取得したTokenを利用して、ApexからGoogleのAPIを叩いてみる • 参考URL:

• http://www.tquila.com/blog/2014/02/13/accessing-google-apis-apex-minimal-effort