More Related Content Similar to SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Similar to SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014 (20) More from Nov Matake (20) SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit20141. OpenID Connect / OAuth /
SAML / SCIM
技術解説
一般社団法人 OpenIDファウンデーション・ジャパンエバンジェリスト nov
エクスジェン・ネットワークス株式会社 野村 健太郎
2. 目次
● 最新クラウドサービス利用事例
● プロトコル四天王
● SAML 解説
● OAuth 2.0 解説
● OpenID Connect 解説
● SCIM 解説
● まとめ
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
3. 最新
クラウドサービス
利用事例
(Greeの場合)
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
16. フェデレーションの基本的な仕組み
認証
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
サービス
(SP/RP)
認証サービス (IdP/OP)
認証情報
属性情報
● ユーザーは認証サービス(IdP/OPなど)で認証を受ける
● サービス(SP/RP)は、認証サービスが保持しているユーザー
の「認証情報」や「属性情報」が欲しい
19. プロトコルで決められていること
● 認証情報や属性情報の表現形式
○ JSON
○ XML
● 認証情報や属性情報のやりとりの方法
○ HTTP
■ メソッド (GET、POSTなど)
■ パラメーター
○ SOAP
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
21. SAML とは
● https://wiki.oasis-open.org/security/FrontPage
● SAML:Security Assertion Markup Lauguage
● 認証情報、属性情報などを XML で表現
● HTTP/SOAP などでやりとりする
● 実装例
○ サービス : 学認、Cybozu.com、Google Apps、
Salesforce、Microsoft Azure AD、Dropbox
○ ソフトウェア : OpenAM、Shibboleth、各ベンダの製品
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
22. SAML 信頼関係の構築
IdP SP
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
メタデータ
(証明書、URL など)
23. SAML シーケンス
IdP SP
Initiate
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
24. SAML シーケンス
IdP SP
Initiate
SAML 認証リクエスト
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
25. SAML シーケンス
IdP SP
Initiate
SAML 認証リクエスト
認証(ID/PW 送信)
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
26. SAML シーケンス
IdP SP
Initiate
SAML 認証リクエスト
認証(ID/PW 送信)
SAML 認証レスポンス
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
27. SAML シーケンス
IdP SP
Initiate
SAML 認証リクエスト
認証(ID/PW 送信)
SAML 認証レスポンス
SP へのログイン完了
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
28. SAML 認証リクエスト/認証レスポンス
● リクエスト (かなり省略)
<samlp:AuthnRequest
ID="ppndejggibkmmdgignpgloakglfadfldhnphndhg"
IssueInstant="2014-09-16T11:19:47Z
Version="2.0"
<saml:Issuer>https://sp.example.com</saml:Issuer>
</samlp:AuthnRequest>
● レスポンス (かなり省略)
<samlp:Response
デジタル署名情報
<saml:NameID>taro@example.jp</saml:NameID>
</samlp:Response>
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
29. 実際のリクエスト/レスポンス
リクエストレスポンス
<samlp:AuthnRequest ID="
ppndejggibkmmdgignpgloakglfadfldhnphndhg"
Version="2.0" IssueInstant="2011-04-16T11:
19:47Z" ProtocolBinding="urn:oasis:names:tc:
SAML:2.0:bindings:HTTP-POST"
ProviderName="samlsp.example.jp"
IsPassive="false"
AssertionConsumerServiceURL="https://www.
samlsp.example.jp/a/g.example.jp/acs"><saml:
Issuer>samlsp.example.jp/a/g.example.
jp</saml:Issuer><samlp:NameIDPolicy
AllowCreate="true" Format="urn:oasis:names:
tc:SAML:1.1:nameid-format:unspecified"
/></samlp:AuthnRequest>
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
<samlp:Response ID="s2cc2b844fbfe543063c49b45ec60b6f75948037f1" InResponseTo="
bjlljiaibddgppbdpimacgdfeigppjndmcfnddni" Version="2.0" IssueInstant="2011-04-16T07:22:16Z"
Destination="https://www.samlsp.example.jp/a/g.example.jp/acs"><saml:Issuer>http://idp.example.com:
8180/openam</saml:Issuer><samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:
Success">
</samlp:StatusCode></samlp:Status><saml:Assertion ID="s2b91a971b66a1864a4e95b0fff617f3ddd47f3098"
IssueInstant="2011-04-16T07:22:16Z" Version="2.0"><saml:Issuer>http://idp.example.com:
8180/openam</saml:Issuer><ds:Signature><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http:
//www.w3.org/2001/10/xml-exc-c14n#"/><ds:SignatureMethod Algorithm="http://www.w3.
org/2000/09/xmldsig#rsa-sha1"/><ds:Reference URI="#s2b91a971b66a1864a4e95b0fff617f3ddd47f3098"
><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:
Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:
DigestValue>QiBEfNqkRNiCUnMceZa5JoxdeMY=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:
SignatureValue>
JMEZqoncBBpvoWoxUqMI79CpADROnDb9sil9q7j9F0j0DXpVtR92hksF7eByMpA+XSOtEv655SDyjz+rnoeoff
OgtsiIbOAG+/a0+JUXpN27VXVJV3+WEDyAfwSqAT3a3KzF+7ssGOkEK8Ktpog8Sx60iOW4iNKGz8rcZ8pDq
q0=
</ds:SignatureValue><ds:KeyInfo><ds:X509Data><ds:X509Certificate>
MIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w
ZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQ
swCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmEx
DDAK
BgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0BAQ
EFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of+RkDsaN/igkA
vV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNYJs0Vo5+IgjxuEWnjnnV
gHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/UQzPKTPTYi9upbFXlrAKMwt
Ff2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA
cGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC/FfwWigmr
W0Y0Q==
</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><saml:Subject><saml:NameID Format="
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" NameQualifier="http://idp.example.com:
8180/openam">taro</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:
bearer"><saml:SubjectConfirmationData InResponseTo="bjlljiaibddgppbdpimacgdfeigppjndmcfnddni"
NotOnOrAfter="2011-04-16T07:32:16Z" Recipient="https://www.samlsp.example.jp/a/g.example.jp/acs"
/></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="2011-04-16T07:12:16Z"
NotOnOrAfter="2011-04-16T07:32:16Z"><saml:AudienceRestriction><saml:Audience>samlsp.example.jp/a/g.
example.jp</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement
AuthnInstant="2011-04-16T07:22:16Z" SessionIndex="s2e924fdac5fe15c4559aab5118be38caed9dc7f01"
><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:
PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:
AuthnStatement></saml:Assertion></samlp:Response>
48. (SCIM の説明の前に) LDAPってご存知ですよね?
LDAP LDAP サーバー
クライアント
LDAP
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
LDAP サーバー
LDAP サーバー
LDIF
uid: taro
...
LDAP
LDAP
49. SCIM は JSON + HTTP な
ID プロビジョニングプロトコル
SCIM SCIM サーバー
クライアント
JSON HTTP
{
userName : taro
...
}
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
SCIM サーバー
SCIM サーバー
HTTP
HTTP
50. SCIM とは
● http://www.simplecloud.info/
● System for Cross-domain Identity Management
● クラウドサービスにおける ID 管理の仕様
● ユーザー情報やグループ情報を JSON で表現し、HTTP でリク
エスト/レスポンスを送受信 (REST API)
○ 策定中の最新仕様(SCIM 2.0)では XML に関する仕様は
削除された
● 実装例
○ Salesforce、その他クラウドサービス
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
51. SCIM の JSON スキーマ
{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:
User"],
"userName": "taro@example.jp",
"displayName": "NIHON Taro",
"nickName": "taro",
"meta": {
省略
}
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
}
52. SCIM で利用する HTTP メソッド
操作HTTPメソッド
追加(生成) POST
更新PUT (replace)
PATCH (modify)
削除DELETE
取得/検索GET
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
53. SCIM API の認証・認可
● SCIM の API にだれでもアクセスできたら困るので、API の利
用を制御するための認証・認可の仕組みが必要
● しかし、SCIMでは認証・認可に関する仕様は定義されていない
○ HTTP ベースだから、認証・認可も既存の HTTP ベースの
仕様を使ってね、というスタンス
○ 仕様では OAuth 2.0 を推奨と記載されている
● 実サービスでも、認証・認可は OAuth 2.0 で実装されている場
合が多い。そのため、SCIM API を利用する場合は OAuth 2.0
の知識も必要
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
54. SCIM リクエスト
$ curl
-H "Authorization: Bearer AccessToken(※)"
-H "Content-Type: application/scim+json"
-X "POST"
-d
‘{
JSON (詳細は省略)
} ’
https://scimsv.example.jp/v1/Users
※アクセストークン(AccessToken)は事前に取得しておく
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
55. SCIM レスポンス
HTTP/1.1 201 Created
Content-Type: application/scim+json
Location: https://scimsv.example.jp/v1/Users/2819c223-
7f76-453a-919d-413861904646
{
JSON (詳細は省略)
}
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.
58. 各プロトコルの学習のポイント
● 用語を把握する
○ 登場人物(IdP、OP、SP、RP)と役割を覚える
● HTTP の知識重要
● プログラミング言語
○ 言語はなんでもいいので、簡単な Web アプリ
や HTTP クライアントが作れると捗る
○ Unix/Linux のコマンドでもOK!
Copyright © 2014 OpenID Foundation Japan. All Rights Reserved.