OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜

41,212 views

Published on

タイトル:
『OpenID Connect 入門 〜コンシューマー領域におけるID連携のトレンド〜』

概要:
コンシューマー領域におけるID連携のトレンドであるOpenID Connectの概要と仕様のポイントについてご紹介します。

OpenID TechNight Vol.13 - ID連携入門 Aug. 26, 2015
URL:https://openid.doorkeeper.jp/events/29487

Published in: Internet
0 Comments
91 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
41,212
On SlideShare
0
From Embeds
0
Number of Embeds
20,508
Actions
Shares
0
Downloads
244
Comments
0
Likes
91
Embeds 0
No embeds

No notes for slide

OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜

  1. 1. 2015.8.26 OpenID ファウンデーション・ジャパン 倉林 雅 OpenID Connect 入門
 ∼コンシューマーにおけるID連携のトレンド∼
  2. 2. 倉林林  雅(kura)   OpenID  ファウンデーション・ジャパン
                                          エヴァンジェリスト   ヤフー株式会社  IDサービス  エンジニア   ID厨   @kura_̲lab
  3. 3. アジェンダ 1. 解説の前に 2. OpenID Connectの特徴 3. OpenID Connectの流れ 4. IDトークンについて 5. UserInfo Endpointについて
  4. 4. 解説の前に
  5. 5. RPはつらいよ 数年年に⼀一度度くらいの頻度度で
                            新しい認証・認可プロトコルがでてくる   …SAML・OpenID・OAuth  1.0・OAuth  2.0   対応するにも実装⽅方法全然違う   SOAP  or  RESTful  /  XML  or  JSON
  6. 6. RPはつらいよ これまでのプロトコルに⽐比べて
                 OpenID  Connectは実装が簡単   いろいろなユースケースに対応している   Apps:Web・Native   Flow:Authorization  Code・Implicit・Hybrid
  7. 7. RPはつらいよ それぞれ実装⽅方法、検証⽅方法が微妙に異異なっていて 複数のクライアント・フローを実装するのはツライ   ですが、パスワードを⾃自前で管理理するコストを
                           考えれば全然楽なもの
  8. 8. IdPはもっとつらいよ 何世代も前のプロトコルもまだまだ現役   改修するにもビルドもできなくてメンテがツライ   パスワードの管理理はかなりセンシティブ   ハッシュ化・アクセス制限
  9. 9. RPはつらくない IdPに⽐比べたらRPはそこまでつらくない   ぜひOpenID  Connectを覚えてかえってください!
  10. 10. OpenID Connectの特徴
  11. 11. OpenID Connect 2014年2月27日ローンチ OpenID ConnectはOAuth 2.0を
             拡張したプロトコル OpenIDって名前がついてますが、
          OpenID 2.0とは異なります
  12. 12. 基本的にOpenIDは認証の技術 (OpenID AXで属性を取得できますが) OpenIDは認証
  13. 13. OAuth 1.0・OAuth 2.0は認可の技術 ユーザーのリソースアクセス(Web API)が目的 OAuthは認可
  14. 14. 認証も認可も 認証も認可もやりたい場合は
    OpenIDもOAuthも実装しなくてはいけない そこで実装しやすいOAuth 2.0を拡張して
                認証機能を追加 認可認証 OpenID Connect
  15. 15. さらに属性取得機能も よく利用されるユーザーの属性情報APIの
             仕様も定義されている ユーザー識別子・氏名・性別・生年・
          住所・メールアドレスなど 認可認証 OpenID Connect 属性取得
  16. 16. OpenID Connect ID連携のトレンド!
  17. 17. http://openid.net/connect/
  18. 18. OpenID Connectの流れ
  19. 19. OpenID Connect 認証フロー Authorization Code Flow サーバーサイドで認証 Implicit Flow クライアントサイドで認証 Hybrid Flow サーバーサイド・クライアントサイドの両方で認証
  20. 20. 基本のフローをみてみよう 基本となる「Authorization Code Flow」を
 まずは覚えよう OAuth 2.0のフローと比較しながら
 OpenID Connectで追加された処理と
              ポイントを確認しよう
  21. 21. OAuth 2.0 Authorization Code Flow
  22. 22. IdPRPEnd-User Resource Server Start OAuth
  23. 23. IdPRPEnd-User Authorization Request (Redirect) Resource Server Start OAuth
  24. 24. IdPRPEnd-User Authorization Request (Redirect) Resource Server Start OAuth Login / Consent
  25. 25. IdPRPEnd-User Authorization Request (Redirect) Resource Server Start OAuth Authorization Code (Redirect) Login / Consent
  26. 26. IdPRPEnd-User Authorization Request (Redirect) Resource Server Start OAuth Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token
  27. 27. IdPRPEnd-User Authorization Request (Redirect) Resource Server Start OAuth Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token Resource Access Resource
  28. 28. OpenID Connect Authorization Code Flow
  29. 29. IdPRPEnd-User UserInfo Endpoint Start OpenID Connect
  30. 30. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Start OpenID Connect
  31. 31. HTTP/1.1 302 Found Location: https://server.example.com/authorize? response_type=code &scope=openid%20profile%20email &client_id=s6BhdRkqt3 &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Authorization Request
  32. 32. HTTP/1.1 302 Found Location: https://server.example.com/authorize? response_type=code &scope=openid%20profile%20email &client_id=s6BhdRkqt3 &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Authorization Request Scopeパラメーターに openid は必須
  33. 33. HTTP/1.1 302 Found Location: https://server.example.com/authorize? response_type=code &scope=openid%20profile%20email &client_id=s6BhdRkqt3 &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Authorization Request 取得する属性情報を指定
  34. 34. HTTP/1.1 302 Found Location: https://server.example.com/authorize? response_type=code &scope=openid%20profile%20email &client_id=s6BhdRkqt3 &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Authorization Request CSRF対策のランダム文字列を指定 セッションにひも付けて保存しておく
  35. 35. HTTP/1.1 302 Found Location: https://server.example.com/authorize? response_type=code &scope=openid%20profile%20email &client_id=s6BhdRkqt3 &state=af0ifjsldkj &nonce=n-0S6_WzA2Mj &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Authorization Request リプレイアタック対策のランダム文字列を指定 セッションにひも付けて保存しておく
  36. 36. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Start OpenID Connect
  37. 37. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Login / Consent Start OpenID Connect
  38. 38. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Start OpenID Connect
  39. 39. HTTP/1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA &state=af0ifjsldkj Authorization Response
  40. 40. HTTP/1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA &state=af0ifjsldkj Authorization Response Authorization Code(認可コード)
 がクエリに付与されて返却される
  41. 41. HTTP/1.1 302 Found Location: https://client.example.org/cb? code=SplxlOBeZQQYbYS6WxSbIA &state=af0ifjsldkj Authorization Response セッションにひも付けておいた State値と比較 値が一致しない場合は処理を中断
  42. 42. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Start OpenID Connect
  43. 43. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Start OpenID Connect
  44. 44. POST /token HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW grant_type=authorization_code
 &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Token Request
  45. 45. POST /token HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW grant_type=authorization_code
 &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Token Request Basic認証 base64_encode(Client_ID . : . Secret);
  46. 46. POST /token HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW grant_type=authorization_code
 &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Token Request 取得したAuthorization Codeを指定
  47. 47. POST /token HTTP/1.1 Host: server.example.com Content-Type: application/x-www-form-urlencoded Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW grant_type=authorization_code
 &code=SplxlOBeZQQYbYS6WxSbIA &redirect_uri=https%3A%2F %2Fclient.example.org%2Fcb Token Request SecretやAuthorization Codeを
 扱うので POST メソッド
  48. 48. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Start OpenID Connect
  49. 49. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Start OpenID Connect
  50. 50. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.eyJggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response
  51. 51. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.eyJggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response JSON形式(XMLじゃない)
  52. 52. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.eyJggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response Access Tokenと
 Refresh Tokenを取得
  53. 53. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.eyJggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response Access Tokenは Bearer形式 Authorization: Bearer <Access Token>
  54. 54. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.eyJggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response ID Token(認証用トークン)を取得 シグネチャとデコードして各パラメーターを検証
  55. 55. HTTP/1.1 200 OK Content-Type: application/json Cache-Control: no-store Pragma: no-cache { "access_token": "SlAV32hkKG", "token_type": "Bearer", "refresh_token": "8xLOxBtZp8", "expires_in": 3600, "id_token": “eyJhbGciOi6IjFlOWdkazcifQ.eyJewogImlzc6ICJzZCaGRSa3F0MyIsCiA ibm9uY2UiOiODA5NzAKfQ.JggW8hZ16IcmD3HP99Obi1PRs- cwhJ3LO-p146waJMzqg" } Token Response eyj...eyj...(テンション↑↑)
  56. 56. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Start OpenID Connect
  57. 57. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Resource Access Start OpenID Connect
  58. 58. GET /userinfo HTTP/1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG…segsef UserInfo Request
  59. 59. GET /userinfo HTTP/1.1 Host: server.example.com Authorization: Bearer SlAV32hkKG…segsef UserInfo Request Bearerトークン Authorization: Bearer <Access Token>
  60. 60. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Resource Access Start OpenID Connect
  61. 61. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Resource Access Resource Start OpenID Connect
  62. 62. HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "picture": “http://example.com/janedoe/me.jpg”, "email": "janedoe@example.com" } UserInfo Response
  63. 63. HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "picture": “http://example.com/janedoe/me.jpg”, "email": "janedoe@example.com" } UserInfo Response JSON形式(XMLじゃない)
  64. 64. HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "picture": “http://example.com/janedoe/me.jpg”, "email": "janedoe@example.com" } UserInfo Response ユーザー識別子(openid)
  65. 65. HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "picture": “http://example.com/janedoe/me.jpg”, "email": "janedoe@example.com" } UserInfo Response プロフィール情報(profile)
  66. 66. HTTP/1.1 200 OK Content-Type: application/json { "sub": "248289761001", "name": "Jane Doe", "given_name": "Jane", "family_name": "Doe", "preferred_username": "j.doe", "picture": “http://example.com/janedoe/me.jpg”, "email": "janedoe@example.com" } UserInfo Response メールアドレス(email)
  67. 67. サービス導入例
  68. 68. GREEログイン Y!ログイン YConnect 同意画面 GREE登録 倉林雅 倉林 雅
  69. 69. GREEログイン Y!ログイン YConnect 同意画面 GREE登録 倉林雅 倉林 雅 RPのログインボタン OpenID Connect開始
  70. 70. IdPRPEnd-User UserInfo Endpoint Start OpenID Connect
  71. 71. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Start OpenID Connect
  72. 72. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Login / Consent Start OpenID Connect
  73. 73. GREEログイン Y!ログイン YConnect 同意画面 GREE登録 倉林雅 倉林 雅 IdPのログイン
 (認証機能)
  74. 74. GREEログイン Y!ログイン YConnect 同意画面 GREE登録 倉林雅 倉林 雅 アプリへの アクセス確認 属性・API 利用内容
  75. 75. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Login / Consent Start OpenID Connect
  76. 76. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Start OpenID Connect
  77. 77. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Start OpenID Connect
  78. 78. IdPRPEnd-User Authorization Request (Redirect) UserInfo Endpoint Authorization Code (Redirect) Login / Consent Token Request Access Token / Refresh Token / ID Token Resource Access Resource Start OpenID Connect
  79. 79. GREEログイン Y!ログイン YConnect 同意画面 GREE登録 倉林雅 倉林 雅氏名・生年・性別
 のプリセット
 (属性情報取得機能)
  80. 80. IDトークンについて
  81. 81. issuer  が  audience  のために     subject  を認証したかを⽰示すトークン IDトークンとは
  82. 82. issuer  が  audience  のために     subject  を認証したかを⽰示すトークン Identity Provider IDトークンとは
  83. 83. issuer  が  audience  のために     subject  を認証したかを⽰示すトークン Relying Party IDトークンとは
  84. 84. issuer  が  audience  のために     subject  を認証したかを⽰示すトークン End-User IDトークンとは
  85. 85. Facebook  が  SlideShare  のために     kura  を認証したかを⽰示すトークン IDトークンとは
  86. 86. Yahoo!  が  GREE  のために     kura  を認証したかを⽰示すトークン IDトークンとは
  87. 87. フォーマット JSON Web Token JSONを(URLSafeな)Base64エンコードした シグネチャ(署名)付きトークン ヘッダー・ペイロード・シグネチャで構成される シグネチャはハッシュ(HMAC)と公開鍵暗号 (RSA・ECDSA)
  88. 88. { “typ”:”JWT”, “alg”:”RS256” } ヘッダー
  89. 89. { “typ”:”JWT”, “alg”:”RS256” } ヘッダー タイプ:JSON Web Token JWTで jot(ジョット) と発音
  90. 90. { “typ”:”JWT”, “alg”:”RS256” } ヘッダー シグネチャのアルゴリズム RSA-SHA256
  91. 91. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード
  92. 92. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード issuer IDトークンの発行者
  93. 93. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード subject ユーザー識別子(認証の対象者)
  94. 94. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード audience Client ID(IDトークンの払い出し先)
  95. 95. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード セッションにひも付けておいた Nonce値と比較する 値が一致しない場合は処理を中断
  96. 96. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード issue at 発行時のUnixタイムスタンプ 有効期限は発行から10分くらいにするとよいかも
  97. 97. { “iss”:”https://auth.login.yahoo.co.jp”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } ペイロード expiration IDトークンの有効期限 RPで発行するCookieの有効期限の基準にしてもよい 同じ期限にしなくてもよい
  98. 98. { “typ”:”JWT”, “alg”:”RS256” } 
 { “iss”:”https://example.com”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } シグネチャ
  99. 99. { “typ”:”JWT”, “alg”:”RS256” } 
 { “iss”:”https://example.com”, “sub”:”123456789”, “aud”:”abcdefg”, “nonce”:”xyz”, “iat”:1291836800, “exp”:1300819380 } シグネチャ Base64エンコード URL Safeに変換 + → - / → _ = →
  100. 100. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ シグネチャ
  101. 101. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ シグネチャ JSONの「{ 」をBase64エンコードすると 先頭が「eyJ」になる(テンション↑↑)
  102. 102. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ シグネチャ ヘッダーとペイロードを . (ピリオド)で連結
  103. 103. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ シグネチャ 秘密鍵でシグネチャを生成 (RSA-SHA256)
  104. 104. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk シグネチャ 生成されたシグネチャを
 Base64エンコード(URL Safe)
  105. 105. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk IDトークン
  106. 106. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk IDトークン ヘッダーとペイロードを . (ピリオド)で連結
  107. 107. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk IDトークン IDトークン完成
  108. 108. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk IDトークンの検証 「ヘッダー + . + ペイロード」を 入力データとする
  109. 109. eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9 .
 eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ . dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk IDトークンの検証 入力データとシグネチャを公開鍵で検証する
  110. 110. UserInfo Endpointについて
  111. 111. UserInfo OpenID Connectではよく利用される氏名や住所、 メールアドレスなどの属性情報を取得しやすいよう に属性情報(Claim)を定義している OpenID Connect対応のIdP各社から同じScopeを 指定して同じフォーマットで属性情報を取得できる
  112. 112. 定義されている属性 メンバー scope 説明 sub - ユーザー識別子 name profile 氏名 given_name profile 名 family_name profile 姓 middle_name profile ミドルネーム nickname profile ニックネーム preferred_
 username profile 簡略名 メンバー scope 説明 profile profile プロフィール情報 のURL picture profile プロフィール画像 のURL website profile サイトURL email email メールアドレス email_verified email メールアドレスの 検証済みの有無 gender profile 性別 birthdate profile 生年月日
  113. 113. 定義されている属性 メンバー scope 説明 zoneinfo profile タイムゾーン locale profile 国コード phone_number phone 電話番号 phone_number_verified phone 電話番号の検証済み
 の有無 address address 住所 updated_at profile 属性情報更新日時
  114. 114. UserInfoを活用しよう UserInfoで取得できる属性情報
 (⽒氏名・住所・メールアドレスなど)
 で新規登録フォームをプリセット   わずらわしいフォームの⼊入⼒力力を
 省省略略できてコンバージョンアップ
 (⾦金金融系・コマース系サイトなど) 倉林雅 倉林 雅
  115. 115. まとめ 1. OpenID Connectの特徴 OAuth 2.0ベース・認証・認可・属性取得 2. OpenID Connectの流れ 基本となるAuthorization Code Flow 3. IDトークンについて JSON Web Token 4. UserInfo Endpointについて よく利用しそうな属性情報が定義されている
  116. 116. ご清聴ありがとう ございました。

×