SlideShare a Scribd company logo
2015.8.26
OpenID ファウンデーション・ジャパン
倉林 雅
OpenID Connect 入門

∼コンシューマーにおけるID連携のトレンド∼
倉林林  雅(kura)  
OpenID  ファウンデーション・ジャパン

                                          エヴァンジェリスト  
ヤフー株式会社  IDサービス  エンジニア  
ID厨  
@kura_̲lab
アジェンダ
1. 解説の前に
2. OpenID Connectの特徴
3. OpenID Connectの流れ
4. IDトークンについて
5. UserInfo Endpointについて
解説の前に
RPはつらいよ
数年年に⼀一度度くらいの頻度度で

                            新しい認証・認可プロトコルがでてくる  
…SAML・OpenID・OAuth  1.0・OAuth  2.0  
対応するにも実装⽅方法全然違う  
SOAP  or  RESTful  /  XML  or  JSON
RPはつらいよ
これまでのプロトコルに⽐比べて

                OpenID  Connectは実装が簡単  
いろいろなユースケースに対応している  
Apps:Web・Native  
Flow:Authorization  Code・Implicit・Hybrid
RPはつらいよ
それぞれ実装⽅方法、検証⽅方法が微妙に異異なっていて
複数のクライアント・フローを実装するのはツライ  
ですが、パスワードを⾃自前で管理理するコストを

                          考えれば全然楽なもの
IdPはもっとつらいよ
何世代も前のプロトコルもまだまだ現役  
改修するにもビルドもできなくてメンテがツライ  
パスワードの管理理はかなりセンシティブ  
ハッシュ化・アクセス制限
RPはつらくない
IdPに⽐比べたらRPはそこまでつらくない  
ぜひOpenID  Connectを覚えてかえってください!
OpenID Connectの特徴
OpenID Connect
2014年2月27日ローンチ
OpenID ConnectはOAuth 2.0を

            拡張したプロトコル
OpenIDって名前がついてますが、

         OpenID 2.0とは異なります
基本的にOpenIDは認証の技術
(OpenID AXで属性を取得できますが)
OpenIDは認証
OAuth 1.0・OAuth 2.0は認可の技術
ユーザーのリソースアクセス(Web API)が目的
OAuthは認可
認証も認可も
認証も認可もやりたい場合は

   OpenIDもOAuthも実装しなくてはいけない
そこで実装しやすいOAuth 2.0を拡張して

               認証機能を追加
認可認証
OpenID Connect
さらに属性取得機能も
よく利用されるユーザーの属性情報APIの

            仕様も定義されている
ユーザー識別子・氏名・性別・生年・

         住所・メールアドレスなど
認可認証
OpenID Connect
属性取得
OpenID Connect
ID連携のトレンド!
http://openid.net/connect/
OpenID Connectの流れ
OpenID Connect 認証フロー
Authorization Code Flow
サーバーサイドで認証
Implicit Flow
クライアントサイドで認証
Hybrid Flow
サーバーサイド・クライアントサイドの両方で認証
基本のフローをみてみよう
基本となる「Authorization Code Flow」を

まずは覚えよう
OAuth 2.0のフローと比較しながら

OpenID Connectで追加された処理と

             ポイントを確認しよう
OAuth 2.0
Authorization Code Flow
IdPRPEnd-User
Resource
Server
Start OAuth
IdPRPEnd-User
Authorization Request (Redirect)
Resource
Server
Start OAuth
IdPRPEnd-User
Authorization Request (Redirect)
Resource
Server
Start OAuth
Login / Consent
IdPRPEnd-User
Authorization Request (Redirect)
Resource
Server
Start OAuth
Authorization Code (Redirect)
Login / Consent
IdPRPEnd-User
Authorization Request (Redirect)
Resource
Server
Start OAuth
Authorization Code (Redirect)
Login / Consent
Token Request
Access Token / Refresh Token
IdPRPEnd-User
Authorization Request (Redirect)
Resource
Server
Start OAuth
Authorization Code (Redirect)
Login / Consent
Token Request
Access Token / Refresh Token
Resource Access
Resource
OpenID Connect
Authorization Code Flow
IdPRPEnd-User
UserInfo
Endpoint
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Start OpenID Connect
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
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 は必須
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
取得する属性情報を指定
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対策のランダム文字列を指定
セッションにひも付けて保存しておく
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
リプレイアタック対策のランダム文字列を指定
セッションにひも付けて保存しておく
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Login / Consent
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Start OpenID Connect
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
Authorization Response
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
Authorization Response
Authorization Code(認可コード)

