Download OpenAPI specification:Download
Trust Idiom® 導入における FAPI-CIBA トークン取得 及び アクセストークン検証のためのAPIドキュメントです。
OpenIDプロバイダーのメタデータを取得する ※詳細はこちらを参照 https://openid.net/specs/openid-connect-discovery-1_0.html
| tenant-id required | string Trust Idiomと連携するサービス(アプリケーション)を提供する事業者毎に割り振られたID。 |
{- "issuer": "string",
- "authorization_endpoint": "string",
- "token_endpoint": "string",
- "userinfo_endpoint": "string",
- "jwks_uri": "string",
- "registration_endpoint": "string",
- "scopes_supported": [
- "string"
], - "response_types_supported": [
- "string"
], - "response_modes_supported": [
- "string"
], - "grant_types_supported": [
- "string"
], - "acr_values_supported": [
- "string"
], - "subject_types_supported": [
- "string"
], - "id_token_signing_alg_values_supported": [
- "string"
], - "id_token_encryption_alg_values_supported": [
- "string"
], - "id_token_encryption_enc_values_supported": [
- "string"
], - "userinfo_signing_alg_values_supported": [
- "string"
], - "userinfo_encryption_alg_values_supported": [
- "string"
], - "userinfo_encryption_enc_values_supported": [
- "string"
], - "request_object_signing_alg_values_supported": [
- "string"
], - "request_object_encryption_alg_values_supported": [
- "string"
], - "request_object_encryption_enc_values_supported": [
- "string"
], - "token_endpoint_auth_methods_supported": [
- "string"
], - "token_endpoint_auth_signing_alg_values_supported": [
- "string"
], - "display_values_supported": [
- "string"
], - "claim_types_supported": [
- "string"
], - "claims_supported": [
- "string"
], - "service_documentation": "string",
- "claims_locales_supported": [
- "string"
], - "ui_locales_supported": [
- "string"
], - "claims_parameter_supported": true,
- "request_parameter_supported": true,
- "request_uri_parameter_supported": true,
- "require_request_uri_registration": true,
- "op_policy_uri": "string",
- "op_tos_uri": "string",
- "authorization_signing_alg_values_supported": [
- "string"
], - "authorization_encryption_alg_values_supported": [
- "string"
], - "authorization_encryption_enc_values_supported": [
- "string"
], - "revocation_endpoint": "string",
- "revocation_endpoint_auth_methods_supported": "string",
- "revocation_endpoint_auth_signing_alg_values_supported": [
- "string"
], - "introspection_endpoint": "string",
- "introspection_endpoint_auth_methods_supported": [
- "string"
], - "introspection_endpoint_auth_signing_alg_values_supported": [
- "string"
], - "code_challenge_methods_supported": [
- "string"
], - "tls_client_certificate_bound_access_tokens": [
- "string"
], - "backchannel_token_delivery_modes_supported": [
- "string"
], - "backchannel_authentication_endpoint": "string",
- "backchannel_authentication_request_signing_alg_values_supported": [
- "string"
], - "backchannel_user_code_parameter_supported": true,
- "require_pushed_authorization_requests": true,
- "authorization_details_supported": true,
- "authorization_data_types_supported": [
- "string"
], - "verified_claims_supported": [
- "string"
], - "dpop_signing_alg_values_supported": [
- "string"
], - "require_signed_request_object": true,
- "authorization_response_iss_parameter_supported": true
}FAPI-CIBA (Financial-grade API: Client Initiated Backchannel Authentication Profile) に準拠したバックチャネル認証エンドポイントです。
TrustIDサービス認可サーバーは、FAPI-CIBAフローにおいてPoll Modeのみを許容しています。
トークン取得までのステップ:
(1) バックチャネル認証リクエスト (/{tenant-id}/v2/backchanel/authentications)
(2) トークンリクエスト (/v2/authorization/token)
(3) トークン取得 (認可後)
(4) トークン取得失敗 (拒否)
したがって、バックチャネル認証リクエストは、FAPI-CIBAを用いたトークン取得の最初のステップとなります。
クライアント認証:
クライアント - TrustIDサービス認可サーバー間の通信にはMutual TLSを利用します。
TrustIDサービス認可サーバーは、Mutual TLSで用いられたクライアント証明書を用いてクライアントを認証します。
JWT (JSON Web Token) について:
JWTは、2者間で情報を安全にやり取りするためのデータ構造標準です。
署名付きJWT (JWS) と暗号化されたJWT (JWE) の2種類がありますが、FAPI-CIBA標準ではJWSが要求されます(以降、特に断りがない限り、JWTはJWSを指します)。
JWTの構造:
BASE64URL(UTF8(JOSE Header)) + "." +
BASE64URL(JWT Claims) + "." +
BASE64URL(Signature)JWT作成の具体的な実装方法については、各言語の関連ライブラリ (参考: https://jwt.io/#libraries-io) を参照してください。
JOSE Header:
JOSE HeaderはJSON形式で、JWTに適用された暗号化オペレーションに関する情報を含みます。
本リクエストでは、以下の情報が必須です。
{
"alg": "利用した署名方式 (例: ES256)"
}
「alg」パラメータには利用した署名方式を指定する必要があります。FAPI-CIBAでは、「ES256」または「PS256」のみが許容されます。
JWT Claims:
JWT Claimsには、相手方に送信したい情報がJSON形式で含まれます。
本リクエストでは、FAPI-CIBAおよびJAR (JWT-Secured Authorization Request) に従い、以下の情報が要求されます。 (参考: https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html#signed_auth_request)
| パラメータ名 | 概要 | 入れるべき値 |
|---|---|---|
| login_hint | TrustIDユーザを識別するヒントとなる値 ※どちらか必須 | 電話番号 |
| lid_token_hint | TrustIDユーザを識別するヒントとなるIDトークン ※どちらか必須 | IDトークン |
| scope | スペース区切りの、本認可フローで求めたい全スコープ(FAPI-CIBA標準により、「openid」は必須) |
OpenID Connect定義のスコープ。Trust Idiomでは「email」「phone」スコープの要求をすることができます。 (参考:https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims) |
| binding_message | TrustIDユーザがTrustIDアプリで認証する際に、どこから認証/認可を要求されているか確認するための文字列。テナント側アプリおよびTrustIDアプリで表示して一致検証に利用する。 | 任意の文字列(ユーザが判別しやすいものが良い)e.g. 604921 |
| user_code | ユーザーのみに知られている、認可サーバー側で検証可能な秘密コード(パスワード、PIN番号を含む) | パスワード |
| aud | Issuer Identifier(トークン発行者) | 開発:https://api.stg.trustid.sbi-fc.com/trustid-core/{tenant-id}本番:https://api.trustid.sbi-fc.com/trustid-core/{tenant-id} |
| exp | 有効期限終了時刻 | 発行時刻+60分 |
| iat | 発行時刻 | 発行時刻 |
| iss | OAuth Client(トークン利用者) | client_id |
| jti | JWTトークン識別子 | UUID含む任意のJWTトークン識別子 |
| nbf | 有効期限開始時刻 | 発行時刻と同じ |
| authorization_details | OAuth 2.0 Rich Authorization Requests(RAR)に基づく、認可リクエストの詳細情報 | ``` [ { "type": "transaction", "api_path": "/xxx/v1/transfer/sendMoney", "validations": { "fido_confirm_form":true, "introspection_check":true }, “oneshot_token”: true, "contents": { "receiverBankCode": "振込先・金融機関コード", "receiverBranchCode": "振込先・支店コード", "receiverAccountType": "振込先・預金種目コード", "receiverAccountNumber": "振込先・口座番号", "transferAmount": "取引金額" } } ] ``` |
トランザクション認証:
authorization_details でトランザクション認証を指定する場合、各項目の内容は以下のとおりです。
トークン検証(Introspection)のレスポンススキーマ説明も合わせて参照してください。
| パラメータ名 | 値 | 説明 |
|---|---|---|
| type | transaction(固定) | リソースの種類としてトランザクション認証を指定 |
| api_path | /xxx/v1/transfer/sendMoney | トランザクション認証対象のAPI |
| validations | ||
| fido_confirm_form | true:必要、false:不要 | トランザクション用のFIDO認証画面の要否 |
| introspection_check | true:必要、false:不要 | Introspection時にContentsの照合の要否 |
| oneshot_token | true:必要、false:不要 | 利用回数が1回限りのアクセストークン |
| contents | ``` { "receiverBankCode": "振込先・金融機関コード", "receiverBranchCode": "振込先・支店コード", "receiverAccountType": "振込先・預金種目コード", "receiverAccountNumber": "振込先・口座番号", "transferAmount": "取引金額" } ``` | api_pathで指定したAPI実行時のリクエストパラメータと照合したいパラメータを列挙する。fido_confirm_formがtrueの場合は必須となる。 ※200文字以内の制限あり(FIDO UAF仕様) |
Signature:
JWT Claimsに記載した情報のintegrityを確保するために必要な署名です。
JWT標準では、以下のように署名することが求められます。
ECDSA(
SHA-256(
BASE64URL(UTF8(Jose Header)) + "." +
BASE64URL(JWT Claims)
)
)*上記は、署名方式がES256であった場合です。署名の際にはPrivate Keyを使用する必要があることに注意してください。
| tenant-id required | string Trust Idiomと連携するサービス(アプリケーション)を提供する事業者毎に割り振られたID。 |
| request required | string リクエストオブジェクト。FAPI-CIBA標準で求められる、JWT形式(JWS Compact Serialization)で、バックチャネル認証リクエスト情報および署名情報を含めたもの。 |
| client_id required | string クライアントの識別子 |
{- "auth_req_id": "gwHSu6EOjpsYtH3pKgUdQzMIjkql6KYpCAsUFZR9Gl0",
- "interval": 10,
- "expires_in": 600
}認可されたユーザの情報を取得するためのエンドポイントです。
概要:
このエンドポイントは、有効なアクセストークンを提示したクライアントに対して、そのトークンに関連付けられたユーザの情報を返却します。取得できるユーザ情報の種類は、アクセストークンに付与されたスコープによって異なります。
Mutual TLS (mTLS) の要件:
クライアント - TrustIDサービス認可サーバー間の通信にはMutual TLS (mTLS) の使用を推奨します。
TrustIDサービス認可サーバーは、mTLSで用いられたクライアント証明書を確認することで、提示されたアクセストークンが正当なクライアントに発行されたものであることを検証し、より安全な情報提供を実現します。
情報取得の仕組み:
取得できるユーザ情報 (スコープに依存):
openid スコープ: ユーザのサブジェクト識別子(通常は必須で返却されます)。email スコープ: ユーザのメールアドレス。phone スコープ: ユーザの電話番号。リクエストの要件:
レスポンス:
成功した場合、ステータスコード 200 (OK) とともに、要求されたユーザ情報を含むJSONレスポンスボディが返却されます。
失敗した場合(例:無効なアクセストークン、クライアント認証の失敗)、適切なエラーレスポンスとステータスコードが返却されます。
| tenant-id required | string Trust Idiomと連携するサービス(アプリケーション)を提供する事業者毎に割り振られたID。 |
| Authorization required | string トークンリクエストで取得したアクセストークン |
{- "sub": "79fe520f682dab03c481133ec24b1f0fe309cf264932fc0d722c1fb21207d77e",
- "authentication_device": [
- {
- "client_device_id": "0c275897-158f-4c2c-bef0-60fa38df7ebe",
- "constrained": true
}
], - "email": "xxx.xxx@sbisecsol.com",
- "email_verified": false,
- "phone_number": "+8100000000",
- "phone_number_verified": true
}認可されたユーザの情報を取得するためのエンドポイントです。
概要:
このエンドポイントは、有効なアクセストークンを提示したクライアントに対して、そのトークンに関連付けられたユーザの情報を返却します。取得できるユーザ情報の種類は、アクセストークンに付与されたスコープによって異なります。
Mutual TLS (mTLS) の要件:
クライアント - TrustIDサービス認可サーバー間の通信にはMutual TLS (mTLS) の使用を推奨します。
TrustIDサービス認可サーバーは、mTLSで用いられたクライアント証明書を確認することで、提示されたアクセストークンが正当なクライアントに発行されたものであることを検証し、より安全な情報提供を実現します。
情報取得の仕組み:
取得できるユーザ情報 (スコープに依存):
openid スコープ: ユーザのサブジェクト識別子(通常は必須で返却されます)。email スコープ: ユーザのメールアドレス。phone スコープ: ユーザの電話番号。リクエストの要件:
レスポンス:
成功した場合、ステータスコード 200 (OK) とともに、要求されたユーザ情報を含むJSONレスポンスボディが返却されます。
失敗した場合(例:無効なアクセストークン、クライアント認証の失敗)、適切なエラーレスポンスとステータスコードが返却されます。
| tenant-id required | string Trust Idiomと連携するサービス(アプリケーション)を提供する事業者毎に割り振られたID。 |
| Authorization required | string トークンリクエストで取得したアクセストークン |
{- "sub": "79fe520f682dab03c481133ec24b1f0fe309cf264932fc0d722c1fb21207d77e",
- "authentication_device": [
- {
- "client_device_id": "0c275897-158f-4c2c-bef0-60fa38df7ebe",
- "constrained": true
}
], - "email": "xxx.xxx@sbisecsol.com",
- "email_verified": false,
- "phone_number": "+8100000000",
- "phone_number_verified": true
}JSON Web Key Set (JWKS) を取得するためのエンドポイントです。
概要:
このエンドポイントは、TrustIDサービス認可サーバーが発行するJWT (JSON Web Token) の署名検証に使用する公開鍵を含むJWKセットをJSON形式で提供します。クライアントやリソースサーバーは、このJWKセットを取得することで、TrustIDサービス認可サーバーによって署名されたJWTの正当性を検証できます。
JWKセット (JSON Web Key Set) について:
JWKセットは、複数のJSON Web Key (JWK) を含むJSONオブジェクトです。各JWKは、公開鍵とそれに関連するメタデータ(鍵のタイプ、用途、鍵IDなど)を表します。
利用の目的:
取得方法:
このエンドポイントに対してHTTP GETリクエストを送信することで、JWKセットをJSON形式で取得できます。リクエストに認証は不要な場合が多いですが、セキュリティ上の理由からアクセス制御が行われる場合もあります。
レスポンス:
成功した場合、ステータスコード 200 (OK) とともに、JWKセットを含むJSONレスポンスボディが返却されます。レスポンスボディは、keys という名前のJSON配列を含み、各要素がJWKオブジェクトを表します。
詳細な仕様:
JWKおよびJWKセットの詳細な仕様については、RFC 7517 (https://tools.ietf.org/html/rfc7517) を参照してください。ご指摘の RFC 7519 は JWT (JSON Web Token) の仕様です。
TrustIDサービスにおける注意点:
TrustIDサービス認可サーバーがローテーションを行う場合、このエンドポイントから取得できるJWKセットは定期的に更新されます。JWTの検証を行うクライアントやリソースサーバーは、必要に応じてこのエンドポイントを呼び出し、最新のJWKセットを取得する必要があります。
| tenant-id required | string Trust Idiomと連携するサービス(アプリケーション)を提供する事業者毎に割り振られたID。 |
{- "keys": [
- {
- "e": "AQAB",
- "n": "kVXi0XB8LGYZfFPXymaszWjBQsO22tasQH3PEiPeLSymBHbp7PtqM8O8xblqhbxV-24lKNs2zDugQaBiVt4zpalyYxL5kqnfY247priZRfmeUatdECh81T-i3VcLpz_M5yfljfVp3sFdaURUQNA3ow9VtUfvPIxN_9YIxXN1zP2nLP5amC2XA8xMt5iubRwbbPbrLyg69zTOzosDVhRTSs5adHK5HNwVn8wCCZPbU7u1cQD8hFNn8xlQcmOmJjSXUQ9slBpLc7G-dUEOI59RxiPd4R44GtSe8gA1WFXvOAdtGjivSm8BAbxuNO8HFtDJmpVl9YsDr9FsxirFl9ZPKs",
- "kty": "RSA",
- "use": "sig",
- "kid": "rsa-sig-001"
}, - {
- "e": "AQAB",
- "n": "lQui3_DlrkLs_dyaOQBOclphIIRTTMo0gNlnAgfEM9xjbYQJQzi0CLtO6eseecE3HtvDBWVTw-rMM_NMJTlPTO0_ODWvmJRjXy9DZGEm05LFd_qr6jZ7cdOvjD7zUC3GI9TIokPbjGzueBPJjtAvv_tAazRFCQQfiFy7sQR3u-J4tM8fNo9szo9H09R_eA29llZ3hU39JDKs9nzG60I1mVZtJYPx0_bnO8eYeVDHqoj4SZ4jeru3iX9iDeccH_cDm3M87UomUh-Ri4LlAxXgewDvOaPxAef9ADkDvBVmRo5t60_PJxQ3Tug2EKK-xF1_T7I4TxgS7ga8entMmCxLca",
- "kty": "RSA",
- "use": "enc",
- "kid": "rsa-enc-001"
}, - {
- "crv": "P-256",
- "kty": "EC",
- "use": "sig",
- "y": "824At71mYpbGK2oOCKAL1Z2scLPrbVwhM882v3a9gBq",
- "x": "ZXE3h9BxCyyb_Z9ZJ5qH4Vx650y09qwI1EpZO4o4OmL",
- "kid": "ec256-sig-001"
}, - {
- "crv": "P-256",
- "kty": "EC",
- "use": "enc",
- "y": "j80Y3leZHHnxC_gN-Ols_l_VfEBQkfGDFFDG5LNJKMl",
- "x": "xAdEkaExYWGGAC1xYjwxzvqcaCyDloylZk04yiE9_OF",
- "kid": "ec256-enc-001"
}
]
}[Required scope : trustid_account_profile_read]
Push通知に必要なトークンを登録・更新するためのエンドポイントです。
| x-tenant-id required | string テナントID |
| Authorization required | string Bearerトークン |
| notification_token required | string <= 300 characters 通知用のトークン(FCMトークン) |
{- "notification_token": "string"
}{- "error": "invalid_request",
- "error_description": "[結果コード]及び説明文章"
}[Required scope : trustid_account_profile_write]
Eメール認証の送信エンドポイントです。
| x-tenant-id required | string テナントID |
| x-client-id | string クライアントID |
| mail_address required | string <= 255 characters メールアドレス |
{- "mail_address": "string"
}{- "error": "invalid_request",
- "error_description": "[結果コード]及び説明文章"
}[Required scope : trustid_account_profile_write]
Eメール送信コードの検証と登録・更新エンドポイントです。
| x-tenant-id required | string テナントID |
| x-client-id | string クライアントID |
| mail_address required | string <= 255 characters メールアドレス |
| email_authentication_code required | string 6 characters Email認証コード |
{- "mail_address": "string",
- "email_authentication_code": "string"
}{- "error": "invalid_request",
- "error_description": "[結果コード]及び説明文章"
}