2016年年12⽉月19⽇日
ヤフー株式会社
認証技術(ID連携)⿊黒帯 倉林林 雅
Yahoo!  JAPANの
OpenID  Certified  Mark取得について
OpenID  TechNight Vol.14
プロフィール
2
倉林林 雅(kura)
ヤフー株式会社
認証技術(ID連携)⿊黒帯
OpenID  ファウンデーション・ジャパン
エバンジェリスト
@kura_̲lab
⿊黒帯制度度
⿊黒帯とは「該当分野について
突出した知識識とスキルを
持っている第⼀一⼈人者」のこと
3
⿊黒帯制度度
http://hr.yahoo.co.jp/workplace/culture.html
アジェンダ
4
1. はじめに
2. Yahoo!  ID連携とは
3. OpenID  Certification  プログラムとは
4. Yahoo!  ID連携がOpenID  Certified  Markを取得する理理由
5. 標準対応にあたっての仕様変更更点
6. 設計時に苦悩した仕様
7. 対応時に拡張したくなった仕様
8. 導⼊入のお問い合わせ・⼀一般公開について
9. まとめ
5
はじめに
OpenID  Certified  Mark取得しました
6 https://techblog.yahoo.co.jp/advent-‐‑‒calendar-‐‑‒2016/openid_̲certified/
OpenID  Certified  Mark取得しました
7
Yahoo!  ID連携(Yahoo!  ID  Federation)は
OpenID  Connect™  protocolのOP  Basic,  
OP  Implicit,  OP  Hybrid,  OP  Configのプロファイル
を適合したOpenID  Certified™な実装を提供します。
OpenID  Certified™   by  Yahoo  Japan  Corporation  to  
the  of  OP  Basic,  OP  Implicit,  OP  Hybrid  and  OP  Config of  
the  OpenID  Connect™  protocol.
8
Yahoo!  ID連携とは
Yahoo!  ID連携とは
9
• Yahoo!  JAPAN  IDを⽤用いてID連携をする仕組み
• OpenID  Connectで認証認可を提供
• シングルサインオン
• ユーザーの属性情報取得
• SDKを提供
• PHP  /  Java /  iOS /  Android
Yahoo!  JAPAN  IDについて
10
l Yahoo!  JAPAN  IDとは、Yahoo!  JAPANのサービスを
ご利利⽤用になるためのアカウントです。
l Yahoo!メール、ヤフオク!、Yahoo!ニュース、
Yahoo!天気などの、ほぼすべてのYahoo!サービスで
利利⽤用できます。
l 外部のサイトでもYahoo!  JAPAN IDを利利⽤用できる
サイトが増え、⽇日を追うごとに利利便便性が向上しています。
⽉月間3,600万ID*以上の
アクティブ利利⽤用者数を持つ
⽇日本最⼤大級の会員基盤です
*  ヤフー株式会社 2016年年度度第2四半期決算説明会資料料より
国内ソーシャルログイン利利⽤用率率率シェアNo.1
11
56.5%
22.1%
17.8%
3.1% 0.5%
全社のソーシャルログイン率率率
Yahoo!  JAPAN
Facebook
Google/Google+
Twitter
mixi
フィードフォース株式会社様プレスリリースより(2015/07/16)
国内ソーシャルログイン利利⽤用率率率
Yahoo! JAPAN ID
シェアNo.1
※株式会社フィードフォース提供、ソーシャルPLUS利利⽤用企業の統計データ
OpenID  Connect
12
• OAuth  2.0を拡張し認証機能を追加したプロトコル
• OAuth  2.0ベースなのでリソースアクセスも可
• ユーザーの属性情報取得についても定義
• 認証 + 認可 + 属性情報取得
• サーバサイドだけでなくクライアントサイドでの利利⽤用
も想定
13
OpenID  Certification  プログラムとは
OpenID  Certification  プログラムとは
14
• ID連携の技術であるOpenID  Connectを実装してい
る事業者に対して標準仕様に適合しているかをテスト
するプログラム
• 仕様を満たしテストに合格することでOpenID  
Connectの仕様策定、標準化しているOpenID  
Foundationから適合している実装であることを⽰示す
OpenID  Certified  Markが与えられる
OpenID  Certification  プログラムとは
15
http://openid.net/certification/
• Google,  Microsoft,  Ping  Identity,  Salesforce,  
PayPal,  NRI,  NEC,  オージス総研など、34のサー
ビスがOpenID  Certifiedとなっている
(2016年年12⽉月時点)
Yahoo!  ID連携も追加されました
16
Yahoo!  ID連携が
OpenID  Certified  Markを取得する理理由
OpenID  Certified  Markを取得する理理由
17
• OpenID  Certified  Markの取得
=  「標準仕様に準拠すること」
• 異異なる実装間での相互運⽤用性が確実になる
• 例例)すでにGoogle  Federated  Identityを
導⼊入しているサービスであれば
Yahoo!  ID連携もほぼ同じ実装で
導⼊入が可能
OpenID  Certified  Markを取得する理理由
18
• 標準仕様に対応したOSSのライブラリーも利利⽤用でき
るため、いろいろな開発⾔言語や環境での導⼊入コスト削
減も期待できる
• Libraries,  Products,  and  Tools
• http://openid.net/developers/libraries/
• C,  C#,  Go,  Java,  JavaScript,  Perl,  PHP,  
Ruby...etc
これまでのYahoo!  ID連携はdraft仕様
19
• これまでのYahoo!  ID連携はOpenID  Connectの標
準仕様とは微妙に異異なる仕様で機能を提供してきた
• OpenID  Connectの仕様は2014年年2⽉月にローンチ
されたが、Yahoo!  JAPANでは2012年年の年年末時点
でdraftをベースとした仕様で機能の提供を開始
draft仕様の背景
20
• 主なインターネット標準仕様策定の流流れ
1. draft(仕様のたたき)を作成
2. ベンダーやプロバイダーが実装・提供し、draft
の修正を繰り返す
3. draftから標準仕様になる
• 当時はYahoo!  JAPANに限らずGoogleや
Microsoftもdraft仕様でサービスを提供
draft仕様の背景
21
• Yahoo!  JAPANではOpenID  2.0,  BBAuth,  
OAuth 1.0aといったID連携技術を提供してきた
• 多くの企業とID連携をすすめていく上で「認証と認
可の2つの機能の導⼊入」や「RPが導⼊入する際のより
簡単な実装」が求められた
• 仕様の最終版を待たず策定中のdraftの仕様を採⽤用
さらなる多様なニーズに応えるために
22
• 2012年年からdraft仕様で提供してきたが、
2014年年に標準化され課題やニーズが増えてきた
標準仕様に対応した
ライブラリや
ミドルウェアの充実
ネイティブアプリの
クライアントと
サーバーでの認証認可
標準仕様対応 Hybrid  Flow対応
さらなる多様なニーズに応えるために
23
• 課題の解決と多様なニーズに応え、また多くのサービ
スへ簡単に導⼊入してもらえるように標準仕様に対応し
不不⾜足していた機能を追加することにした
• そして2016年年12⽉月に新しいYahoo!  ID連携が
OpenID  Certificationプログラムのテストを通過し
OpenID  Certifiedされた
OpenID  Certified  Mark取得しました
24
Yahoo!  ID連携(Yahoo!  ID  Federation)は
OpenID  Connect™  protocolのOP  Basic,  
OP  Implicit,  OP  Hybrid,  OP  Configのプロファイル
を適合したOpenID  Certified™実装です。
OpenID  Certified™   by  Yahoo  Japan  Corporation  to  the  of  
OP  Basic,  OP  Implicit,  OP  Hybrid  and  OP  Config of  
the  OpenID  Connect™  protocol.
25
標準対応にあたっての仕様変更更点
標準対応にあたっての仕様変更更点
26
• 新しいYahoo!  ID連携で変更更された仕様や新たに追
加された標準仕様
• ID  Token・Claim関連
• Hybrid  Flow
• draftとの差分とその⽬目的を確認しながら変更更点をみ
ていきましょう
ID  Token・Claim関連
27
• ID  Token・UserInfo  Endpointのユーザー識識別⼦子の
user_̲idをsubへ変更更
• sub:subject(主体)。ユーザー識識別⼦子
• 仕様策定中の整合性のため
• ID  Tokenのデコード結果を返却するCheck  ID  Endpoint
の廃⽌止
• ID  TokenはJSONベースのフォーマットであり多くの
場合、クライアントサイドでデコードできるため
ID  Token・Claim関連
28
• ID  Tokenの署名を共有鍵を⽤用いたHMAC-‐‑‒SHA256から
公開鍵によるRSA-‐‑‒SHA256へ変更更
• 共有鍵が漏漏洩した場合、署名が⽣生成できるためID  
Tokenを偽装できてしまう
• 公開鍵にすることでID  Tokenの偽装を防⽌止するととも
に鍵管理理のコストを下げるため
ID  Token・Claim関連
29
• ID  TokenのPayloadにauth_̲time,  armを追加
• auth_̲time:Authentication  Time。認証時間
• amr:Authentication  Method  Reference。
パスワードやワンタイムパスワードなどの認証⼿手段
• IdP(ID  Provider)がユーザーを認証した時刻と認証
⽅方法をRPで判定できるようにするため
ID  Token・Claim関連
30
• ID  TokenのPayloadにat_̲hash,  c_̲hashを追加
• at_̲hash:Access  Token  Hash
• c_̲hash:Authorization  Code  Hash
• SHA1のハッシュ値。
• ID  Tokenを受け取った際に検証することで
Access  Token, Authorization  CodeとID  Tokenの
組み合わせの改ざんを防⽌止するため
Hybrid  Flow
31
• Hybrid  Flow対応
• クライアントサイド、サーバーサイドの両サイド
での連携を可能にするため
• Authorization  Code  Flow・Hybrid  Flowに
おけるToken  Endpointのレスポンスで
ID  Tokenをデフォルト返却
• OpenID  Connectではユーザーの認証を
前提としているため
Hybrid  Flow
32
アプリ
Authorization  Server
Resource  Server
認証
APIリクエスト
認証
サーバーサイド
RP IdPクライアントサイド
33
設計時に苦悩した仕様
redirect_̲uriの仕様
34
ココの話
redirect_̲uriの仕様
35
• redirect_̲uri
• “…  This  URI  MUST  exactly  match  one  of  
the  Redirection  URI  values  for  the  Client  
pre-‐‑‒registered  at  the  OpenID  Provider,  
with  the  matching  performed…”
OpenID  Connect  Core  1.0  incorporating  errata  set  1
http://openid.net/specs/openid-‐‑‒connect-‐‑‒core-‐‑‒1_̲0.html
redirect_̲uriの仕様
36
• サイトへの戻り先を指定するredirect_̲uriは「事前
に登録されているURIと完全⼀一致していなければな
らない」
• 同⼀一ドメインでホスティングしているRP(Relying  
Party)も考慮し、悪意あるサイトへのリダイレクト
を防⽌止するためにパスやクエリなどを制限している
• × https://example.com/site?id=<可変の値>
redirect_̲uriの仕様
37
• RPの中にはクエリなどで戻り先のページを制御した
いという要望がある
• 利利便便性が下がるが、新しいYahoo!  ID連携ではセ
キュリティを優先して仕様どおり「redirect_̲uriは
完全⼀一致」とした
• 戻り先で可変のパラメーターを利利⽤用したい場合は
state値を利利⽤用するとよい
38
対応時に拡張したくなった仕様
テンプレートの⾃自動判定
39
• displayパラメーター
• ユーザーに表⽰示する同意画⾯面等のテンプレートを
指定する機能
• 仕様に定義されているタイプ
• page/popup/touch/wap
• RPの要望:フレームワークの⾃自動判定でテンプレー
トを出し分けしていることもあり、同意画⾯面も同様に
出し分けをしてほしいというニーズがある
テンプレートの⾃自動判定
40
• displayパラメーターが未指定の場合はデフォルトで
page(PC版)のテンプレートを表⽰示する仕様となって
いる
• User  Agentを利利⽤用して適切切な画⾯面を出してもよいと
定義されている
• RPから明⽰示的に⾃自動判定を指定するために
”display=auto”を独⾃自仕様として定義した
住所情報のClaim
41
• UserInfo  Endpointの住所関連のClaim
• formatted:整形された住所情報
• street_̲address:番地・建物情報
• locality:市区町村
• region:都道府県
• postal_̲code:郵便便番号
• contry:国コード
住所情報のClaim
42
• RPの要望:RPのアカウント登録フォームのプ
リセットとして利利⽤用する際、番地と建物情報の
⼊入⼒力力項⽬目が分かれていることがあり、
street_̲addressを分割してほしい
• 独⾃自Claimとして以下の2つを定義し返却
• street_̲address_̲block:番地情報
• street_̲address_̲building:建物情報
Access/Refresh  Tokenの有効期限
43
• expires_̲inパラメーター
• Access  Tokenが無効になるまでの秒数
• RPの要望:Access  TokenだけでなくRefresh  
Tokenの有効期限も知りたい。可能であればUnixタ
イムスタンプで具体的な期限も知りたい
Access/Refresh  Tokenの有効期限
44
• Access/Refresh  Tokenは期限によらずユーザーあ
るいはIdP(ID  Provider)によって無効化される可能
性があるため、具体的なタイムスタンプを返却する仕
様にはなっていない
• 通信、処理理軽減のために、Access  Tokenは有効期限
エラーになる前に更更新する実装がベストプラクティス
となっているためタイムスタンプを返却する独⾃自仕様
も検討中
同意キャンセル
45
• 同意キャンセル時のレスポンスは未定義
• Yahoo!  ID連携ではキャンセルされた場合は、code
は返却せずにstateを付与してredirect_̲uriにリダイ
レクトさせる仕様としている
• RP側で判定するために明⽰示的にerrorや
error_̲descriptionを独⾃自仕様として定義すること
も検討中
46
導⼊入のお問い合わせ
⼀一般公開について
導⼊入のお問い合わせ
47
• 現在、新しいYahoo!  ID連携のご利利⽤用はお問い合わ
せいただいた企業のみの提供となっています。
• ご利利⽤用を希望される⽅方は以下のお問い合わせよりご連
絡ください。
• デベロッパーネットワーク -‐‑‒お問い合わせ-‐‑‒
• http://developer.yahoo.co.jp/developer/contact/
⼀一般公開について
48
• デベロッパーネットワーク上での詳細な仕様の公開や
利利⽤用は、2017年年以降降に準備でき次第ご案内しますの
で、もうしばらくお待ちください。
49
まとめ
まとめ
50
• 新しいYahoo!  ID連携はOpenID  Certified  Markを取
得しました
• 標準仕様に準拠することで、異異なる実装間での相互運⽤用性
が確実になり、OSSのライブラリーやミドルウェアを利利
⽤用できるようにしてRPへの導⼊入を促進する
• 新しいYahoo!  ID連携は標準対応にあたっていくつ
か仕様変更更をおこなった
• 独⾃自仕様も追加、検討をしている
ご清聴ありがとう
ございました
51
52
質疑応答
53
Appendix
Appendix
54
• ⿊黒帯制度度
• http://hr.yahoo.co.jp/workplace/culture.html
• Yahoo!  ID連携(外部サイト)
• http://developer.yahoo.co.jp/yconnect/
• OpenID  Certification(外部サイト)
• http://openid.net/certification/
• OpenID  Certified  Mark(外部サイト)
• http://openid.net/certification/mark/
• OpenID  Certification  Program(外部サイト)
• http://oixnet.org/openid-‐‑‒certifications/yahoo-‐‑‒japan/
Appendix
55
• Yahoo!  ID連携とは -‐‑‒OAuth 2.0  および OpenID  Connectの仕様について
• http://developer.yahoo.co.jp/yconnect/introduction.html
• OpenID  Connect  ⼊入⾨門 ?コンシューマーにおけるID連携のトレンド?(外部サイ
ト)
• http://www.slideshare.net/kura_̲lab/openid-‐‑‒connect-‐‑‒id
• OpenID  Connect  Core  1.0  incorporating  errata  set  1(外部サイト)
• http://openid.net/specs/openid-‐‑‒connect-‐‑‒core-‐‑‒1_̲0.html

Yahoo! JAPANのOpenID Certified Mark取得について