がクエリに付与されて返却される
HTTP/1.1 302 Found
Location: https://client.example.org/cb?
code=SplxlOBeZQQYbYS6WxSbIA
&state=af0ifjsldkj
Authorization Response
セッションにひも付けておいた
State値と比較
値が一致しない場合は処理を中断
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Token Request
Start OpenID Connect
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
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);
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を指定
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 メソッド
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Token Request
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Token Request
Access Token / Refresh Token / ID Token
Start OpenID Connect
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
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じゃない)
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を取得
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>
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(認証用トークン)を取得
シグネチャとデコードして各パラメーターを検証
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...(テンション↑↑)
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Token Request
Access Token / Refresh Token / ID Token
Start OpenID Connect
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
GET /userinfo HTTP/1.1
Host: server.example.com
Authorization: Bearer SlAV32hkKG…segsef
UserInfo Request
GET /userinfo HTTP/1.1
Host: server.example.com
Authorization: Bearer SlAV32hkKG…segsef
UserInfo Request
Bearerトークン
Authorization: Bearer <Access Token>
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
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
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
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じゃない)
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)
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)
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)
サービス導入例
GREEログイン Y!ログイン YConnect 同意画面 GREE登録
倉林雅
倉林
雅
GREEログイン Y!ログイン YConnect 同意画面 GREE登録
倉林雅
倉林
雅
RPのログインボタン
OpenID Connect開始
IdPRPEnd-User
UserInfo
Endpoint
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Login / Consent
Start OpenID Connect
GREEログイン Y!ログイン YConnect 同意画面 GREE登録
倉林雅
倉林
雅
IdPのログイン

(認証機能)
GREEログイン Y!ログイン YConnect 同意画面 GREE登録
倉林雅
倉林
雅
アプリへの
アクセス確認
属性・API
利用内容
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Login / Consent
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Start OpenID Connect
IdPRPEnd-User
Authorization Request (Redirect)
UserInfo
Endpoint
Authorization Code (Redirect)
Login / Consent
Token Request
Access Token / Refresh Token / ID Token
Start OpenID Connect
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
GREEログイン Y!ログイン YConnect 同意画面 GREE登録
倉林雅
倉林
雅氏名・生年・性別

のプリセット

