openid connect 概要 (2013年9月)

23
OpenIDファウンデーション・ジャパン 20139OpenID Connect 概要

Upload: openid-foundation-japan

Post on 24-May-2015

3.926 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: OpenID Connect 概要 (2013年9月)

OpenIDファウンデーション・ジャパン

2013年9月

OpenID Connect 概要

Page 2: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connectとは http://openid.net/connect

OAuth 2.0 仕様をベースに「アイデンティティ

層」を拡張した、OpenIDの次期バージョン

1

• OP(認可サーバー)へのユーザー認証の一元化 RP(クライアント)間のシングル・サインオン

• OP側へのユーザーのクレデンシャル(パスワードなど)管理の一元化

RP側のセキュリティ 向上と管理負荷の低減

• OPからのユーザー属性情報取得 RPでの新規ユーザー登録の容易化

• エンドユーザーの認証とAPIアクセス認可の一体化 ユーザー利便性の向上

Page 3: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connectは「OpenIDをOAuth 2.0ベースに作り直す」というだけではない

既存のID連携仕様であ

る SAMLやWS-

Federationの実世界で

の適用パターン、そし

て事業者独自のアイデ

ンティティAPI

(Facebook Connectな

ど) を分析し、仕様化

したものとなっている

2

Source: http://civics.com/openid-connect-webinar/

OpenID Connectの系図

Page 4: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connectによるフェデレーションの中心は「IDトークン」

エンドユーザの関与の元、

RPがOPに「IDトークン」

というデータを要求する

(認可リクエスト)

OPはエンドユーザーの認証

と、情報およびサービス

提供に関する同意を確認

し、IDトークンをRPに返却

RPはこの「IDトークン」を

用いてエンドユーザーを

識別し、アクセス可否を

行う

3

Page 5: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

IDトークンの中身

OPにおけるユーザ認証イベントの情報

「このエンドユーザーは○○で、何時何分に、こういう方法で認証を受け、認証レ

ベルは○で、…」

RPは主に、IDトークンに含まれる以下のクレーム(OPがユーザーに関して表

明する情報)を用いて、エンドユーザーのアクセス認可を行う

エンドユーザーを識別する値(識別子)

IDトークンの有効期限

ユーザ認証を実施した日時

認証コンテクスト・クラス・リファレンス

認証手段リファレンス

IDトークンにはこの他に

ユーザー属性が含まれる

こともある

4

Page 6: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

RPからOPへのIDトークンの要求

RPは認可リクエストに際し、IDトークンに含めてほしいクレームや、IDトー

クン生成にあたりどのような認証イベントを求めるかを指定

OPはその指定を考慮した上でIDトークンを返却

指定可能な内容の例

クレームのセット

認証および同意確認の際のUI

認証や同意の再実行の要否

エンドユーザを明示的に認証してからの経過時間

UIやクレームのロケール

OPがエンドユーザを

認証する際のヒント

認証コンテクスト・

クラス・リファレンスの値

5

Page 7: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

プロトコル・フロー (1): 認可コードフロー IDトークンをRP/OP間で直接授受

フロー概要

RPからOPへエンドユーザを経由して

認可リクエストを送信

OPが「認可コード」と呼ばれる値を

エンドユーザ経由でRPに返却

RPがその認可コードをOPに送信して

IDトークン(ならびにアクセストーク

ン)取得

特徴

IDトークンのやりとり(トークン・

リクエスト/レスポンス)がRPとOPとの

直接通信によって行われれる

▪ OPによるIDトークンへの署名は基本的には

不要となり、RP側での署名検証処理も発生

しない

6

Page 8: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

プロトコル・フロー (2): Implicitフロー OPがIDトークンをエンドユーザ経由でRPに返却

フロー概要

エンドユーザ経由でOPがIDトークン

(ならびにアクセストークン)をRPに

返却

特徴

IDトークンの授受に関し、RPからOP

への通信が発生しない

▪ RPからOPへの直接通信が行えない環境

にも適用することが可能

▪ OPによるIDトークンへの署名、および

RP側での署名検証処理は必須

OPはIDトークンをURLフラグメントに

エンコードしてRPに返却

▪ RPはWebブラウザになんらかのスクリプ

トをダウンロードさせて、そのスクリプ

トによってフラグメントからIDトークン

を抽出し、Webサーバー・アプリケー

ションに送信させることとなる

7

Page 9: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

ユーザー属性のリクエスト

認可リクエストのscopeパラメーターを用いて「クレームの

セット」を指定する方法が一般的

OpenID Connectではクレームのセットとして以下を定義

profile(既定のプロファイル)、email(メールアドレス)、

address(住所)phone(電話番号)

OPが独自に定義した「ユーザ属性のセット」をRPが指定する

ことも可能

8

scope=openid profile email http://example.com/employeeAttrs

仕様にて定義

OPが独自に定義

Page 10: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

ユーザー属性の提供

OpenID Connect仕様では二通りの方法を定義

RPに返却するIDトークンに含める(前述)

RPがアクセス可能なUserInfoエンドポイントを用意する

UserInfoエンドポイント

OPがRPにユーザー情報を提供するためのAPI

OAuth 2.0仕様の「保護されたリソース(Protected

Resource)」

▪RPは、認可リクエストの際にIDトークンと同時にOPから取得

したアクセストークンを用いて、このUserInfoエンドポイント

にアクセスする

UserInfoエンドポイントは、ユーザー情報を、通常は

