• 検索結果がありません。

自己紹介 氏縄武尊 (Ujinawa Takeru) ThemiStruct 認証技術グループ技術開発 (Inventory 認証等 ) OpenID Connect OpenID Foundation Japan Enterprise Identity WG 2

N/A
N/A
Protected

Academic year: 2021

シェア "自己紹介 氏縄武尊 (Ujinawa Takeru) ThemiStruct 認証技術グループ技術開発 (Inventory 認証等 ) OpenID Connect OpenID Foundation Japan Enterprise Identity WG 2"

Copied!
52
0
0

読み込み中.... (全文を見る)

全文

(1)

株式会社 オージス総研

テミストラクトソリューション部

氏縄 武尊

OpenID Connect & SCIM

最新プロトコル動向

(2)

氏縄 武尊

(Ujinawa Takeru)

自己紹介

ThemiStruct

認証技術グループ

技術開発(Inventory認証等)

OpenID Connect

OpenID Foundation Japan

Enterprise Identity WG

(3)

会社概要

代表者:

代表取締役社長 西岡 信也

設 立:

1983年6月29日

資本金:

4.4億円

(大阪ガス株式会社100%出資)

事業内容:

システム開発、プラットフォームサービス、

コンピュータ機器・ソフトウェアの販売、

コンサルティング、研修・トレーニング

主な事業所

本 社: 大阪府 大阪市西区千代崎3-南2-37 ICCビル 東京本社: 東京都 港区港南2-15-1 品川インターシティA棟 千里オフィス: 大阪府 豊中市新千里西町1-2-1 名古屋オフィス: 愛知県 名古屋市中区錦1-17-13 名興ビル

売上実績:

582億円

(連結)

308億円

(単体) (2014年度)

従業員数:

3,126名

(連結)

1,279名

(単体)

関連会社:

さくら情報システム(株)、 (株)宇部情報システム、 (株)システムアンサー、

OGIS International, Inc. 、上海欧計斯軟件有限公司(中国)

オージス総研グループ 売上構成比(連結)

取得許可認定

(4)

(5)

 それぞれのWebページでの認証

- 各ページでログインを行う

- 各ページの開発を行う

従来の認証

①アクセス

②認証要求

③認証応答

④情報照会

⑤認証結果

⑥識別情報返却

⑦識別情報と一緒に

アクセス

⑧ユーザ向けページ

クライアント端末

アプリケーション

ユーザーストア

(6)

従来の認証(SSO)

クライアント端末

アプリケーション

⑥識別情報と一緒にアクセス

エージェント

or リバースプロキシ

ユーザーストア

認証基盤

アプリケーション

認証基盤

ウェブアプリケーション

⑦識別情報確認

⑧ユーザ情報連携

⑨ユーザ情報連携

⑩ユーザ向けページ

③情報照会

④認証結果

⑤識別情報提供

②認証

OpenAM等

①アクセス

(7)

SAML

クライアント端末

SP

(Service Provider)

①アクセス

IdP

(Identiry Provider)

②SAML

リクエスト

⑥ユーザ向けページ

④SAML

アサーション

(認証情報・属性・権限)

⑤検証

(8)

 導入が困難なケースが多い

- 用語の多い

- メリット・デメリットの理解が追いつかない

- 検証・デバッグが容易でない

SAMLの問題点

SAML + 独自プロトコル 等の実装

変化が多く対応し辛い状況が続いている

(9)

(10)

 HTTP上で認可

- 自分の代わりに何かしてもらう

OAuth2.0

クライアント端末

OAuth クライアント

認可サーバ

②認可

リクエスト

④認可

コード

⑥トークン

応答

⑤認可

コード

(11)

OpenID Connect

クライアント端末

RP

(Relying Party)

OP

(OpenID Provider)

③ID Token

(12)

 (OPで)認証後に(RPの)サービスを利用

- 認証結果と属性情報を受け渡せる

- OAuth2.0プロトコルがベース

 重要なワード

- OP (OpenID Provider)

→認証を行いID情報を連携する

- RP (RelyingParty)

