2025/12/26
SAP CIAM機能
スマートTVやIoT機器の認証をセキュアに実現。SAP CIAMで実装するOIDCデバイスフロー
昨今、スマートTVやIoT機器などWebブラウザを搭載していない、または文字入力が困難なデバイスが普及しています。これらのデバイスでユーザ認証を実施する際、独自の認証方法での実装や、入力しにくいリモコンでの文字入力をユーザに強いることは、セキュリティリスクやUX(ユーザ体験)の低下を招きかねません。
そこで解決策となるのが、OIDC Deviceフロー(OAuth 2.0 Device Authorization Grant / RFC 8628)です。
標準的な認可プロトコルであるOAuth 2.0を利用することで、独自実装に伴う脆弱性を排除したセキュアなログイン、かつストレスフリーなユーザ体験を提供することが可能です。
また、SAP CIAMでOIDC Deviceフローを実装することで、デバイスとサーバ間の複雑な同期処理や、認証処理などは全てSAP CIAMが担うことが可能となります。
本記事では、具体的な利用シーンに加え、SAP CIAMをOpenID Provider(以下OP)として利用し、Relying Party (以下RP) となるデバイス側でどのような実装が必要となるかを解説します。
- スマートTVやIoT機器、CLIツールなど、入力インターフェースが限られたデバイスでのセキュアな認証手法(OIDCデバイスフロー)の仕組みが分かる。
- SAP CIAMを認証基盤(OP)として利用する場合の具体的な連携フローが分かる。
- デバイス側(RP)の認可リクエストからポーリングによるトークン取得までの実装手順が分かる。
概要
OIDC Deviceフロー(OAuth 2.0 Device Authorization Grant / RFC 8628)は、Webブラウザを搭載していない、もしくは入力インターフェースが制限されたデバイス向けに策定された認証・認可の標準仕様です。
通常のWeb認証(Authorization Code Flowなど)では、アプリケーションと同一のデバイス上でブラウザを起動し認証を行いますが、ブラウザを持たないデバイスではこの方法がとれません。
OIDC Deviceフローの最大の特徴は、「デバイス」と「認証を行う端末(スマートフォンやPC)」を物理的に分離する点にあります。
- デバイス:検証用URLと認証コードを表示し、待機状態(ポーリング)に入る。
- 認証を行う端末(スマートフォンやPC):表示されたURLへアクセスし、ログイン、コード入力と認証を行う。
この仕組みにより、テレビのリモコンでID/パスワードを入力させるといったUX上の課題を解決しつつ、デバイス内部にパスワード等の機密情報を保存させない、セキュアなトークンベースの認証を実現しています。
具体的な利用シーン
主な適用デバイス
・スマート家電、IoT機器
スマートTVやゲーム機など、リモコン操作でID/パスワードを入力するのが困難なデバイス。
・CLI(コマンドライン)ツール:
開発者向けツールなど、GUIを持たない環境で実行されるアプリケーション。
・公共端末(キオスク端末):
セキュリティ上の理由でキーボード入力を制限したい専用端末。
具体例:スマートTVでの動画配信サービスへのログイン
より具体的にイメージできるよう、スマートTVでのログインを例にユーザフローを説明します。
1.ログインの開始【スマートTV側】
ユーザはスマートTVで動画配信アプリを起動し、「ログイン」ボタンを押下します。リモコンでメールアドレスやパスワードを一文字ずつ入力する画面は表示されません。
2.認証コードの提示【スマートTV側】
代わりに、テレビ画面には以下のような案内が表示されます。
※現在ではURL入力の手間を省くため、QRコードを表示させるのが一般的です。
3.手元のデバイスで認証【スマートフォン側】
ユーザは手元のスマートフォンでブラウザを起動し(もしくはQRコードを読み取り)、表示されたURLにアクセスします。 動画配信アプリ側が提供するログイン画面が表示され、ID/パスワードを使用してログインします。
ログイン後、コードの入力画面が表示されるため、スマートTV側で表示されたコードを入力します。
スマートフォン側で「ログインに成功しました」と表示されます。
4.デバイス連携の完了(自動同期)【スマートTV側】
スマートTVを確認すると画面が自動的に切り替わり、ログイン後のページが表示されています。
認証・認可フロー詳細
OIDC Deviceフローは、「デバイス」と「認証を行う端末(スマートフォンやPC)」の2つの並行したアクションで構成されます。
- デバイス(RP)はSAP CIAM(OP) に「Device Authorization Endpoint」をリクエストする。
- SAP CIAM(OP)はデバイス(RP)に「認証コード(user_code)」「検証用URL(verification_uri)」「デバイストークン(device_code)」をレスポンスする。
- デバイス(RP)はユーザに検証用URLと認証コードを表示する。
- デバイス(RP)はデバイストークンを使用してSAP CIAM(OP) に「Token Endpoint」をリスエストする(ポーリング)。
- ユーザは認証を行う端末で検証用URLにアクセスし、ログイン、認証コード入力を行う。
- SAP CIAM(OP)はユーザの認証完了を検知し、デバイス(RP)にトークン(Access Token、ID Token)をレスポンスする。
実装例
デバイス側(RP)で実装が必要な「認可リクエスト」から「トークン取得(ポーリング)」までの処理フローを、コードを交えて解説します。
事前準備
SAP CIAM管理画面においてOP側の設定が必要となります。
OP側の設定完了後、SAP CIAM管理画面から下記を取得しておきます。
- Client ID
- Device Authorization Endpoint
- Token Endpoint
デバイス側(RP)の実装
STEP1: 認証の開始
デバイスからSAP CIAM へ「Device Authorization Endpoint」をリクエストし、ユーザに表示するための認証コードと検証用URLを取得します。
リクエストに成功するとSAP CIAMから認証コードと検証用URLを含むJSONレスポンスが返却されます。
・リクエスト(cURL例)
curl -X POST "[取得したDevice Authorization Endpoint]" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "client_id=[取得したClient ID]" \
-d "scope=openid profile email"
・レスポンス(成功時)
{
"device_code": " st2.op.AtLtucak2w.U8H0qSkFe42FLFT...",
"user_code": "YTIZCMYS",
"verification_uri": "[SAP CIAM管理画面で設定した検証用URL]",
"verification_uri_complete": "[SAP CIAM管理画面で設定した検証用URL]?user_code=YTIZCMYS",
"expires_in": 300,
"interval": 5
}
STEP2: トークンの取得とポーリング
デバイスは取得した「device_code」を使用し、ユーザ認証が完了するまでSAP CIAM へ「Token Endpoint」をリクエストし、定期的に問い合わせ(ポーリング)を行います。
ユーザの認証が完了するとSAP CIAMからIDトークンとアクセストークンを含むJSONレスポンスが返却されるため、ポーリングを終了します。
※実際のシステムでは、IDトークンの署名を検証し、アクセストークンを利用してユーザ情報の取得等を行います。
・リクエスト(cURL例)
curl -X POST "[取得したToken Endpoint] \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=urn:ietf:params:oauth:grant-type:device_code" \
-d "client_id=[取得したClient ID]" \
-d "device_code=st2.op.AtLtucak2w.U8H0qSkFe42FLFT..."
・レスポンス(ユーザー認証待ち)
{
"error": "authorization_pending",
"error_description": "Authorization is pending for the device."
}
・レスポンス(成功時)
{
"access_token": "eyJhbGciOiJSUzI1NiIsImtp...",
"token_type": "Bearer",
"expires_in": 3600,
"refresh_token": "eyJhbGciOiJ...",
"id_token": "eyJhbGciOiJ..."
}
認証基盤側(OP)の実装
STEP1: ログイン画面、認証コード入力画面の表示
ユーザが検証用URLにアクセスした際、SAP CIAM Screen-Set(※)を利用してログイン画面、認証コード入力画面を表示します。
※SAP CIAMの標準入力フォーム群。SAP CIAM管理者画面で作成・編集が可能。
例)ログイン画面の表示
gigya.accounts.showScreenSet({
screenSet: "xxx-RegistrationLogin", //表示するScreen-Setを指定
startScreen: "gigya-login-screen", //表示する画面(Screen)を指定
lang: "en", //表示言語
containerID: "ScreenSets" //表示位置
});
ログイン画面サンプル
例)認証コード入力画面の表示
gigya.accounts.showScreenSet({
screenSet: "xxx-RegistrationLogin", //表示するScreen-Setを指定
startScreen: "device-code-verification", //表示する画面(Screen)を指定
lang: "en", //表示言語
containerID: "ScreenSets" //表示位置
});
認証コード入力画面サンプル
STEP2: 完了画面の表示
ユーザによるログイン・認証コード入力が完了したら、完了画面を表示し、デバイス側への誘導メッセージを表示します。
おわりに
本記事では、SAP CIAMで実現するOIDC Deviceフローについて、仕組みから実装例までご紹介しました。
SAP CIAMでOIDC Deviceフローを実装することで認証コードの生成・検証やデバイスコードとの紐付け、そしてポーリングによる検証ロジックといった複雑な処理をすべてSAP CIAM側の機能でカバーすることが可能です。また、OIDC Deviceフローで必須となるスマートフォン側の「ログイン画面」や「認証コード入力画面」を一から作成する必要はなく、開発者はデバイス側のAPI呼び出しのみに注力できます。
昨今、企業のサービス提供チャネルはWebサービスやモバイルアプリにとどまらず、スマート家電、店舗のキオスク端末、あるいは開発者向けのCLIツールへと急速に拡大しています。これら「入力インターフェースを持たないデバイス」においても、Webサービスと同等の「ユーザごとのセキュアな認証」が求められるようになっています。
SAP CIAMでOIDC Deviceフローを実装することで、開発コストを抑えながら「セキュリティの向上」「ユーザ体験(UX)の改善」「ユーザの統合管理」を同時に実現できます。
セキュアなデバイス認証にご興味がある方は、弊社までお問い合わせください。
【
SAP CIAM機能
】
最新のコラム

2025/11/04

2025/11/04

2025/08/18