JSON形式にてRPに返却する

9

RP OP

Page 11: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connectの今後のロードマップ

現在Implementer’s Draftが公開中

今後最終仕様に

OpenID Connectを実装した製品・サービスの例

Yahoo! JAPAN (YConnect)、日本経済新聞社

(日経ID)、東急電鉄、Google、PayPal

(Log In with PayPal)、野村総合研究所(Uni-ID)、

Ping Identity (PingFederate)、Gluu (OX)、Layer 7

10

Page 12: OpenID Connect 概要 (2013年9月)

Backup Slides

Page 13: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect仕様はモジュール化されており、用途に応じて取捨選択が可能

Webクライアント向けのシンプルな仕様。

Basic Client Profileは

OAuth 2.0認可コードフロー、Implicit Client Profileは同Implicitフローをベースに拡張。

12

Page 14: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例 (*)

1. WebブラウザからRPの「ログイン」ボタンを

クリック

13

認可

サーバー クライアント 認可

エンドポイント

OpenID

プロバイダ

OpenID

リライング・ パーティ(RP)

example.comのIDでログイン!

<a href="https://server.example.com/authorize?grant

_type=code&scope=openid&client_id=3214244&state=af1

Ef">example.comのIDでログイン!</a>

(*) 本ページ以降の例示は http://www.thread-

safe.com/2012/07/how-simple-is-openid-connect-

basic.html を元に作図

トークン エンドポイント

Page 15: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

2. WebブラウザがOPに認可リクエストを送信

14

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

GET /authorize?grant_type=code&scope=openid&client_

id=3214244&state=af1Ef HTTP/1.1

Host: server.example.com

認可 エンドポイント

トークン エンドポイント

Page 16: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

3. OPがユーザーを認証

15

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

何らかの方法でユーザーを認証

例: ID/パスワード、OTP、クッキー、…

認可 エンドポイント

トークン エンドポイント

Page 17: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

4. OPがWebブラウザをRPにリダイレクト

16

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

Location: https://client.example.com/cb?code=8rFowi

dZfjt&state=af1Ef

OPがcodeを返却

認可 エンドポイント

トークン エンドポイント

Page 18: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

4. WebブラウザがRPに、OPから受け取った

認可コードを送信

17

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

GET /cb?code=8rFowidZfjt&state=af1Ef HTTP/1.1

Host: client.example.com

Webブラウザ経由でRPにcodeが渡る

認可 エンドポイント

トークン エンドポイント

Page 19: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

5. RPがOPに認可コードを送信しIDトークンを

リクエスト

18

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

GET /token?code=8rFowidZfjt HTTP/1.1

Host: server.example.com

Authorization: Basic …

codeを送信

認可 エンドポイント

トークン エンドポイント

Page 20: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

6. OPがRPに、認可コードにひもづくIDトークン他を返却

19

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

{

"access_token": "SlAV32hkKG",

"token_type": "Bearer",

"refresh_token": "8xLOxBtZp8",

"expires_in": 3600,

"id_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.

eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsInVz

ZXJfaWQiOiIyNDgyODk3NjEwMDEiLCJhdWQiOiJodHRwOi

8vY2iwiZXhwIjoxxpZW50LmV4YW1wbGUuY29tIMzExMjgxOTcwfSA.

eDesUD0vzDH3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ"

}

アクセス・ トークン (*)

IDトークン

(*) UserInfoやその他のAPIアクセスに使用。本例では省略

認可 エンドポイント

トークン エンドポイント

Page 21: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

7. RPがIDトークンを復号し、OPが返却した

ユーザー識別子を取得

20

{

"iss": "https://server.example.com",

“sub": "248289761001",

"aud": "3214244",

"iat": 1311195570,

"exp": 1311281970

}

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.

eyJpc3MiOiJodHRwczovL3NlcnZlci5leGFtcGxlLmNvbSIsInVz

ZXJfaWQiOiIyNDgyODk3NjEwMDEiLCJhdWQiOiJodHRwOi

8vY2iwiZXhwIjoxxpZW50LmV4YW1wbGUuY29tIMzExMjgxOTcwfSA.

eDesUD0vzDH3T1G3liaTNOrfaeWYjuRCEPNXVtaazNQ

<?php

$res = json_decode($response, true);

$id_token = $res['id_token'];

$id_array = mb_split(".", $id_token);

$id_body = base64url_decode($id_array[1]);

?> RP側での復号処理

(例はPHPによる実装例。

ピリオド “.” で3分割し、2番目の

パートをbase64urlデコード)

認証結果 (JWT Claims

Set)

RPが受け取った id_tokenの値

認証結果 ( base64urlエンコードされた

JWT Claims Set)

subの値 = OPからRPに 払い出された ユーザー識別子

Page 22: OpenID Connect 概要 (2013年9月)

Copyright 2013 OpenID Foundation Japan - All Rights Reserved.

OpenID Connect Basic Client Profileに基づく認証結果の要求・取得の例

8. RPがWebブラウザにコンテンツを返却

21

認可

サーバー クライアント

OpenID

プロバイダ (OP)

OpenID

リライング・ パーティ(RP)

OPから払い出されたユーザー識別子: 248289761001 にひもづくユーザーがすでに存在するか? Yes → 「ようこそ、太郎さん!」 No → 「既存ユーザーとのひもづけ or 新規登録をお願いします」

認可 エンドポイント

トークン エンドポイント

Page 23: OpenID Connect 概要 (2013年9月)