→OPで認証後にアプリケーションを提供する

- ID Token

→認証したエンドユーザの情報・認証に関する情報を持つトークン

- User Info

→認証したエンドユーザの情報

- Access Token

→Userinfoの情報を取得するためのトークン

OpenID Connect

(13)

Code Flow

クライアント端末

RP

(Relying Party)

OP

(OpenID Provider)

⑤認可

コード

④認可コード

連携

②認証要求

⑥ID Token

(14)

認可Code Flow

クライアント端末

RP(Relying Part)

OP(OpenID Provider)

アクセス

OPへリダイレクト

・response_type=code

・client_id=クライアントID

・redirect_uri=認証後に戻る場所

・scope=取得したい情報

・nonce=replay atack対策

・state=コールバック主の特定

etc…

(15)

認可Code Flow

クライアント端末

Relying Party

OpenID Provider

認証情報送信

認証画面返却

redirect_uri にリダイレクト

・code=認可コード

・state=渡されたstate値

上の値を持ってOPへリダイレクト

(16)

認可Code Flow

クライアント端末

Relying Party

OpenID Provider

ID TokenとAccess Tokenを返却

取得したコードを用いて

ID Token, Access Tokenを要求

Access Tokenを用いて

User Infoの情報を要求

User Infoの情報を返却

ユーザ向けのサービスを提供

渡された情報を持って

リダイレクト

(17)

Implicit Flow

クライアント端末

RP

(Relying Party)

OP

(OpenID Provider)

④ID Token

連携

②認証要求

(18)

Implicit Flow

クライアント端末

Relying Party

OpenID Provider

アクセス

OPにリダイレクト

・response_type=id_token token

・client_id=クライアントID

・redirect_uri=認証後に戻る場所

・scope=取得したい情報

・nonce=replay atack対策

・state=コールバック主の特定

etc…

(19)

Implicit Flow

クライアント端末

Relying Party

OpenID Provider

認証情報送信

認証画面返却

redirect_uri にリダイレクト

・id_token=ID Token

・state=渡されたstate値

・access_token=アクセストークン

・token_type=Bearer

上の値を持ってOPへ

(20)

Implicit Flow

クライアント端末

Relying Party

OpenID Provider

Access Tokenを用いて

User Infoの情報を要求

User Infoの情報を返却

ユーザ向けのサービスを提供

渡された情報を持って

リダイレクト

(21)

ID Tokenの形(例)

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9

.

eyJzdWIiOiJ1amk1MiIsI

mF1ZCI6ImNsaWVudF9pZCIsImlzcyI6Imh0dHA6Ly9vcC5leGFtcGxl

LmNvbSIsImV4cCI6IjE0Mzk5NDYzNjAiLCJub25jZSI6IkFCQ0QxMjM

0IiwiaWF0IjoiMTQzOTk0NjAwMCJ9

.

S2GTMObgH956hjE6Pf7LEL1

+CyiobH8tVImvxsVqx1fAZkFNZGP4aVv5jjNj2Ldwt/LoGJs8Er0YZSf

KPWI1cdmEr+NtYeRyljbQvCRhg3T4aZpBfzBcwABj8DQxbv0uNuV

0s4eHS0OMM7LVJnXk/kzdCeM/cwlzz0Vor0aYdAg=

引用 http://openid.net/specs/openid-connect-core-1_0.html

ヘッダ

.

ペイロード

.

署名

(22)

ID Tokenの中身(例)

ヘッダ(署名に用いる情報)

{

"typ":"JWT",

"alg":"RS256"

}

ペイロード(ID Tokenの情報)

{

"sub":"uji52",

"aud":"client_id",

"iss":"http://op.example.com",

"nonce":"ABCD1234",

"iat": "1439946000"

"exp":"1439946360"

}

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9

eyJzdWIiOiJ1amk1MiIsImF1ZCI6ImNsaWV

udF9pZCIsImlzcyI6Imh0dHA6Ly9vcC5leGF

tcGxlLmNvbSIsImV4cCI6IjE0Mzk5NDYzNjA

iLCJub25jZSI6IkFCQ0QxMjM0IiwiaWF0Ijoi