(属性情報取得機能)
IDトークンについて
issuer  が  audience  のために    
subject  を認証したかを⽰示すトークン
IDトークンとは
issuer  が  audience  のために    
subject  を認証したかを⽰示すトークン
Identity Provider
IDトークンとは
issuer  が  audience  のために    
subject  を認証したかを⽰示すトークン
Relying Party
IDトークンとは
issuer  が  audience  のために    
subject  を認証したかを⽰示すトークン
End-User
IDトークンとは
Facebook  が  SlideShare  のために    
kura  を認証したかを⽰示すトークン
IDトークンとは
Yahoo!  が  GREE  のために    
kura  を認証したかを⽰示すトークン
IDトークンとは
フォーマット
JSON Web Token
JSONを(URLSafeな)Base64エンコードした
シグネチャ(署名)付きトークン
ヘッダー・ペイロード・シグネチャで構成される
シグネチャはハッシュ(HMAC)と公開鍵暗号
(RSA・ECDSA)
{
“typ”:”JWT”,
“alg”:”RS256”
}
ヘッダー
{
“typ”:”JWT”,
“alg”:”RS256”
}
ヘッダー
タイプ:JSON Web Token
JWTで jot(ジョット) と発音
{
“typ”:”JWT”,
“alg”:”RS256”
}
ヘッダー
シグネチャのアルゴリズム
RSA-SHA256
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
issuer
IDトークンの発行者
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
subject
ユーザー識別子(認証の対象者)
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
audience
Client ID(IDトークンの払い出し先)
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
セッションにひも付けておいた
Nonce値と比較する
値が一致しない場合は処理を中断
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
issue at
発行時のUnixタイムスタンプ
有効期限は発行から10分くらいにするとよいかも
{
“iss”:”https://auth.login.yahoo.co.jp”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
ペイロード
expiration
IDトークンの有効期限
RPで発行するCookieの有効期限の基準にしてもよい
同じ期限にしなくてもよい
{
“typ”:”JWT”,
“alg”:”RS256”
}


{
“iss”:”https://example.com”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
シグネチャ
{
“typ”:”JWT”,
“alg”:”RS256”
}


{
“iss”:”https://example.com”,
“sub”:”123456789”,
“aud”:”abcdefg”,
“nonce”:”xyz”,
“iat”:1291836800,
“exp”:1300819380
}
シグネチャ
Base64エンコード
URL Safeに変換
+ → -
/ → _
= →
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9


eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
シグネチャ
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9


eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
シグネチャ
JSONの「{ 」をBase64エンコードすると
先頭が「eyJ」になる(テンション↑↑)
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
シグネチャ
ヘッダーとペイロードを
. (ピリオド)で連結
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
シグネチャ
秘密鍵でシグネチャを生成
(RSA-SHA256)
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
シグネチャ
生成されたシグネチャを

Base64エンコード(URL Safe)
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9


eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
IDトークン
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
IDトークン
ヘッダーとペイロードを
. (ピリオド)で連結
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
IDトークン
IDトークン完成
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
IDトークンの検証
「ヘッダー + . + ペイロード」を
入力データとする
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.

eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogIm
h0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
IDトークンの検証
入力データとシグネチャを公開鍵で検証する
UserInfo Endpointについて
UserInfo
OpenID Connectではよく利用される氏名や住所、
メールアドレスなどの属性情報を取得しやすいよう
に属性情報(Claim)を定義している
OpenID Connect対応のIdP各社から同じScopeを
指定して同じフォーマットで属性情報を取得できる
定義されている属性
メンバー 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 生年月日
定義されている属性
メンバー scope 説明
zoneinfo profile タイムゾーン
locale profile 国コード
phone_number phone 電話番号
phone_number_verified phone
電話番号の検証済み

の有無
address address 住所
updated_at profile 属性情報更新日時
UserInfoを活用しよう
UserInfoで取得できる属性情報

(⽒氏名・住所・メールアドレスなど)

で新規登録フォームをプリセット  
わずらわしいフォームの⼊入⼒力力を

省省略略できてコンバージョンアップ

(⾦金金融系・コマース系サイトなど)
倉林雅
倉林
雅
まとめ
1. OpenID Connectの特徴
OAuth 2.0ベース・認証・認可・属性取得
2. OpenID Connectの流れ
基本となるAuthorization Code Flow
3. IDトークンについて
JSON Web Token
4. UserInfo Endpointについて
よく利用しそうな属性情報が定義されている
ご清聴ありがとう
ございました。

More Related Content

PDF
なぜOpenID Connectが必要となったのか、その歴史的背景
PDF
OpenID Connect入門
PDF
認証の課題とID連携の実装 〜ハンズオン〜
PDF
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
PDF
Keycloak拡張入門
PPTX
Keycloak入門
PPTX
KeycloakでAPI認可に入門する
PDF
Azure AD B2CにIdPを色々と繋いでみる
なぜOpenID Connectが必要となったのか、その歴史的背景
OpenID Connect入門
認証の課題とID連携の実装 〜ハンズオン〜
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
Keycloak拡張入門
Keycloak入門
KeycloakでAPI認可に入門する
Azure AD B2CにIdPを色々と繋いでみる

What's hot (20)

PPTX
NGINXをBFF (Backend for Frontend)として利用した話
PDF
OpenID ConnectとAndroidアプリのログインサイクル
PDF
俺が考えた最強のID連携デザインパターン
PDF
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
PDF
今なら間に合う分散型IDとEntra Verified ID
PDF
実装して理解するLINE LoginとOpenID Connect入門
PPTX
FIWARE の ID 管理、アクセス制御、API 管理
PDF
KeycloakのDevice Flow、CIBAについて
PDF
Fido認証概要説明
PDF
Keycloakの最近のトピック
PPTX
SPAセキュリティ入門~PHP Conference Japan 2021
PDF
SSIとDIDで何を解決したいのか?(β版)
PPTX
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
PDF
Keycloak & midPoint の紹介
PPTX
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
PDF
テスト文字列に「うんこ」と入れるな
PDF
これからのネイティブアプリにおけるOpenID Connectの活用
PDF
Active Directory 侵害と推奨対策
PDF
FIDO認証によるパスワードレスログイン実装入門
NGINXをBFF (Backend for Frontend)として利用した話
OpenID ConnectとAndroidアプリのログインサイクル
俺が考えた最強のID連携デザインパターン
パスワード氾濫時代のID管理とは? ~最新のOpenIDが目指すユーザー認証の効率的な強化~
今なら間に合う分散型IDとEntra Verified ID
実装して理解するLINE LoginとOpenID Connect入門
FIWARE の ID 管理、アクセス制御、API 管理
KeycloakのDevice Flow、CIBAについて
Fido認証概要説明
Keycloakの最近のトピック
SPAセキュリティ入門~PHP Conference Japan 2021
SSIとDIDで何を解決したいのか?(β版)
KeycloakでFAPIに対応した高セキュリティなAPIを公開する
Keycloak & midPoint の紹介
最近のKeycloakのご紹介 ~クライアントポリシーとFAPI~
テスト文字列に「うんこ」と入れるな
これからのネイティブアプリにおけるOpenID Connectの活用
Active Directory 侵害と推奨対策
FIDO認証によるパスワードレスログイン実装入門
Ad

Viewers also liked (20)

PDF
ID連携概要 - OpenID TechNight vol.13
PDF
今更聞けないOAuth2.0
PPTX
OAuth認証について
PPTX
ID連携のあるとき~、ないとき~ #エンプラ編
PDF
Office365のIdentity管理
PDF
エンタープライズITでのOpenID Connect利用ガイドライン
PDF
Oauth2.0とか(認証と認可)_201403
PDF
OAuth 2.0の概要とセキュリティ
PDF
ハイブリッド時代のID基盤構成の基礎
PDF
Ad(microsoftの方)のOpenId Connect対応
PDF
OpenID ConnectとSCIMの標準化動向
PDF
Oss貢献超入門
PDF
Laravelの認証について
PDF
ITエンジニアのための英語勉強法
PDF
OpenID Connect のビジネスチャンス
PPTX
Beginning Java EE 6 勉強会(6) #bje_study
PDF
Microserviceなんて最初からやるもんじゃ無かった
PDF
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
PDF
WebAPIのこれまでとこれから
PDF
サバフェス 2016 Yahoo! ID連携のご紹介 〜OpenID Connect入門〜
ID連携概要 - OpenID TechNight vol.13
今更聞けないOAuth2.0
OAuth認証について
ID連携のあるとき~、ないとき~ #エンプラ編
Office365のIdentity管理
エンタープライズITでのOpenID Connect利用ガイドライン
Oauth2.0とか(認証と認可)_201403
OAuth 2.0の概要とセキュリティ
ハイブリッド時代のID基盤構成の基礎
Ad(microsoftの方)のOpenId Connect対応
OpenID ConnectとSCIMの標準化動向
Oss貢献超入門
Laravelの認証について
ITエンジニアのための英語勉強法
OpenID Connect のビジネスチャンス
Beginning Java EE 6 勉強会(6) #bje_study
Microserviceなんて最初からやるもんじゃ無かった
OAuth / OpenID Connectを中心とするAPIセキュリティについて #yuzawaws
WebAPIのこれまでとこれから
サバフェス 2016 Yahoo! ID連携のご紹介 〜OpenID Connect入門〜
Ad

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

PDF
Standard-based Identity (1)
PDF
ID & IT 2013 - OpenID Connect Hands-on
PDF
OCHaCafe#5 - 避けては通れない!認証・認可
PDF
091009 Identity Conference #6 ritou
PDF
The Latest Specs of OpenID Connect at #idcon 9
PDF
OpenID_Connect_Spec_Demo
PDF
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
PDF
0905xx Hybrid Memo
PDF
Yahoo! JAPANのOpenID Certified Mark取得について
PDF
OpenID TechNight Vol. 11 - Call to Action
PDF
OpenID Connect - Nat Sakimura at OpenID TechNight #7
PDF
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
PDF
金融向けoへの認証の導入
PDF
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!
PDF
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
PPTX
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
PDF
API提供におけるOAuthの役割 #apijp
PDF
Whats wrong oauth_authn
PDF
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
PDF
YAPC::Tokyo 2013 ritou OpenID Connect
Standard-based Identity (1)
ID & IT 2013 - OpenID Connect Hands-on
OCHaCafe#5 - 避けては通れない!認証・認可
091009 Identity Conference #6 ritou
The Latest Specs of OpenID Connect at #idcon 9
OpenID_Connect_Spec_Demo
PDSを実現するにあたっての技術動向の紹介 (OAuth, OpenID Connect, UMAなど)
0905xx Hybrid Memo
Yahoo! JAPANのOpenID Certified Mark取得について
OpenID TechNight Vol. 11 - Call to Action
OpenID Connect - Nat Sakimura at OpenID TechNight #7
エンタープライズIT環境での OpenID Connect / SCIM の具体的実装方法 idit2014
金融向けoへの認証の導入
[SC07] Azure AD と Ruby で学ぶ OpenID Connect!
安全な"○○でログイン"の作り方 @ NDS in Niigata #1
既存RailsアプリをSSO化して、本番環境で活用した話【WESEEK Tech Conf #12】
API提供におけるOAuthの役割 #apijp
Whats wrong oauth_authn
OAuth / OpenID Connect (OIDC) の最新動向と Authlete のソリューション
YAPC::Tokyo 2013 ritou OpenID Connect

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