MTQzOTk0NjAwMCJ9

S2GTMObgH956hjE6Pf7LEL1+CyiobH8tVI

mvxsVqx1fAZkFNZGP4aVv5jjNj2Ldwt/LoG

Js8Er0YZSfKPWI1cdmEr+NtYeRyljbQvCRhg

3T4aZpBfzBcwABj8DQxbv0uNuV0s4eHS0

(23)

 実装しやすい

- 何をやりとりするのかがわかりやすい

- 設定に必要な属性を予め特定できる

- 開発者の負担軽減

(24)

(25)

 OP(OpenID Provider)

- OpenAM

- op.example.com

 RP(RelyingParty)

- Node.js (passport)

- rp.example.com

実装例&デモ

(26)

(27)

 OpenAMのOP化

- クレーム

- リクエストタイプ

- 署名方法

- etc…

 RPの登録

- Client ID

- Client Secret

- redirect uri

- etc…

OpenAMの設定

(28)

 サービス>OAuth2プロバイダ

- OPの設定

→サポートするクレーム・リクエストタイプ・署名方式

(29)
(30)
(31)

 エージェント>OAuth2.0クライアント

- Client ID/Secret

- リダイレクトURI等

(32)
(33)
(34)

(35)
(36)

 初期設定

- Webフレームワーク(Express)

- 今回はpassport-openidconnectというモジュールを

使ってNode.jsのプロジェクトをRPとして動作させる

Node.js(passport-openidconnect)

# npm install -g express

# npm install -g express-generator

# express -e passport

(37)

 利用するライブラリを指定

- passport

→「認証ストラテジー」を使って認証機能を実装

- passport-openidconnect

→OpenID Connect用の「認証ストラテジー」を提供

package.json

- - - snip - - -

"passport": "*",

"passport-openidconnect": "*",

}

}

(38)

RPの設定

- app.jsに記載したRPとして動作させるための設定

passport.use(new OpenidConnectStrategy({

authorizationURL: "http://op.example.net/sso/oauth2/authorize",

tokenURL: "http://op.example.net/sso/oauth2/access_token",

userInfoURL: "http://op.example.net/sso/oauth2/userinfo",

clientID: "passportTest",

clientSecret: "password",

callbackURL: "http://rp.example.net:3000/cb",

scope: ["openid"]

}, function(accessToken, refreshToken, profile, done) {

return done(null, profile);

}));

app.get('/auth', passport.authenticate('openidconnect'));

app.get('/cb', passport.authenticate('openidconnect',{failureRedirect: '/login'}),

function(req, res) {res.redirect('/');}

(39)

RPで取得できるID Tokenの情報(デモ内容の概要)

/cb?scope=openid&code=a7a96bf2-f3ab-4d10-b1d3-6dbc125e9bc6

{

tokenName: 'id_token',

azp: 'passportTest',

sub: 'uji52',

at_hash: 'vBghv8i7ainpfA4Gz9_hPg',

iss: 'themistruct',

iat: 1439961417,

auth_time: 1439961417,

aud: [ 'passportTest' ],

- - - - snip - - - -

}

ID Tokenの情報

OPからのリダイレクト

(40)

(41)

 これまでのID管理

• それぞれのプロトコルや独自APIに合わ

せたID配布

→受け口がバラバラ

→プロビ先毎の対応が必要

→都度開発必要

→職人技

→高価格化

ID管理製品

(42)

 System for Cross-domain Identity Management

- ID管理のためのスキーマとインターフェースを定義

 RESTful

- リソースの操作をHTTPメソッドに準拠

→GET:取得

→POST:新規

→PUT:更新

→DELETE:削除

→PATCH:部分更新

- ステートレス

- ステータスコードで処理結果を通知

 標準化状況

- RFC Editor Queueに入っておりまもなくRFC化の見込み

SCIMとは

http://scim.example.com/Users

(43)

 属性を列挙したもの

- Singular Attribute

→id, userName, name, etc…

- Multi-valued Attribute

→emails, addresses, groups, etc…

スキーマ

urn:ietf:params:scim:schemas:core:2.0:User

urn:ietf:params:scim:schemas:core:2.0:Group

urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

{

"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],

"id": "abcd1234…",

"externalId": "uji52",

"userName": "uji52"

"name": {

"familyName": "ujinawa",

・ ・ ・

(44)

 id

- SCIMサーバ側でリソースにユニークなID

 externalId

- SCIMクライアント側でのID

 meta

- created

→作成した時刻

- lastModified

→最終更新時刻

- location

→リソースにアクセスするためのURI

リソースの共通属性(一部)

(45)

 userName

- サービスプロバイダでユニークなID

 name

- familyName

- givenName

- middleName

- honorificPrefix/Suffix

 title

- 役職

 active

 emails

 addresses

ユーザリソースの属性(一部)

(46)

サンプル(ユーザ作成リクエスト)

POST

/

Users

HTTP/1.1

Host: scim.example.com

Accept: application/scim+json

Content-Type: application/scim+json

Authorization: .... //APIの認可情報

Content-Length: ...

{

"schemas":

["urn:ietf:params:scim:schemas:core:2.0:User"],

"userName": "ujinawa takeru",

"externalId": "uji52",

"name": {

"familyName": "ujinawa",

POST

/

Users

HTTP/1.1

Host: scim.example.com

Accept: application/scim+json

Content-Type: application/scim+json

Authorization: .... //APIの認可情報

Content-Length: ...

{

"schemas": "urn:ietf:params:scim:schemas:core:2.0:User"],

"userName": "uji52",

"externalId": "uji52",

"name": {

"familyName": "ujinawa",

(47)

サンプル(ユーザ作成レスポンス)

HTTP/1.1 201 Created

Content-Type: application/scim+json

Location: https://scim.example.com

/v2/Users/<ユーザのリソースID>

{

"schemas":["

urn:ietf:params:scim:schemas:core:2.0:User

"],

"id": <ユーザのリソースID>,

"userName": "uji52",

"externalId": "uji52",

"name": {

"familyName": "ujinawa",

"givenName": "takeru"

(48)

サンプル(ユーザ情報取得)

GET /Users/<取得したいユーザのリソースID>

Host:

scim.example.com

Accept: application/scim+json

(49)

サンプル(ユーザ情報取得)

HTTP/1.1 200 OK

Content-Type: application/scim+json

Location: https://scim.example.com

/v2/Users/<ユーザのリソースID>

{

"schemas":["

urn:ietf:params:scim:schemas:core:2.0:User

"],

"id": <ユーザのリソースID>,

"userName": "uji52",

"externalId": "uji52",

"name": {

"familyName": "ujinawa",

"givenName": "takeru"

(50)

(51)

 それぞれが独自の方式を取るのは辞めたい

- 開発費用がかかる

- 運用が大変

 標準の仕様なので安心して身を任せる

- 周知の技術なら教えてくれる人も多い

 力を合わせてセキュリティ向上へ

まとめ

(52)

ご清聴ありがとうございました

【お問合せ先】

TEL: 03-6712-1201 / 06-6871-7998

E-mail: [email protected]

参照

関連したドキュメント

出典: Oil Economist Handbook “Energy Balances of OECD countries” “Energy Balances of

当面の間 (メタネーション等の技術の実用化が期待される2030年頃まで) は、本制度において

太陽光発電設備 ○○社製△△ 品番:×× 太陽光モジュール定格出力

・グリーンシールマークとそれに表示する環境負荷が少ないことを示す内容のコメントを含め

・太陽光発電設備 BEI ZE に算入しない BEIに算入 ・太陽熱利用設備 BEI ZE に算入しない BEIに算入 ・コージェネレーション BEI ZE に算入

GM 確認する 承認する オ.成立性の確認訓練の結果を記録し,所長及び原子炉主任技術者に報告すること

バーチャルパワープラント構築実証事業のうち、 「B.高度制御型ディマンドリスポンス実

アセアン包括 誤った原産地証明書に替えて新規証明書を発給する。 権限者の署名による承認と機関の証印