泚èš: 2021 幎 3 æã«å ¬éããã FAPI 1.0 æçµçã«å¯Ÿå¿ãããããæ¬èšäºã®å 容ãå€§å¹ ã«æŽæ°ããŸãããã¿ã€ãã«ããäžçæå 端㮠API ã»ãã¥ãªãã£ãŒæè¡ãå®è£ è ã«ãããFAPIïŒFinancial-grade APIïŒã解説ããããå®è£ è ã«ãã Financial-grade API (FAPI) 解説ãã«å€æŽããŸãããæ¬èšäºã®è±èªç㯠"Financial-grade API (FAPI), explained by an implementer" ã§ãã
ã¯ããã«
Financial-grade APIïŒéç§° FAPI; ãã¡ãïŒã¯ãOpenID Foundation ã® **Financial-grade API ã¯ãŒãã³ã°ã°ã«ãŒã**ãçå®ããæè¡ä»æ§ã§ããOAuth 2.0 ãš OpenID ConnectïŒä»¥é OIDCïŒãåºç€ãšããããé«ã API ã»ãã¥ãªãã£ãŒãå¿ èŠãšããéèæ¥çããã³ä»ã®æ§ã ãªæ¥çã®ããã远å ã®æè¡èŠæ±äºé ãå®ããŠããŸãã
æŽå²
Implementer's Draft 1ïŒå®è£ è åãè皿第äžçïŒ
FAPI 仿§ã®æåã®ããŒãžã§ã³ã¯ 2017 幎ã«å ¬éãããŸããããã®ããŒãžã§ã³ã¯ Implementer's Draft 1ïŒID1ïŒãšåŒã°ããŠããŸãã
Implementer's Draft 2ïŒå®è£ è åãè皿第äºçïŒ
äºçªç®ã®ããŒãžã§ã³ã¯ 2018 幎 10 æã«å ¬éãããŸããããã®ããŒãžã§ã³ã¯ Implementer's Draft 2ïŒID2ïŒãšåŒã°ããŠããŸãã倿§ãªæ¥çã§ã®æ¡çšãä¿ãããããã®ããŒãžã§ã³ã§ä»æ§ã®åç§°ããFinancial APIããããFinancial-grade APIããžãšå€æŽãããŸããã
FinalïŒæçµçïŒ
æçµç㯠2021 幎 3 æã«å ¬éãããŸããããã®ããŒãžã§ã³ã§ãFAPI 仿§ã®äžå¿ãšãªãäºã€ã®ããŒãã§ãããPart 1: Read-Only Security ProfileããšãPart 2: Read and Write API Security ProfileããããããããPart 1: Baseline Security ProfileããšãPart 2: Advanced Security Profileãã«åç§°å€æŽãããŸããã
FAPI 2.0
FAPI ã¯ãŒãã³ã°ã°ã«ãŒãã¯ãFAPI 仿§ã®æ¬¡ã®ããŒãžã§ã³ã§ãã FAPI 2.0 ã®è°è«ãéå§ããŠããŸãã2021 幎 3 æ 31 ã«å ¬éããã FAPI FAQ 㯠FAPI 2.0 ã«èšåããŠããŸããFAPI 2.0 ãæ§æããæ°ããæè¡èŠçŽ ã§ãã PARïŒOAuth 2.0 Pushed Authorization RequestsïŒã RARïŒOAuth 2.0 Rich Authorization RequestsïŒãDPoPïŒOAuth 2.0 Demonstrating Proof-of-Possession at the Application LayerïŒãªã©ã Authlete ãæ¢ã«å®è£ ããŠããããã"Are there FAPI 2.0 implementations?" ãšãã質åã«å¯Ÿããåçã®äžã§ Authlete ãèšåãããŠããŸãã
仿§
FAPI 仿§ã®äžå¿ãšãªãã®ã¯ Part 1 ãš Part 2 ã§ãã以åã®ããŒãžã§ã³ããã³æçµããŒãžã§ã³ã¯äžèšã®ãªã³ã¯ããåç §ã§ããŸãã
Implementer's Draft 1ïŒPart 1: 2017 幎 2 æ 2 æ¥ / Part 2: 2017 幎 7 æ 17 æ¥ïŒ
- Financial Services â Financial API â Part 1: Read Only API Security Profile
- Financial Services â Financial API â Part 2: Read and Write API Security Profile
Implementer's Draft 2ïŒ2018 幎 10 æ 17 æ¥ïŒ
- Financial-grade API â Part 1: Read-Only API Security Profile
- Financial-grade API â Part 2: Read and Write API Security Profile
- ID1 ãš ID2 ã®å·®åæ å ±
FinalïŒ2021 幎 3 æ 12 æ¥ïŒ
- Financial-grade API Security Profile 1.0 â Part 1: Baseline
- Financial-grade API Security Profile 1.0 â Part 2: Advanced
- ID2 ãšæçµçã®å·®åæ å ±
å ããŠã2019 幎 8 æã«ã¯ FAPI-CIBA ãããã¡ã€ã«ãšåŒã°ããæè¡ä»æ§ãå ¬éãããŸããããã®ä»æ§ã¯ãFAPI ãš CIBAïŒClient Initiated Backchannel AuthenticationïŒãåæã«äœ¿ãéã«é©çšãã远å èŠä»¶ãå®ããŠããŸãã
CIBA ããã³ FAPI-CIBA ãããã¡ã€ã«ã«ã€ããŠã¯æ¬¡ã®èšäºããåç §ãã ããã
èªå®ããã°ã©ã
FAPI OpenID Provider èªå®ããã°ã©ã
FAPI OpenID Provider èªå®ããã°ã©ã 㯠2019 幎 4 æ 1 æ¥ã«éå§ããŸããïŒã¢ããŠã³ã¹ïŒãéå§æ¥ã«èªå®ãåãããã³ããŒã¯ 2 瀟ã§ããã®äžã€ãæ¬èšäºå·çè ïŒç§ïŒã嵿¥ãã **Authlete 瀟**ã§ãã
![]() |
|---|
| 2019 幎 4 æ 1 æ¥æç¹ã®èªå® FAPI OpenID Provider |
åœæãã 2 幎ãçµéããä»ã§ã¯ 30 以äžã®è£œåãäºæ¥è ã FAPI OpenID Provider ã«èªå®ãããŠããŸãã
çŸæç¹ïŒ2021 幎 4 æïŒã§ã¯ FAPI 1.0 æçµçã®èªå®ããã°ã©ã ã¯å§ãŸã£ãŠããŸããããAuthlete 2.2 ã¯æ¢ã« FAPI æçµçããµããŒãããŠããŸãã詳现㯠2021 幎 2 æ 4 æ¥ã«å ¬è¡šãããç¥ãããšãªãªãŒã¹ããŒãããåç §ãã ããã
FAPI-CIBA OpenID Provider èªå®ããã°ã©ã
FAPI-CIBA OpenID Provider èªå®ããã°ã©ã 㯠2019 幎 9 æ 16 æ¥ã«éå§ããŸããïŒã¢ããŠã³ã¹ïŒãéå§æ¥ã«èªå®ãåããã®ã¯ Authlete ã®ã¿ã§ããã
![]() |
|---|
| 2019 幎 9 æ 16 æ¥æç¹ã®èªå® FAPI-CIBA OpenID Provider |
çŸæç¹ïŒ2021 幎 4 æïŒã§ã¯ãAuthlete 瀟ãå«ã 3 ã€ã®è£œåã FAPI-CIBA OpenID Provider ã«èªå®ãããŠããŸãã
åæç¥è
åºæ¬ä»æ§çŸ€
FAPI ã®ä»æ§æžã¯èŠæ±äºé ãç°¡æœã«åæãã圢åŒãšãªã£ãŠãããæéã¯ããã»ã©å€ããããŸããããã®ä»£ãããããããèªãããã«ã¯ããªãã®åæç¥èãèŠæ±ãããŸããç¹ã«ãOAuth 2.0 ã®äžå¿ãšãªã RFC 6749 ãš RFC 6750ãããã³ OIDC ã®äžå¿ãšãªã OpenID Connect Core 1.0ïŒä»¥é OIDC CoreïŒã«ã€ããŠã¯ãã»ãŒé ã«å ¥ã£ãŠããå¿ èŠããããŸãã
ãŸããOIDC Core ãçè§£ããããã®åæç¥èãšãªã JWT é¢é£ä»æ§çŸ€ïŒJWSãJWEãJWKãJWAãJWTïŒã¯ãåœç¶ FAPI ã®ä»æ§æžãèªãéã«ãåæç¥èãšãªãã®ã§ãå®å šã«çè§£ããŠããªããã°ãªããŸããã
![]() |
|---|
| JWS Compact Serialization |
å ããŠã2015 幎ã«çå®ããã PKCEïŒRFC 7636ïŒã¯ãçŸåšã§ã¯ RFC 6749 ãš RFC 6750 ã«äžŠã¶ OAuth 2.0 ã®åºæ¬ä»æ§æ±ããããŠããŸãã
以äžã«ãFAPI 仿§æžãèªãã«å ç«ã£ãŠæäœéäžåºŠã¯ç®ãéããŠããã¹ã仿§æžãåæããŠãããŸãã
- RFC 6749 - The OAuth 2.0 Authorization Framework
- RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage
- RFC 7515 - JSON Web Signature (JWS)
- RFC 7516 - JSON Web Encryption (JWE)
- RFC 7517 - JSON Web Key (JWK)
- RFC 7518 - JSON Web Algorithms (JWA)
- RFC 7519 - JSON Web Token (JWT)
- RFC 7523 - JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
- RFC 7636 - Proof Key for Code Exchange by OAuth Public Clients
- OpenID Connect Core 1.0
- OpenID Connect Discovery 1.0
- OpenID Connect Dynamic Client Registration 1.0
- OAuth 2.0 Multiple Response Type Encoding Practices
- OAuth 2.0 Form Post Response Mode
ãããã®ä»æ§æžãèªãã«ããããæ¬¡ã®è§£èª¬èšäºçŸ€ãåèã«ãªããšæããŸãã
- OAuth 2.0
- OpenID Connect
- JWS, JWE, JWT
- PKCEïŒRFC 7636ïŒ
- ãã®ä»
Mutual TLS
äžè¬çã«ã¯ãMutual TLS ãšãããšãåã«ãTLS éä¿¡æã«ã¯ã©ã€ã¢ã³ãåŽãèšŒææžãæç€ºãããããšãæå³ããŸããããããFAPI ã®æèã§ã¯ãMutual TLS ã¯ãRFC 8705 OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access TokensãïŒä»¥é MTLSïŒãšãã仿§æžã§å®çŸ©ãããŠããæ¬¡ã®äºã€ããããŸãã
- ã¯ã©ã€ã¢ã³ãèšŒææžã«ãã OAuth ã¯ã©ã€ã¢ã³ãèªèšŒ
- ã¯ã©ã€ã¢ã³ãèšŒææžã«çŽä»ãããŒã¯ã³ã«é¢ããåŠç
ã¯ã©ã€ã¢ã³ãèšŒææžã«ãã OAuth ã¯ã©ã€ã¢ã³ãèªèšŒ
Confidential ã¯ã©ã€ã¢ã³ãïŒRFC 6749, 2. Client TypesïŒã¯ãããŒã¯ã³ãšã³ããã€ã³ãïŒRFC 6749, 3.2. Token EndpointïŒã«ã¢ã¯ã»ã¹ããéãã¯ã©ã€ã¢ã³ãèªèšŒïŒRFC 6749, 2.3. Client AuthenticationïŒããããªããªããã°ãªããŸãããã¯ã©ã€ã¢ã³ãèªèšŒãšã¯ãåœè©²ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãèªèº«ã®ç§å¯ã®èªèšŒæ å ±ãæã£ãŠããããšã蚌æããåŠçã§ãã
ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒã¯å¹Ÿã€ãååšããOIDC Core ã®ã9. Client Authenticationãã«ã¯æ¬¡ã®ãã®ãæããããŠããŸãïŒnone ãé€ããŸãïŒã
| æ¹åŒå | å®çŸ©å Žæ | 説æ |
|---|---|---|
client_secret_basic |
RFC 6749 | ã¯ã©ã€ã¢ã³ã ID ãšã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããçšãã Basic èªèšŒ |
client_secret_post |
RFC 6749 | ã¯ã©ã€ã¢ã³ã ID ãšã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããããªã¯ãšã¹ãæ¬æã«åã蟌ã |
client_secret_jwt |
RFC 7523 | ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããéµãšãã察称éµç³»ã¢ã«ãŽãªãºã ã§çœ²åãã JWT ãæž¡ã |
private_key_jwt |
RFC 7523 | é察称éµç³»ã¢ã«ãŽãªãºã ã®ç§å¯éµã§çœ²åãã JWT ãæž¡ã |
client_secret_basic ãš client_secret_post ã§ã¯ãç§å¯ã®èªèšŒæ
å ±ã§ããã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã®å€ãçŽæ¥ãµãŒããŒã«æç€ºããããšã§ãç§å¯ã®èªèšŒæ
å ±ãæã£ãŠããããšã瀺ãããã£ãŠã¯ã©ã€ã¢ã³ãèªèšŒãšããŸãã
![]() |
|---|
client_secret_basic |
![]() |
|---|
client_secret_post |
client_secret_jwt ã§ã¯ãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã§ JWT ã«çœ²åãããŠããããµãŒããŒã«æç€ºããããšã§ãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããæã£ãŠããããšã鿥çã«èšŒæããŸããäžæ¹ private_key_jwt ã§ã¯ã眲åã¯ã¯ã©ã€ã¢ã³ããä¿æããé察称éµã¢ã«ãŽãªãºã ã®ç§å¯éµã§ãããªããããµãŒããŒã¯åœè©²ç§å¯éµã«å¯Ÿå¿ããå
¬ééµã§ãã®çœ²åãæ€èšŒããŸãã
![]() |
|---|
| JWT ãçšããã¯ã©ã€ã¢ã³ãèªèšŒ |
RFC 8705 ã®ã2. Mutual TLS for OAuth Client Authenticationãã¯ãäžèšãšã¯å¥ã«ãæ°ãã«æ¬¡ã®äºã€ã®ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒãå®çŸ©ããŸãã
| æ¹åŒå | 説æ |
|---|---|
tls_client_auth |
TLS éä¿¡ã§çšãããã PKI ã®ã¯ã©ã€ã¢ã³ãèšŒææžãçšãã |
self_signed_tls_client_auth |
TLS éä¿¡ã§çšããããèªå·±çœ²åã¯ã©ã€ã¢ã³ãèšŒææžãçšãã |
ããã 2 ã€ã¯ãã¯ã©ã€ã¢ã³ããšããŒã¯ã³ãšã³ããã€ã³ããšã®éã® TLS æ¥ç¶ã§äœ¿ãããã¯ã©ã€ã¢ã³ãèšŒææžãã¯ã©ã€ã¢ã³ãèªèšŒã«å©çšããŸãã
tls_client_auth ã§ã¯ãã¯ã©ã€ã¢ã³ãã»ãµãŒããŒéã® TLS éä¿¡ã§çšããããã¯ã©ã€ã¢ã³ãèšŒææžãã¯ã©ã€ã¢ã³ãèªèšŒã«äœ¿ãããŸãããµãŒããŒåŽã¯åœè©²ã¯ã©ã€ã¢ã³ãèšŒææžãæå¹ã§ããããšã確èªãïŒãã®åŠç㯠OAuth ã«é¢ä¿ãªã TLS éä¿¡ã§ããã°åžžã«è¡ãããã¹ãããšïŒããã®äž»äœè
èå¥åïŒSubject Distinguished NameïŒããã㯠SANïŒSubject Alternative NameïŒã®ãšã³ããªãŒã®ãããããäºåã«ç»é²ãããŠããå€ãšäžèŽãããã©ããã調ã¹ãŸãããã®ãããã¯ã©ã€ã¢ã³ãã¯ã䜿ãäºå®ã®ã¯ã©ã€ã¢ã³ãèšŒææžã®äž»äœè
èå¥åããã㯠SAN ã®ãšã³ããªãŒã®ãããããäºåã«ãµãŒããŒã«ç»é²ããŠãããªããã°ãªããŸãããå仿§æžã§ã¯ããããã®ããŒã¿ã衚ãããã®ã¡ã¿ããŒã¿ãšããŠãæ°ãã«æ¬¡ã®ãã®ãå®çŸ©ãããŠããŸãïŒ2.1.2 Client Registration MetadataïŒã
tls_client_auth_subject_dntls_client_auth_san_dnstls_client_auth_san_uritls_client_auth_san_iptls_client_auth_san_email
self_signed_tls_client_auth ã§ã¯ãPKI ã®èšŒææžã§ã¯ãªããèªå·±çœ²åèšŒææžãã¯ã©ã€ã¢ã³ãèšŒææžãšããŠçšããŸãããã®ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒãçšããããã«ã¯ãã¯ã©ã€ã¢ã³ãã¯ãåœè©²èªå·±çœ²åèšŒææžã»å
¬ééµãäºåã«ãµãŒããŒã«ç»é²ããŠãããªããã°ãªããŸããã
次ã®è¡šã¯ãFAPI 仿§ã§èšåãããŠããã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒçŸ€ã瀺ããŠããŸãã
| ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒ | å¿ èŠãªããŒã¿ | è£è¶³ |
|---|---|---|
client_secret_basic |
ã¯ã©ã€ã¢ã³ã IDãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãã | ããŒã·ãã¯èªèšŒ |
client_secret_post |
ã¯ã©ã€ã¢ã³ã IDãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãã | POST ãªã¯ãšã¹ãã®ãã©ãŒã ãã©ã¡ãŒã¿ãŒãšã㊠|
client_secret_jwt |
JWT | ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã§çœ²å |
private_key_jwt |
JWT | ç§å¯éµã§çœ²å |
tls_client_auth |
ã¯ã©ã€ã¢ã³ãèšŒææž | PKI èšŒææž |
self_signed_tls_client_auth |
ã¯ã©ã€ã¢ã³ãèšŒææž | èªå·±çœ²åèšŒææž |
ã¯ã©ã€ã¢ã³ãèªèšŒã®è©³çްã«ã€ããŠã¯ãOAuth 2.0 ã¯ã©ã€ã¢ã³ãèªèšŒãããåç §ãã ããããŸããX.509 èšŒææžã®è©³çްã«ãèå³ãããã°ãå³è§£ X.509 èšŒææžãããåç §ãã ããã
ã¯ã©ã€ã¢ã³ãèšŒææžã«çŽä»ãããŒã¯ã³
åŸæ¥ã®ã¢ã¯ã»ã¹ããŒã¯ã³ã¯ãæŒæŽ©ããŠããŸããšãæ»æè ããããçšã㊠API ã«ã¢ã¯ã»ã¹ããããšãã§ããŠããŸããŸããé»è»ã®å笊ã倱ãããŠããŸã£ããããããæŸã£ãä»ã®äººãé»è»ã«ä¹ããŠããŸãã®ãšåãã§ãã
ãã®è匱æ§ã軜æžããææ®µãšããŠãã¢ã¯ã»ã¹ããŒã¯ã³ã®çºè¡å¯Ÿè±¡è ãšã¢ã¯ã»ã¹ããŒã¯ã³ã®å©çšè ãåäžã§ããããšã API ã¢ã¯ã»ã¹æã«ãã§ãã¯ãããšããæ¹æ³ãèããããŸããåœéç·èªç©ºãã±ããã®å©çšæã«ããã±ãããšäœµããŠãã¹ããŒãã®æç€ºãèŠæ±ããæ£èŠã®ãã±ããå©çšè ãšãã±ããæåè ãåäžã§ããããšã確èªããæç¶ããšåãã§ãã
ãã®æŠå¿µã¯ãProof of PossessionãïŒPoPïŒãšç·ç§°ãããŠãããFAPI ã§ã¯ Mutual TLS ãå¯äžã® PoP ã®éžæè¢ãšããŠæããŠããŸãïŒéå»ã®çã§ã¯ Token Binding ã PoP ææ³ãšããŠæããããŠããŸãããæçµçã§åé€ãããŸããïŒããã®æèã«ããã Mutual TLS ã¯ãRFC 8705 ã®ã3. Mutual-TLS Client Certificate-Bound Access Tokensãã§èª¬æãããŠããæè¡ããããŸãã
Mutual TLS ãšããåŒç§°ã¯å€çŸ©æ§ããããå®éã«äžèšã®ãããšããçµéšããã®ã§ã
ç§ïŒã埡瀟㮠API 管çãœãªã¥ãŒã·ã§ã³ã¯ïŒPoP ãšããŠã®ïŒMutual TLS ããµããŒãããŠããŸããããïŒã
äžã®äººïŒããããïŒTLS éä¿¡æã«ã¯ã©ã€ã¢ã³ãèšŒææžãèŠæ±ããããšã¯ã§ããã®ã§ïŒMutual TLS ã¯ãµããŒãããŠããŸãããã
å人çã«ã¯ PoP ãšããŠã® Mutual TLS ã®ããšããCertificate BindingãïŒèšŒææžãã€ã³ãã£ã³ã°ïŒãšåŒã¶ããšã«ããŠããŸããåç§°ãšã㊠Token Binding ãšã®å¯Ÿç§°æ§ãããããŸããå®éã®å®è£ ããèšŒææžãšã¢ã¯ã»ã¹ããŒã¯ã³ãçŽã¥ãããã ãã«èœã¡çãã®ã§ããã®èšŒææžã®åºæã TLS éä¿¡ã®äžããæãåºããã¯ã©ã€ã¢ã³ãèšŒææžãªã®ãåŠãã¯ãå®è£ ã¬ãã«ã§ã¯é¢ä¿ãªãããã§ãã
ããã¯ããŠãããMutual TLSãããšããCertificate Binding ã®å®è£ ã§ã¯ãèªå¯ãµãŒããŒã®ããŒã¯ã³ãšã³ããã€ã³ãã¯ãã¢ã¯ã»ã¹ããŒã¯ã³çºè¡æãTLS éä¿¡ã§æç€ºãããã¯ã©ã€ã¢ã³ãèšŒææžã®ããã·ã¥å€ãèšç®ãããã®ããã·ã¥å€ãã¢ã¯ã»ã¹ããŒã¯ã³ãšçŽä»ããŠèŠããŠãããŸãïŒãããã¯ã¢ã¯ã»ã¹ããŒã¯ã³ã®å®è£ ã JWT ãªãã°ãã® JWT ã®äžã«ããã·ã¥ãåã蟌ã¿ãŸãïŒãã¯ã©ã€ã¢ã³ãã¯ããã®ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿ã£ãŠãªãœãŒã¹ãµãŒããŒã® API ã«ã¢ã¯ã»ã¹ã«è¡ããŸããããã®éãããŒã¯ã³ãšã³ããã€ã³ããšã®éä¿¡ã§äœ¿ã£ããã®ãšåãã¯ã©ã€ã¢ã³ãèšŒææžã䜿ããŸãããªãœãŒã¹ãµãŒããŒã® API ã®å®è£ ã¯ããªã¯ãšã¹ãããã¢ã¯ã»ã¹ããŒã¯ã³ãšã¯ã©ã€ã¢ã³ãèšŒææžãæãåºããåœè©²ã¯ã©ã€ã¢ã³ãèšŒææžã®ããã·ã¥å€ãèšç®ããŠããã®å€ãåœè©²ã¢ã¯ã»ã¹ããŒã¯ã³ãšçŽä»ããŠããããã·ã¥å€ãšåäžã§ãããã©ããã確èªããŸããåäžã§ããã° API ã¢ã¯ã»ã¹ãèš±å¯ããããã§ãªããã° API ã¢ã¯ã»ã¹ãæåŠããŸãã
Certificate Binding ã¯ãã¯ã©ã€ã¢ã³ãèšŒææžã«ã¢ã¯ã»ã¹ã§ãããããã°ããã®ã§ãæ¯èŒçå®çŸã容æãª PoP ææ³ã§ããäžæ¹ã® Token Binding ã¯ãTLS ã¬ã€ã€ãŒã HTTP ã¬ã€ã€ãŒãªã©ãåæã«æãå ¥ããå¿ èŠããããå®è£ ã®ããŒãã«ã¯é«ãã§ãããŸããã³ãã¥ããã£ãŒãã匷ãåèãèŠæãããŠããã«ããããããïŒãIntent to Remove: Token Bindingãã®ã¡ãŒã«ã¹ã¬ããïŒãChrome ã Token Binding æ©èœãåé€ããããšããããé²è¡ããæªãããªã£ãŠããŸããããããªããããšã«ãããã«ã 2018 幎 10 æåæ¬ã«é¢é£ä»æ§æžçŸ€ã RFC åãããŸããã
| RFC çªå· | ã¿ã€ãã« |
|---|---|
| RFC 8471 | The Token Binding Protocol Version 1.0 |
| RFC 8472 | Transport Layer Security (TLS) Extension for Token Binding Protocol Negotiation |
| RFC 8473 | Token Binding over HTTP |
ãOAuth 2.0 Token BindingãïŒæéåããã©ããïŒã¯ããããã® RFC 矀ãåå°ãšã㊠OAuth 2.0 ã®ããŒã¯ã³çŸ€ã« Token Binding ãé©çšããæ¹æ³ãå®ãã仿§ã§ãã
泚æïŒå°æ¥ã®å®çŸå¯èœæ§ãäœãããšãããToken Binding 㯠FAPI æçµçããåé€ãããŸããã
JARM
JARM 㯠FAPI Implementer's Draft 2 ãšåææã«æ¿èªãããæ°ãã仿§ã§ããJARM 㯠FAPI Part 2 ã§åç §ãããŠããŸãã
ãã®ä»æ§ã«ãããèªå¯ãªã¯ãšã¹ãã® response_mode ãã©ã¡ãŒã¿ãŒã®å€ãšããŠæ¬¡ã®ãã®ãæå®ããããšãå¯èœãšãªããŸãã
query.jwtfragment.jwtform_post.jwtjwt
ããããæå®ãããšãèªå¯ã¬ã¹ãã³ã¹ã®ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒçŸ€ãäžã€ã® JWT ã«ãŸãšããããresponse={JWT} ãšãã圢åŒã§è¿ã£ãŠããŸãã
äŸãã°ãèªå¯ã³ãŒããããŒã«ãããåŸæ¥ã®èªå¯ã¬ã¹ãã³ã¹ã¯æ¬¡ã®ããã«ãªã£ãŠããŸããcode ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒãš state ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒãå¥ããŠå«ãŸããŠããŸãã
HTTP/1.1 302 Found
Location: https://client.com/callback?code={CODE}&state={STATE}
äžæ¹ãèªå¯ãªã¯ãšã¹ãã« response_mode=query.jwt ã远å ãããå Žåãèªå¯ã¬ã¹ãã³ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
HTTP/1.1 302 Found
Location: https://client.com/callback?response={JWT}
èªå¯ã¬ã¹ãã³ã¹ã® JWT ã¯ãµãŒããŒã®éµã«ãã£ãŠçœ²åãããŠããã®ã§ãã¯ã©ã€ã¢ã³ãã¯ããã® JWT ã®çœ²åãæ€èšŒããããšã«ãããã¬ã¹ãã³ã¹ãæ¹ãããããŠããªãããšã確èªããããšãã§ããŸãã
JARM é¢é£ã®ã¯ã©ã€ã¢ã³ãã¡ã¿ããŒã¿
JARM ã®å©çšã«å
ç«ã£ãŠãã¯ã©ã€ã¢ã³ãã¯ãèªèº«ã® authorization_signed_response_alg ã¡ã¿ããŒã¿ã«ãã¬ã¹ãã³ã¹ JWT ã®çœ²åã«äœ¿ã£ãŠã»ããã¢ã«ãŽãªãºã ãæå®ããŠããå¿
èŠããããŸããã¬ã¹ãã³ã¹ JWT ã®çœ²åã¯å¿
é ãšãããŠããã®ã§ããã®ã¡ã¿ããŒã¿ãèšå®ãããŠããªãã«ãé¢ããã response_mode ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã« *.jwt ãæå®ãããšãèªå¯ãªã¯ãšã¹ãã¯å€±æããŸãã
ã¬ã¹ãã³ã¹ JWT ãæå·åããŠã»ããå Žåã¯ãæå·åã«é¢ããã¡ã¿ããŒã¿ã§ãã authorization_encrypted_response_alg ãš authorization_encrypted_response_enc ã®èšå®ãå¿
èŠã§ããé察称éµç³»ã¢ã«ãŽãªãºã ãçšããã®ã§ããã°ãã¯ã©ã€ã¢ã³ãã®å
¬ééµã®èšå®ãå¿
èŠãšãªããŸãã
äžèšã¯ãAuthlete ã®ã¯ã©ã€ã¢ã³ã管ççš Web ã³ã³ãœãŒã«ã«ããããJARM é¢é£èšå®é ç®ã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã
JARM é¢é£ã®ãµãŒããŒã¡ã¿ããŒã¿
JARM ããµããŒãããèªå¯ãµãŒããŒã¯ããã£ã¹ã«ããªãŒæ
å ±ã® response_modes_supported ã«ãquery.jwtãfragment.jwtãform_post.jwtãjwt ãäžã€ä»¥äžå«ãã§ããŸãããŸããã¬ã¹ãã³ã¹ JWT ã«äœ¿çšããã¢ã«ãŽãªãºã ã«ã€ããŠã次ã®ã¡ã¿ããŒã¿ãæã£ãŠããŸãã
| ã¡ã¿ããŒã¿ | 説æ |
|---|---|
authorization_signing_alg_values_supported |
眲åã¢ã«ãŽãªãºã ã§ãµããŒãããŠãããã® |
authorization_encryption_alg_values_supported |
éµçšã®æå·ã¢ã«ãŽãªãºã ã§ãµããŒãããŠãããã® |
authorization_encryption_enc_values_supported |
æ¬æçšã®æå·ã¢ã«ãŽãªãºã ã§ãµããŒãããŠãããã® |
JARM ã®ãã«æ©èœããµããŒãããŠããèªå¯ãµãŒããŒã®ãã£ã¹ã«ããªãŒæ å ±ã¯æ¬¡ã®å 容ãå«ãããšã«ãªããŸãã
"response_modes_supported": [
"query", "fragment", "form_post",
"query.jwt", "fragment.jwt", "form_post.jwt", "jwt"
],
"authorization_signing_alg_values_supported": [
"HS256", "HS384", "HS512", "RS256", "RS384", "RS512",
"ES256", "ES384", "ES512", "PS256", "PS384", "PS512"
],
"authorization_encryption_alg_values_supported": [
"RSA1_5", "RSA-OAEP", "RSA-OEAP-256",
"A128KW", "A192KW", "A256KW",
"dir",
"ECDH-ES", "ECDH-ES+A128KW", "ECDH-ES+A192KW", "ECDH-ES+A256KW",
"A128GCMKW", "A192GCMKW", "A256GCMKW",
"PBES2-HS256+A128KW", "PBES2-HS384+A192KW", "PBES2-HS512+A256KW"
],
"authorization_encryption_enc_values_supported": [
"A128CBC-HS256", "A192CBC-HS384", "A256CBC-HS512",
"A128GCM", "A192GCM", "A256GCM"
],
Part 1: Baseline
åæç¥èã®ç޹ä»ãçµãã£ãã®ã§ãæ¬é¡ã® FAPI ã®è§£èª¬ã«å ¥ããŸãããŸããBaseline ã»ãã¥ãªãã£ãããã¡ã€ã«ãå®çŸ©ãã Part 1 ããã§ãã
Part 1: èªå¯ãµãŒããŒã«å¯ŸããèŠæ±äºé
Part 1 ã®ã5.2.2. Authorization serverãã«ãèªå¯ãµãŒããŒã«å¯ŸããèŠæ±äºé ãåæãããŠããã®ã§ãäžã€äžã€èŠãŠãããŸãã
| Part 1: 5.2.2. Authorization server, 1. |
|---|
| shall support confidential clients; |
| Confidential ã¯ã©ã€ã¢ã³ãããµããŒãããªããã°ãªããªãã |
| Part 1: 5.2.2. Authorization server, 2. |
|---|
| should support public clients; |
| Public ã¯ã©ã€ã¢ã³ãããµããŒããã¹ãã§ããã |
Confidential ã¯ã©ã€ã¢ã³ããš Public ã¯ã©ã€ã¢ã³ãã®å®çŸ©ã¯ RFC 6749 ã®ã2.1. Client Typesãã«æžããŠãããŸããFAPI ã®ä»æ§æžãèªãã¬ãã«ã®äººã«ãšã£ãŠã¯åæç¥èãªã®ã§ããããã®éããããã§ã¯èª¬æããŸãããããããªãããOAuth 2.0 ã®ãããŒãšã¯ã©ã€ã¢ã³ãã¿ã€ãã®é¢ä¿ã¯ãOAuth 2.0 ã«è©³ããæ¹ã§ã誀解ãããŠããããšããããããŸããRFC 6749 ãæç€ºçã«çŠæ¢ããŠããã®ã¯ããPublic ã¯ã©ã€ã¢ã³ãããšãã¯ã©ã€ã¢ã³ãã¯ã¬ãã³ã·ã£ã«ãºãããŒãã®çµã¿åããã®ã¿ã§ããä»ã®çµã¿åããã¯èš±ãããŠããŸãã詳现ã¯ãOAuth 2.0 ã®ãããŒãšã¯ã©ã€ã¢ã³ãã¿ã€ãã®é¢ä¿ãããåç §ãã ããã
| ãã㌠| Confidential ã¯ã©ã€ã¢ã³ã | Public ã¯ã©ã€ã¢ã³ã |
|---|---|---|
| èªå¯ã³ãŒããã㌠| OK | OK |
| ã€ã³ããªã·ãããã㌠| OK | OK |
| ãªãœãŒã¹ãªãŒããŒãã¹ã¯ãŒãã¯ã¬ãã³ã·ã£ã«ãºãã㌠| OK | OK |
| ã¯ã©ã€ã¢ã³ãã¯ã¬ãã³ã·ã£ã«ãºãã㌠| OK | NG |
åèãŸã§ã«ã§ãããCIBA ã§å®çŸ©ãããŠããããã¯ãã£ãã«èªèšŒãªã¯ãšã¹ããæããããšãèš±ãããŠããã®ã¯ãConfidential ã¯ã©ã€ã¢ã³ãã®ã¿ã§ãã
| ãã㌠| Confidential ã¯ã©ã€ã¢ã³ã | Public ã¯ã©ã€ã¢ã³ã |
|---|---|---|
| CIBA POLL ã¢ãŒã | OK | NG |
| CIBA PING ã¢ãŒã | OK | NG |
| CIBA PUSH ã¢ãŒã | OK | NG |
| Part 1: 5.2.2. Authorization server, 3. |
|---|
| shall provide a client secret that adheres to the requirements in section 16.19 of OIDC if a symmetric key is used; |
| å ±æéµãçšããå ŽåãOIDC Core 16.19 ã®èŠæ±äºé ãæºããã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããæäŸããªããã°ãªããªãã |
眲ååŠçãæå·åã§å¯Ÿç§°éµç³»ã¢ã«ãŽãªãºã ãçšããå ŽåãOIDC Core ã§ã¯ãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããå
ã«ç®åºããå€ãå
±æéµãšããŠçšããããšã«ãªã£ãŠããŸããå
ãšãªãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã®ãšã³ããããŒããã¢ã«ãŽãªãºã ãèŠæ±ãããšã³ããããŒãããäœããšãã¢ã«ãŽãªãºã ã®åŒ·åºŠãæãªãããŠããŸããŸããããã§ãOIDC Core ã®ã16.19 Symmetric Key Entropyãã¯ãå©çšããã¢ã«ãŽãªãºã ã«å¯ŸããŠã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããååãªãšã³ããããŒãæã€ããšãèŠæ±ããŠããŸããäŸãã°ãID ããŒã¯ã³ã®çœ²åã¢ã«ãŽãªãºã ãšã㊠HS256ïŒHMAC using SHA-256ïŒã䜿çšããå Žåãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã«ã¯æäœé 256 ãããã®ãšã³ããããŒãæ±ããããŸããé¢é£ããè°è«ãšããŠãOAuth 2.0 + OpenID Connect ã®ãã«ã¹ã¯ã©ããå®è£
è
ãç¥èŠãèªããã®ãã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããããåç
§ãã ããã
| Part 1: 5.2.2. Authorization server, 4. |
|---|
shall authenticate the confidential client using one of the following methods:
|
Confidential ã¯ã©ã€ã¢ã³ããæ¬¡ã®ããããã®æ¹åŒã§èªèšŒããªããã°ãªããªãã
|
ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒãšããŠãRFC 6749 ã§å®çŸ©ãããŠãã client_secret_basic ã client_secret_post ã¯å©çšã§ããªãã®ã§æ³šæããŠãã ããã
| ã¯ã©ã€ã¢ã³ãèªèšŒã¡ãœãã | äœ¿çš |
|---|---|
client_secret_basic |
NG |
client_secret_post |
NG |
client_secret_jwt |
OK |
private_key_jwt |
OK |
tls_client_auth |
OK |
self_signed_tls_client_auth |
OK |
| Part 1: 5.2.2. Authorization server, 5. |
|---|
| shall require and use a key of size 2048 bits or larger if RSA algorithms; |
| RSA ã¢ã«ãŽãªãºã ãçšããå ŽåãããŒãµã€ãºã¯ 2048 ãããä»¥äž |
| Part 1: 5.2.2. Authorization server, 6. |
|---|
| shall require and use a key of size 160 bits or larger if elliptic curve algorithms are used; |
| æ¥åæ²ç·ã¢ã«ãŽãªãºã ãçšããå ŽåãããŒãµã€ãºã¯ 160 ãããä»¥äž |
äŸãã°ãã¯ã©ã€ã¢ã³ãèªèšŒã§ private_key_jwt ãçšããJWT ã®çœ²åã« RSA ã¢ã«ãŽãªãºã ãçšããå ŽåãããŒãµã€ãºã 2048 ããã以äžã§ãªããã°ãªããŸãããåæ§ã«ãæ¥åæ²ç·ã¢ã«ãŽãªãºã ã§ããã° 160 ããã以äžã®ããŒãµã€ãºãæ±ããããŸãã
| Part 1: 5.2.2. Authorization server, 7. |
|---|
shall require RFC7636 with S256 as the code challenge method; |
RFC 7636 ãŠå®çŸ©ããããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒçŸ€ãå¿
èŠãã³ãŒããã£ã¬ã³ãžã¡ãœãã㯠S256
|
èªå¯ã³ãŒã暪åãæ»æãžã®å¯Ÿæçã§ãã RFC 7636 ã®å®è£ ãèŠæ±ãããŸãã
![]() |
|---|
| èªå¯ã³ãŒã暪åãæ»æ |
RFC 7636 ã«ãããèªå¯ãªã¯ãšã¹ãã« code_challenge ãš code_challenge_method ãšãããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒçŸ€ãããŒã¯ã³ãªã¯ãšã¹ãã« code_verifier ãšãããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã远å ãããŸãããcode_challenge_method ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãçç¥ããããšãã®ããã©ã«ãå€ã¯ plain ãªã®ã§ãS256 ãèŠæ±ãããŠãããšããããšã¯ãèªå¯ãªã¯ãšã¹ãã¯æç€ºçã« code_challenge_method=S256 ãšãããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãå«ãŸãªããã°ãªããªããšããããšã«ãªããŸãã
RFC 7636 ã«ã€ããŠã¯ãPKCE: èªå¯ã³ãŒã暪åãæ»æå¯Ÿçã®ããã« OAuth ãµãŒããŒãšã¯ã©ã€ã¢ã³ããå®è£ ãã¹ãããšãããåç §ãã ããã
| Part 1: 5.2.2. Authorization server, 8. |
|---|
| shall require redirect URIs to be pre-registered; |
| ãªãã€ã¬ã¯ã URI ã¯äºåç»é²ãå¿ èŠ |
RFC 6749 ã§ã¯ãããæ¡ä»¶äžã§ã¯ãªãã€ã¬ã¯ã URI ã®ç»é²ãçç¥ã§ããŸããããããFAPI ã§ã¯ãªãã€ã¬ã¯ã URI ã¯å¿ ãäºåç»é²ããŠãããªããã°ãªããŸããã
| Part 1: 5.2.2. Authorization server, 9. |
|---|
shall require the redirect_uri parameter in the authorization request; |
èªå¯ãªã¯ãšã¹ãã«ã¯ redirect_uri ãã©ã¡ãŒã¿ãŒãå¿
èŠ |
RFC 6749 ã§ã¯ãããæ¡ä»¶äžã§ã¯èªå¯ãªã¯ãšã¹ãã® redirect_uri ãã©ã¡ãŒã¿ãŒãçç¥ããããšãã§ããŸããããããFAPI ã§ã¯ redirect_uri ãã©ã¡ãŒã¿ãŒã¯åžžã«å¿
èŠã§ãããªããOIDC Core ã§ã redirect_uri ãã©ã¡ãŒã¿ãŒã¯åžžã«å¿
èŠã§ãã
| Part 1: 5.2.2. Authorization server, 10. |
|---|
shall require the value of redirect_uri to exactly match one of the pre-registered redirect URIs; |
redirect_uri ã®å€ã¯äºåç»é²ããããã®ãšå®å
šäžèŽããªããã°ãªããªãã |
RFC 6749 ã§ã¯ãredirect_uri ãã©ã¡ãŒã¿ãŒã§æå®ããããªãã€ã¬ã¯ã URI ãç»é²ãããŠãããªãã€ã¬ã¯ã URI ãšåèŽãããã®å€å®æ¹æ³ã¯ãïŒç»é²ãããŠãããªãã€ã¬ã¯ã URI ãå®å
š URI ã§ãªãéãïŒRFC 3986ïŒUniform Resource Identifier (URI): Generic SyntaxïŒã®ã6. Normalization and Comparisonãã«èšèŒãããŠããæ¹æ³ãçšããããšã«ãªã£ãŠããŸããäžæ¹ãFAPI ã§ã¯ãåçŽæå忝èŒã«ããå®å
šäžèŽãæ±ããããŸãããªããOIDC Core ãå®å
šäžèŽãèŠæ±ããŸãã
| Part 1: 5.2.2. Authorization server, 11. |
|---|
| shall require user authentication to an appropriate Level of Assurance for the operations the client will be authorized to perform on behalf of the user; |
| é©å㪠LoA ã®ãŠãŒã¶ãŒèªèšŒãããªããã°ãªããªãã |
èªå¯åŠçæã«å®è¡ããããŠãŒã¶ãŒèªèšŒåŠçãé©å㪠LoAïŒLevel of AssuranceïŒãæºããããšãèŠæ±ãããŸããID1 ãš ID2 ã§ã¯ãX.1254ïŒEntity authentication assurance frameworkïŒã§å®çŸ©ãããŠãã LoAïŒLevel of assuranceïŒã® 2 以äžãæºããããšãæ±ããããŠããŸãããããããæçµçã§ã¯èŠæ±å 容ã¯ããæœè±¡çã«ãªããŸããïŒãLoA2ããããé©å㪠LoAããžãšå€æŽãããŸããïŒã
åèãŸã§ã«ãX.1254 ã®ã6.2 Level of assurance 2 (LoA2)ãã«èšèŒãããŠãã LoA 2 ã®å®çŸ©ãæ²èŒããŸãã
At LoA2, there is some confidence in the claimed or asserted identity of the entity. This LoA is used when moderate risk is associated with erroneous authentication. Single-factor authentication is acceptable. Successful authentication shall be dependent upon the entity proving, through a secure authentication protocol, that the entity has control of the credential. Controls should be in place to reduce the effectiveness of eavesdroppers and online guessing attacks. Controls shall be in place to protect against attacks on stored credentials.
For example, a service provider might operate a website that enables its customers to change their address of record. The transaction in which a beneficiary changes an address of record may be considered an LoA2 authentication transaction, as the transaction may involve a moderate risk of inconvenience. Since official notices regarding payment amounts, account status, and records of changes are usually sent to the beneficiary's address of record, the transaction additionally entails moderate risk of unauthorized release of PII. As a result, the service provider should obtain at least some authentication assurance before allowing this transaction to take place.
| Part 1: 5.2.2. Authorization server, 12. |
|---|
| shall require explicit approval by the user to authorize the requested scope if it has not been previously authorized; |
| éå»ã«èªå¯ãåŸãŠããªãã¹ã³ãŒãã«ã€ããŠã¯ããŠãŒã¶ãŒã®æ¿èªãæç€ºçã«åŸãªããã°ãªããªãã |
åœç¶ã§ããã
| Part 1: 5.2.2. Authorization server, 13. |
|---|
| shall reject an authorization code (Section 1.3.1 of RFC6749) if it has been previously used; |
| 以å䜿çšãããããšã®ããèªå¯ã³ãŒãã¯æçµ¶ããªããã°ãªããªãã |
èªå¯ã³ãŒãã®åå©çšãäžå¯ãšããããšãšãéå»ã«å©çšããããã©ãããæ€èšŒããããšã¯ãåäžã§ã¯ãããŸããããããçŸåšã®èªå¯ãµãŒããŒã®å®è£ ããèªå¯ã³ãŒããååã«ã©ã³ãã ã«çæãããããå©çšãããã¿ã€ãã³ã°ã§ããŒã¿ããŒã¹ããåé€ããããšãªã£ãŠããå Žåãéå»ã«å©çšããããã©ãããæ€èšŒããããã«ã¯ã䜿çšåŸãåé€ããã«æ€èšŒã®ããã ãã«æ°žé ã«èŠããŠãããªããã°ãªããŸãããèªå¯ã³ãŒããååã«ã©ã³ãã ã«çæã§ããŠããã®ã§ããã°ãããã¯ç¡é§ã§ããäžççã«æåãªãœãããŠã§ã¢ãšã³ãžãã¢ã«ããã°ããäžã®äžã®ã»ãšãã©ã®å®è£ ã¯ãèªå¯ã³ãŒã䜿çšåŸãããŒã¿ããŒã¹ããåœè©²èªå¯ã³ãŒããåé€ããããšã«ããåå©çšãé²ãã§ãããããèªå¯ã³ãŒããéå»ã«äœ¿ããããã©ããã®æ€èšŒãªã©ããŠããªãããããã§ããŸããªããããã§ãã
| Part 1: 5.2.2. Authorization server, 14. |
|---|
| shall return token responses that conform to Section 4.1.4 of RFC6749; |
| RFC 6749 ã® 4.1.4 ã«æºæ ããããŒã¯ã³ã¬ã¹ãã³ã¹ãè¿ããªããã°ãªããªãã |
ãã㯠FAPI åºæã®èŠæ±äºé ã§ã¯ãããŸãããOAuth 2.0 ãµããŒãã謳ãå šãŠã®èªå¯ãµãŒããŒã®å®è£ 㯠RFC 6749 ã® Section 4.1.4 ã«åŸã£ãŠããªããã°ãªããŸããã
| Part 1: 5.2.2. Authorization server, 15. |
|---|
| shall return the list of granted scopes with the issued access token if the request was passed in the front channel and was not integrity protected; |
| ãªã¯ãšã¹ããããã³ããã£ãã«ãçµç±ããå®å šæ§ãä¿è·ãããŠããªãå Žåãä»äžãããã¹ã³ãŒãã®ãªã¹ããçºè¡ãããã¢ã¯ã»ã¹ããŒã¯ã³ãšå ±ã«è¿ããªããã°ãªããªãã |
RFC 6749 ã§ã¯ãèªå¯ãµãŒããŒãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã«ã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ããéããã®ã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽä»ããããã¹ã³ãŒã矀ã®ãªã¹ããã¢ã¯ã»ã¹ããŒã¯ã³ãšå ±ã«ã¯ã©ã€ã¢ã³ãã«è¿ããã©ããã¯ãã¯ã©ã€ã¢ã³ããå ã èŠæ±ããã¹ã³ãŒã矀ãšçµæãšããŠä»äžãããã¹ã³ãŒã矀ãç°ãªãå Žåãé€ããä»»æã§ãïŒRFC 6749, 5.1. Successful ResponseïŒãããããFAPI ã§ã¯ããªã¯ãšã¹ããããã³ããã£ãã«ãçµç±ããå®å šæ§ãä¿è·ãããŠããªãå ŽåãïŒèŠæ±ããã¹ã³ãŒããšä»äžãããã¹ã³ãŒããåäžã ãšããŠãïŒä»äžãããã¹ã³ãŒã矀ã®ãªã¹ãã¯åžžã«å¿çã«å«ãŸããŸãã
ããã§ã®ãå®å šæ§ã®ä¿è·ããšã¯ããªã¯ãšã¹ããªããžã§ã¯ãïŒOIDC Core Section 6 ãŸã㯠JARïŒã®äœ¿çšãæå³ããŠããŸãã
| Part 1: 5.2.2. Authorization server, 16. |
|---|
| shall provide non-guessable access tokens, authorization codes, and refresh token (where applicable), with sufficient entropy such that the probability of an attacker guessing the generated token is computationally infeasible as per RFC 6749 Section 10.10; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ãèªå¯ã³ãŒãããªãã¬ãã·ã¥ããŒã¯ã³ã¯ãååãªãšã³ããããŒãæã¡ãæšæž¬äžèœãªãã®ã§ããããšã |
ID2 ã§ã¯ã¢ã¯ã»ã¹ããŒã¯ã³ã¯æäœ 128 ãããã®ãšã³ããããŒãæã£ãŠããªããã°ãªããªããšãããŠããŸããããæçµçã§ã¯ãšã³ããããŒã®æå°å€ã«ã€ããŠå ·äœçãªå€ã«èšåããããšã¯é¿ããåã«ãååãªãšã³ããããŒããšãã衚çŸã«ãªã£ãŠããŸãã
| Part 1: 5.2.2. Authorization server, 17. |
|---|
| should clearly identify the details of the grant to the user during authorization as in 16.18 of OIDC; |
| èªå¯åŠçäžã«ãä»äžããæš©éã®è©³çްããŠãŒã¶ãŒã«æç€ºãã¹ãã§ããã |
äŸãã°ã¯ã©ã€ã¢ã³ãã payment ã¹ã³ãŒããèŠæ±ãããšããŸããå
žåçãªèªå¯ããŒãžã§ã¯ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã payment ã¹ã³ãŒããèŠæ±ããããšãäŒããã®ã¿ã§ããããããããæµ·å€ã®éèæ¥çã®æè¿ã®èŠå¶ã§ã¯ã詳现ããŠãŒã¶ãŒã«èª¬æããããšãæ±ããããŸããäŸãã°ãpayment ã¹ã³ãŒãã®ç®çã«é¢ããæ
å ±ãééé¡ããªã©ã§ããäžè¬çã«ãèŠå¶ã¯èªå¯å
容ãåå¥å
·äœçã§ããããšãæ±ããŸãã
ãã®ç®çã®ãããè±åœãªãŒãã³ãã³ãã³ã°ã¯ãLodging IntentããéçºããŸããããã®ä»çµã¿ã§ã¯ãïŒaïŒã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãèªå¯ã®è©³çްããããããèªå¯ãµãŒããŒã«ç»é²ããïŒbïŒèªå¯ãµãŒããŒã¯ç»é²ããã詳现ã衚ãã€ã³ãã³ã ID ãçºè¡ããïŒcïŒã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ãã®ã€ã³ãã³ã ID ãçšããŠèªå¯ãªã¯ãšã¹ãããããªããŸããçµæãšããŠãèªå¯ãµãŒããŒã¯èªå¯ãªã¯ãšã¹ãã®è©³çްæ å ±ãå«ãèªå¯ããŒãžãçæããããšãã§ããŸãã
ãã® Lodging Intent ãã¿ãŒã³ãæšæºä»æ§ãšããŠå©çšã§ããããã«ãããããOpenID Foundation ã¯äºã€ã®ä»æ§ãOAuth 2.0 Pushed Authorization Requests (PAR) ãš OAuth 2.0 Rich Authorization Requests (RAR) ãçå®ããŸããããããã®ä»æ§ã«ã€ããŠã¯åŸã»ã©å床èšåããŸãã
| Part 1: 5.2.2. Authorization server, 18. |
|---|
| should provide a mechanism for the end-user to revoke access tokens and refresh tokens granted to a client as in 16.18 of OIDC; |
| ã¯ã©ã€ã¢ã³ãã«äžããã¢ã¯ã»ã¹ããŒã¯ã³ãšãªãã¬ãã·ã¥ããŒã¯ã³ããŠãŒã¶ãŒãåãæ¶ãã§ããä»çµã¿ãæäŸãã¹ãã§ããã |
PKIïŒPublic Key InfrastructureïŒã§èšããšããã® CRLïŒCertificate Revocation ListïŒã OCSPïŒOnline Certificate Status ProtocolïŒã«çžåœããä»çµã¿ãå®è£ ã»éçšããªãéããå å åã®ã¢ã¯ã»ã¹ããŒã¯ã³ïŒå žåçã«ã¯ JWT åã®ã¢ã¯ã»ã¹ããŒã¯ã³ïŒãåãæ¶ãããšã¯ã§ããªãã®ã§ã泚æãå¿ èŠã§ããCRL/OCSP çžåœã®ä»çµã¿ãæäŸããªãã·ã¹ãã ã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ã®åãæ¶ãã諊ãããšããæ±ºå®ããããšèšããŸãããã®å Žåãã¢ã¯ã»ã¹ããŒã¯ã³æŒæŽ©ã®è¢«å®³ãåãããããã«ãã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãååã«çãããªããã°ãªããŸããã詳现ã«ã€ããŠã¯ãOAuth ã¢ã¯ã»ã¹ããŒã¯ã³ã®å®è£ ã«é¢ããèå¯ããåç §ããŠãã ããã
| Part 1: 5.2.2. Authorization server, 19. |
|---|
shall return an invalid_client error as defined in 5.2 of RFC6749 when mis-matched client identifiers were provided through the client authentication methods that permits sending the client identifier in more than one way; |
ã¯ã©ã€ã¢ã³ãèå¥åã®æå®æ¹æ³ãè€æ°æã€ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒã«ãããŠãã¯ã©ã€ã¢ã³ãèå¥åãè€æ°å«ãŸããããããäžèŽããªãå Žåãinvalid_client ãšã©ãŒãè¿ããªããã°ãªããªãã |
FAPI Part 1 ã§ã¯ãã¯ã©ã€ã¢ã³ãèªèšŒã¯ MTLS ããã㯠JWT ç³»ïŒclient_secret_jwtãprivate_key_jwtïŒãšãããŠããŸãã
MTLS ã®å Žåãã¯ã©ã€ã¢ã³ãèªèšŒã«ã¯ã©ã€ã¢ã³ãèšŒææžãçšããããŸããããã®èšŒææžã«ã¯ã¯ã©ã€ã¢ã³ãèå¥åã¯å«ãŸããŠããŸããããã®ãããå¥éæç€ºçã« client_id ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãçšããŠã¯ã©ã€ã¢ã³ãèå¥åãæå®ããªããã°ãªããŸããã
äžæ¹ã® JWT ç³»ã®ã¯ã©ã€ã¢ã³ãèªèšŒã§ã¯ãclient_assertion ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã§æå®ããã JWT ã® iss ã¯ã¬ãŒã ã®å€ãã¯ã©ã€ã¢ã³ãèå¥åã衚ããŠããã®ã§ãclient_id ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãç¡ããŠãã¯ã©ã€ã¢ã³ãã®ç¹å®ã¯å¯èœã§ãããªããRFC 7523, 3. ããã³ OIDC Core, 9. ã«ããã°ãã¯ã©ã€ã¢ã³ãèªèšŒã« JWT ã䜿ãå Žå㯠sub ã¯ã¬ãŒã ãã¯ã©ã€ã¢ã³ãèå¥åã衚ããŸãã
MTLS ã®å Žåã¯ã¯ã©ã€ã¢ã³ãèå¥åã衚ãã®ã¯ client_id ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã ãã§ããäžæ¹ã® JWT ç³»ã¯ã©ã€ã¢ã³ãèªèšŒã§ã¯ iss ã¯ã¬ãŒã ãš sub ã¯ã¬ãŒã ã®äž¡æ¹ãã¯ã©ã€ã¢ã³ãèå¥åã衚ããŸãããããäºã€ã®ã¯ã¬ãŒã 矀ãäžèŽããªããšãããªãã®ã¯ãã¡ããã®ããšãä»®ã«ãåé·ã§ã¯ãããŸãã client_id ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãæå®ãããŠããå Žåããã®å€ãäžèŽããªããã°ãªããŸããã
| Part 1: 5.2.2. Authorization server, 20. |
|---|
shall require redirect URIs to use the https scheme; |
ãªãã€ã¬ã¯ã URI ã®ã¹ããŒã 㯠https ã§ãªããã°ãªããªãã |
ID2 ã§è¿œå ããããã®èŠå®ã¯çãã§ããã倧ããªåœ±é¿ããããŸãããã®èŠå®ã«ãããFAPI ã§ã¯ãªãã€ã¬ã¯ã URI ã«ã«ã¹ã¿ã ã¹ããŒã ã䜿ããªãããšãšãªããŸããããã®ãããå€éš Web ãµãŒããŒãç«ãŠãã«ã¯ã©ã€ã¢ã³ãåŽã ãã§ãªãã€ã¬ã¯ãåŠçãå®çµããããå ŽåãBCP 212ïŒOAuth 2.0 for Native AppsïŒã®ã7.2. Claimed "https" Scheme URI Redirectionãã§èšåãããŠããææ³ã䜿ãå¿ èŠããããŸãã
| Part 1: 5.2.2. Authorization server, 21. |
|---|
| should issue access tokens with a lifetime of under 10 minutes unless the tokens are sender-constrained; and |
| ã¢ã¯ã»ã¹ããŒã¯ã³ãéä¿¡è éå®ã§ãªãéãããã®æå¹æé㯠10 å以å ã§ãªããã°ãªããŸããã |
ãã®èŠæ±äºé ã¯æçµçã§è¿œå ãããŸãããããã§ãéä¿¡è éå®ïŒsender-constrainedïŒããšã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ãã¯ã©ã€ã¢ã³ãèšŒææžã«çŽä»ããŠããïŒMTLSïŒããšæå³ããŸãã
| Part 1: 5.2.2. Authorization server, 22. |
|---|
| shall support OIDD, may support RFC8414 and shall not distribute discovery metadata (such as the authorization endpoint) by any other means. |
| OIDD ããµããŒãããªããã°ãªããRFC 8414 ã®ãµããŒãã¯ä»»æã§ãããä»ã®æ¹æ³ã§ïŒèªå¯ãšã³ããã€ã³ããªã©ã®ïŒãã£ã¹ã«ããªãŒã¡ã¿ããŒã¿ãé åžããŠã¯ãªããªãã |
ãã®èŠæ±äºé ã¯æçµçã§è¿œå ãããŸãããããã§ OIDD 㯠OpenID Connect Discovery 1.0 ããããŸãããã®ãããFAPI çšã®èªå¯ãµãŒããŒã§ã¯ OIDD ã® Section 4 ã§å®çŸ©ãããŠããããã£ã¹ã«ããªãŒãšã³ããã€ã³ãããå®è£ ããå¿ èŠããããŸãã
| Part 1: 5.2.2.1. Returning authenticated user's identifier |
|---|
| Further, if it is desired to provide the authenticated user's identifier to the client in the token response, the authorization server: |
| ããã«ãèªèšŒããããŠãŒã¶ãŒã®èå¥åãããŒã¯ã³ãªã¯ãšã¹ãã«å«ããŠã¯ã©ã€ã¢ã³ãã«è¿ãããšãæ±ããããŠããå Žåãèªå¯ãµãŒããŒã¯: |
Section 5.2.2.1 ã«ã¯ããŠãŒã¶ãŒã®äžæèå¥åãèŠæ±ãããŠããå Žåã«èªå¯ãµãŒããŒãåŸããªããã°ãªããªãèŠæ±äºé ãåæãããŠããŸãã"if it is desired to provide the authenticated user's identifier" ãšããæ¡ä»¶ã¯ãçŽèš³ãããšãèªèšŒããããŠãŒã¶ãŒã®èå¥åã®æäŸãæ±ããããŠããå ŽåããšãªããŸããããããæè¡çã«æå³ãããšããã¯ãID ããŒã¯ã³ã®çºè¡ãèŠæ±ãããŠããå Žåããšããããšã§ãã
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 1. |
|---|
| shall support the authentication request as in Section 3.1.2.1 of OIDC; |
| OIDC Core ã® 3.1.2.1 ã®èªèšŒãªã¯ãšã¹ãããµããŒãããªããã°ãªããªãã |
OIDC Core ã®ã3.1.2.1. Authentication Requestãã¯ãOpenID Connect ã«ãããèªå¯ãšã³ããã€ã³ããžã®ãªã¯ãšã¹ãã®å®çŸ©ã§ããRFC 6749 ã§ã¯èªå¯ãšã³ããã€ã³ããžã®ãªã¯ãšã¹ãããèªå¯ãªã¯ãšã¹ãããšåŒã³ãOIDC Core ã§ã¯ãèªèšŒãªã¯ãšã¹ãããšåŒã³ãŸãããåŒç§°ã¯ããŠãããèªå¯ãšã³ããã€ã³ãã®åäœä»æ§å®çŸ©ã OIDC Core ã®äžå¿ã§ããããšãèãããšããã®èŠå®ã¯ãã»ãŒãOIDC Core ããµããŒãããããšããšèšã£ãŠããã«çãããªããŸãã
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 2. |
|---|
| shall perform the authentication request verification as in Section 3.1.2.2 of OIDC; |
| OIDC Core ã® 3.1.2.2 ã«åŸã£ãŠèªèšŒãªã¯ãšã¹ããæ€èšŒããªããã°ãªããªãã |
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 3. |
|---|
| shall authenticate the user as in Section 3.1.2.2 and 3.1.2.3 of OIDC; |
| OIDC Core ã® 3.1.2.2 ãš 3.1.2.3 ã«åŸã£ãŠãŠãŒã¶ãŒãèªèšŒããªããã°ãªããªãã |
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 4. |
|---|
| shall provide the authentication response as in Section 3.1.2.4 and 3.1.2.5 of OIDC depending on the outcome of the authentication; |
| èªèšŒåŠçã«ããçæç©ã«å¿ããŠãOIDC Core ã® 3.1.2.4 ãš 3.1.2.5 ã«åŸã£ãŠèªèšŒã¬ã¹ãã³ã¹ãæäŸããªããã°ãªããªãã |
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 5. |
|---|
| shall perform the token request verification as in Section 3.1.3.2 of OIDC; and |
| OIDC Core ã® 3.1.3.2 ã«åŸã£ãŠããŒã¯ã³ãªã¯ãšã¹ãã®æ€èšŒããããªããªããã°ãªããªãã |
| Part 1: 5.2.2.1. Returning authenticated user's identifier, 6. |
|---|
shall issue an ID Token in the token response when openid was included in the requested scope as in Section 3.1.3.3 of OIDC with its sub value corresponding to the authenticated user and optional acr value in ID Token. |
èŠæ±ããã scope ã« openid ãå«ãŸããŠããå ŽåãèªèšŒããããŠãŒã¶ãŒã瀺ã sub ã¯ã¬ãŒã ãšããªãã·ã§ãã«ã§ acr ã¯ã¬ãŒã ãå«ã ID ããŒã¯ã³çºè¡ããããŒã¯ã³ã¬ã¹ãã³ã¹ã«å«ããªããã°ãªããªãã |
äžèšã®èŠæ±äºé 矀ããŸãšããŠèŠçŽãããšãOIDC Core ã®ä»æ§ã«åŸã£ãŠãã ããããšããããšã«ãªããŸããFAPI åºæã®èŠæ±äºé ã¯ãããŸããã
| Part 1: 5.2.2.2. Client requesting openid scope |
|---|
If the client requests the openid scope, the authorization server
|
ã¯ã©ã€ã¢ã³ãã openid ã¹ã³ãŒããèŠæ±ããŠããå Žåãèªå¯ãµãŒããŒã¯
|
OIDC ã® Section 3.1.2.1ïŒèªå¯ã³ãŒããããŒïŒã§ã¯ nonce ã¯ä»»æãšãããŠããŸããäžæ¹ãSection 3.2.2.1ïŒã€ã³ããªã·ãããããŒïŒã§ã¯ nonce ã¯å¿
é ãšãããŠããŸãã
FAPI ã§ã¯ãscope ã« openid ãå«ãŸããŠããå Žåãèªå¯ã³ãŒããããŒã®å Žåã§ã nonce ãèŠæ±ãããŸãã
| Part 1: 5.2.2.3. Clients not requesting openid scope |
|---|
If the client does not requests the openid scope, the authorization server
|
ã¯ã©ã€ã¢ã³ãã openid ã¹ã³ãŒããèŠæ±ããŠããªãå Žåãèªå¯ãµãŒããŒã¯
|
RFC 6749 ã§ã¯ state ãã©ã¡ãŒã¿ãŒã¯ä»»æãšãããŠããŸããFAPI ã§ã¯ãscope ã« openid ãå«ãŸããŠããªãå Žåãstate ã¯å¿
é ãšãªããŸãã
Part 1: Public ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé
Part 1 ã®ã5.2.3. Public clientãã«ãPublic ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé ãåæãããŠããã®ã§ãäžã€äžã€èŠãŠãããŸãã
| Part 1: 5.2.3. Public client, 1. |
|---|
| shall support RFC7636; |
| RFC 7636 ããµããŒãããªããã°ãªããªãã |
RFC 7636 㯠PKCE ã®ããšã§ãã
| Part 1: 5.2.3. Public client, 2. |
|---|
shall use S256 as the code challenge method for the RFC7636; |
ã³ãŒããã£ã¬ã³ãžã¡ãœããã« S256 ãçšããªããã°ãªããªãã |
èªå¯ãªã¯ãšã¹ãã« code_challenge_method=S256 ãå«ããªããã°ãªããŸããã
| Part 1: 5.2.3. Public client, 3. |
|---|
| shall use separate and distinct redirect URI for each authorization server that it talks to; |
| èªå¯ãµãŒããŒæ¯ã«å¥ã ã®ãªãã€ã¬ã¯ã URI ãçšããªããã°ãªããªãã |
| Part 1: 5.2.3. Public client, 4. |
|---|
| shall store the redirect URI value in the resource owner's user-agents (such as browser) session and compare it with the redirect URI that the authorization response was received at, where, if the URIs do not match, the client shall terminate the process with error; |
| ãªãã€ã¬ã¯ã URI ã®å€ãã»ãã·ã§ã³ã«ä¿åããŠãããèªå¯ã¬ã¹ãã³ã¹ãåä¿¡ãããªãã€ã¬ã¯ã URI ãšæ¯èŒããããšãURI ãäžèŽããªãå Žåãã¯ã©ã€ã¢ã³ãã¯åŠçããšã©ãŒãšããŠçµäºããªããã°ãªããªãã |
ãããã®èŠæ±äºé ã¯æžããŠããéãã§ãã
| Part 1: 5.2.3. Public client, 5. |
|---|
| (withdrawn); and |
| (æ€å) |
"(withdrawn)" ã¯ã以åã® FAPI ããŒãžã§ã³ã«ååšããèŠæ±äºé ãæ€åãããããšãæå³ããŸãããã®åŸã«ã "(withdrawn)" ãäœåºŠãç»å ŽããŸãã
| Part 1: 5.2.3. Public client, 6. |
|---|
| shall implement an effective CSRF protection. |
| CSRF 察çãå®è£ ããããšã |
éåžžãCSRF 察çã¯ãµãŒããŒåŽã§å®è£ ãããã®ã§ãããPublic ã¯ã©ã€ã¢ã³ãã®èŠæ±äºé ãšããŠã® CSRF 察çãšã¯äœãããã®ã§ããããïŒ ããã¯ããªãã€ã¬ã¯ã URI ã®ããã® CSRF 察çã®ããšã§ããäžèšã¯ãRFC 6749 ã®ã10.12. Cross-Site Request Forgeryãããã®æç²ã§ãã
The client MUST implement CSRF protection for its redirection URI. This is typically accomplished by requiring any request sent to the redirection URI endpoint to include a value that binds the request to the user-agent's authenticated state (e.g., a hash of the session cookie used to authenticate the user-agent). The client SHOULD utilize the "state" request parameter to deliver this value to the authorization server when making an authorization request.
ãããŸã§ã® 1. ã 6. ã«å ãã" if it is desired to obtain a persistent identifier of the authenticated user" ã§ããã°ïŒèªèšŒããããŠãŒã¶ãŒã®æ°žç¶èå¥åãèŠæ±ãããŠããã°ïŒãã€ãŸã㯠ID ããŒã¯ã³ãèŠæ±ãããŠããã°ïŒ
| Part 1: 5.2.3. Public client, 7. |
|---|
shall include openid in the scope value; and |
scope ã« openid ãå«ãŸãªããã°ãªããªãã |
| Part 1: 5.2.3. Public client, 8. |
|---|
shall include nonce parameter defined in Section 3.1.2.1 of OIDC in the authentication request. |
nonce ãã©ã¡ãŒã¿ãŒãå«ãŸãªããã°ãªããªãã |
äžæ¹ã§ã"If openid is not in the scope value" ã§ããã°ïŒscope ã« openid ãå«ããªãã±ãŒã¹ã§ã¯ïŒïŒ
| Part 1: 5.2.3. Public client, 9. |
|---|
shall include the state parameter defined in section 4.1.1 of RFC6749; |
state ãã©ã¡ãŒã¿ãŒãå«ãŸãªããã°ãªããªãã |
| Part 1: 5.2.3. Public client, 10. |
|---|
shall verify that the scope received in the token response is either an exact match, or contains a subset of the scope sent in the authorization request; and |
ããŒã¯ã³ã¬ã¹ãã³ã¹å
ã® scope ãèªå¯ãªã¯ãšã¹ãã® scope ãšæ£ç¢ºã«äžèŽããããšããããã¯ããµãã»ããã«ãªã£ãŠããããšãæ€èšŒããªããã°ãªããªãã |
| Part 1: 5.2.3. Public client, 11. |
|---|
| shall only use Authorization Server metadata obtained from the metadata document published by the Authorization Server at its well known endpoint as defined in OIDD or RFC 8414. |
| ãµãŒããŒã¡ã¿ããŒã¿ã«ã€ããŠã¯ããã£ã¹ã«ããªãŒãšã³ããã€ã³ãããååŸãããã®ã®ã¿ã䜿çšããããšã |
Part 1: Confidential ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé
Part 1 ã®ã5.2.4. Confidential clientãã«ãConfidential ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé ãåæãããŠããŸããConfidential ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé ã¯ããPublic ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé ã«å ããŠããšããäœçœ®ä»ããªã®ã§ãConfidential ã¯ã©ã€ã¢ã³ãã¯ã5.2.4 ã«æããããŠããé ç®ã ãã§ãªãã5.2.3 ã«æããããŠããé ç®ã«ã察å¿ããå¿ èŠããããŸãã
| Part 1: 5.2.4. Confidential client, 1. |
|---|
shall support the following methods to authenticate against the token endpoint:
|
ããŒã¯ã³ãšã³ããã€ã³ãã«ãããã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒãšããŠæ¬¡ã®ãã®ããµããŒãããªããã°ãªããªãã
|
RFC 6749 ã§å®çŸ©ãããŠããã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒïŒclient_secret_basic ãš client_secret_postïŒã¯äœ¿ããªãã®ã§æ³šæããŠãã ããã
| Part 1: 5.2.4. Confidential client, 2. |
|---|
| shall use RSA keys with a minimum 2048 bits if using RSA cryptography; |
| RSA æå·ãçšããå Žå㯠2048 ããã以äžã®éµã䜿ããªããã°ãªããªãã |
| Part 1: 5.2.4. Confidential client, 3. |
|---|
| shall use elliptic curve keys with a minimum of 160 bits if using Elliptic Curve cryptography; and |
| æ¥åæ²ç·æå·ãçšããå Žå㯠160 ããã以äžã®éµã䜿ããªããã°ãªããªãã |
| Part 1: 5.2.4. Confidential client, 4. |
|---|
| shall verify that its client secret has a minimum of 128 bits if using symmetric key cryptography. |
| 察称éµç³»æå·ãçšããå Žåã¯ã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ããã 128 ããã以äžã§ããããšãæ€èšŒããªããã°ãªããªãã |
ãããã¯ãæå·åããã JWT ãæ±ãå Žåã«é¢ä¿ããŠããŸãã
Part 1: ä¿è·ãªãœãŒã¹ã«å¯ŸããèŠæ±äºé
Part 1 ã®ã6.2.1. Protected resources provisionsãã«ã¯ãä¿è·ãªãœãŒã¹ã«å¯ŸããèŠæ±äºé ãåæãããŠããŸãã
| Part 1: 6.2.1. Protected resources provisions, 1. |
|---|
| shall support the use of the HTTP GET method as in Section 4.3.1 of RFC7231; |
| HTTP GET ã¡ãœããããµããŒãããªããã°ãªããªãã |
| Part 1: 6.2.1. Protected resources provisions, 2. |
|---|
| shall accept access tokens in the HTTP header as in Section 2.1 of OAuth 2.0 Bearer Token Usage RFC6750; |
| RFC 6750 ã® 2.1 ã§å®çŸ©ãããŠããæ¹æ³ã§ã¢ã¯ã»ã¹ããŒã¯ã³ãåãåããªããã°ãªããªãã |
ã€ãŸããAuthorization: Bearer ã¢ã¯ã»ã¹ããŒã¯ã³ ãšãã圢åŒã® Authorization HTTP ããããŒã«ããã¢ã¯ã»ã¹ããŒã¯ã³ãåãåããªããã°ãªããŸããã
GET ä¿è·ãªãœãŒã¹?ãã©ã¡ãŒã¿ãŒçŸ€ HTTP/1.1
Host: ãªãœãŒã¹ãµãŒããŒ
Authorization: Bearer ã¢ã¯ã»ã¹ããŒã¯ã³
| Part 1: 6.2.1. Protected resources provisions, 3. |
|---|
| shall not accept access tokens in the query parameters stated in Section 2.3 of OAuth 2.0 Bearer Token Usage RFC6750; |
| RFC 6750 ã® 2.3. ã§å®çŸ©ãããŠããæ¹æ³ã§ã¢ã¯ã»ã¹ããŒã¯ã³ãåãåã£ãŠã¯ãªããªãã |
ã€ãŸããaccess_token=ã¢ã¯ã»ã¹ããŒã¯ã³ ãšãã圢åŒã®ã¯ãšãªãŒãã©ã¡ãŒã¿ãŒã§ã¢ã¯ã»ã¹ããŒã¯ã³ãåãåã£ãŠã¯ãªããŸããã
| Part 1: 6.2.1. Protected resources provisions, 4. |
|---|
| shall verify that the access token is neither expired nor revoked; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ãæå¹æéåãã§ãªãããšãåãæ¶ããããŠããªãããšãæ€èšŒããªããã°ãªããªãã |
| Part 1: 6.2.1. Protected resources provisions, 5. |
|---|
| shall verify that the scope associated with the access token authorizes access to the resource it is representing; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ãã¹ã³ãŒããåœè©²ãªãœãŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ããŠããããšãæ€èšŒããªããã°ãªããªãã |
| Part 1: 6.2.1. Protected resources provisions, 6. |
|---|
| shall identify the associated entity to the access token; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ããšã³ãã£ãã£ãŒãç¹å®ããªããã°ãªããªãã |
| Part 1: 6.2.1. Protected resources provisions, 7. |
|---|
| shall only return the resource identified by the combination of the entity implicit in the access and the granted scope and otherwise return errors as in Section 3.1 of RFC6750; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ããšã³ãã£ãã£ãŒãšä»äžãããã¹ã³ãŒãã®çµã«ããç¹å®ããããªãœãŒã¹ã®ã¿ãè¿ããªããã°ãªããªããã§ããªããã° RFC 6750 ã® 3.1 å ã®ãšã©ãŒãè¿ããªããã°ãªããªãã |
RFC 6750 ã®ã3.1. Error Codesãã«ã¯ invalid_requestãinvalid_tokenãinsufficient_scope ã®äžã€ã®ãšã©ãŒã³ãŒããå®çŸ©ãããŠããŸãããã ãããšã©ãŒã³ãŒããåã蟌ãå Žæã¯ã¬ã¹ãã³ã¹ããã£ãŒã§ã¯ãªã WWW-Authenticate HTTP ããããŒã§ããããšã«æ³šæããŠãã ããã
HTTP/1.1 400 Bad Request
WWW-Authenticate: Bearer error="ãšã©ãŒã³ãŒã",
error_description="ãšã©ãŒã®èª¬æ",
error_uri="ãšã©ãŒã®è©³çŽ°èª¬æãæžãããããŒãžã®URI",
scope="ä¿è·ãªãœãŒã¹ã®ã¢ã¯ã»ã¹ã«å¿
èŠãªã¹ã³ãŒã矀"
Cache-Control: no-store
Pragma: no-cache
| Part 1: 6.2.1. Protected resources provisions, 8. |
|---|
| shall encode the response in UTF-8 if applicable; |
| å¯èœã§ããã°ã¬ã¹ãã³ã¹ã¯ UTF-8 ã§ãšã³ã³ãŒãããã |
| Part 1: 6.2.1. Protected resources provisions, 9. |
|---|
shall send the Content-type HTTP header Content-Type: application/json; if applicable; |
é©åœã§ããã°ãContent-Type: application/json HTTP ããããŒãå«ããã |
FAPI ã®ä¿è·ãªãœãŒã¹ãšã³ããã€ã³ãããã®ã¬ã¹ãã³ã¹ã®ãã©ãŒãããã¯ãåºæ¬çã«ã¯ JSON ã§ããããšãæåŸ ãããŠããŸãã
| Part 1: 6.2.1. Protected resources provisions, 10. |
|---|
shall send the server date in HTTP Date header as in Section 7.1.1.2 of RFC7231; |
ãµãŒããŒæå»ã瀺ã Date HTTP ããããŒãå«ããã |
Date ããããŒã®ãã©ãŒããã㯠RFC 7231 ã® 7.1.1.1. Date/Time Formats ã§å®çŸ©ãããŠããŸããäŸãæããŸãã
Date: Sun, 06 Nov 1994 08:49:37 GMT
| Part 1: 6.2.1. Protected resources provisions, 11. |
|---|
shall set the response header x-fapi-interaction-id to the value received from the corresponding FAPI client request header or to a RFC4122 UUID value if the request header was not provided to track the interaction, e.g., x-fapi-interaction-id: c770aef3-6784-41f7-8e0e-ff5f97bddb3a; |
x-fapi-interaction-id HTTP ããããŒãå¿çã«å«ããããã®å€ã¯ããªã¯ãšã¹ãã« x-fapi-interaction-id ãå«ãŸããŠããã°ãããšåãå€ããå«ãŸããŠããªããã° UUID ãçæããŠã»ããããã |
ãã㯠FAPI ç¹æã®èŠæ±äºé
ã§ããFAPI ã«å¯Ÿå¿ããä¿è·ãªãœãŒã¹ãšã³ããã€ã³ãã¯ãx-fapi-interaction-id HTTP ããããŒãã¬ã¹ãã³ã¹ã«å«ããªããã°ãªããŸããã
ãªã¯ãšã¹ãã« x-fapi-interaction-id ãå«ãŸããŠããã°ããããšåãå€ãã¬ã¹ãã³ã¹ã«å«ããªããã°ãªããŸãããããã§ãªããã°ãä¿è·ãªãœãŒã¹ãšã³ããã€ã³ãã¯ãx-fapi-interaction-id ã®æ°ããå€ãçæããªããã°ãªããŸããã
| Part 1: 6.2.1. Protected resources provisions, 12. |
|---|
shall log the value of x-fapi-interaction-id in the log entry. |
x-fapi-interaction-id ã®å€ããã°ã«æ®ããªããã°ãªããªãã |
ããã FAPI ç¹æã®èŠæ±äºé ã§ããä¿è·ãªãœãŒã¹ãšã³ããã€ã³ãã®ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ä»æ§ã«ã¯äœã圱é¿ãåãŒããªãèŠæ±äºé ã§ãããã¯ã©ã€ã¢ã³ãåŽã®ãã°ãšãµãŒããŒåŽã®ãã°ã®ä»ãåããã容æã«ããããã®ä»çµã¿ãšããŠçšããããŸãã
| Part 1: 6.2.1. Protected resource provisions, 13. |
|---|
shall not reject requests with a x-fapi-customer-ip-address header containing a valid IPv4 or IPv6 address. |
æå¹ãª IPv4 ãŸã㯠IPv6 ã¢ãã¬ã¹ãå«ã x-fapi-customer-ip-address ããããŒãå«ããªã¯ãšã¹ããæåŠããŠã¯ãªããªãã |
| Part 1: 6.2.1. Protected resources provisions, 14. |
|---|
| should support the use of Cross Origin Resource Sharing (CORS) [CORS] and or other methods as appropriate to enable JavaScript clients to access the endpoint if it decides to provide access to JavaScript clients. |
| JavaScript ã¯ã©ã€ã¢ã³ãããã®ã¢ã¯ã»ã¹ã蚱容ããå Žå㯠Cross Origin Resource Sharing ããµããŒããã¹ãã |
äŸãã°ãä¿è·ãªãœãŒã¹ãšã³ããã€ã³ããä»»æã®å Žæã«ãã JavaScript ã¯ã©ã€ã¢ã³ãããã®ã¢ã¯ã»ã¹ãèš±å¯ããããã°ãAccess-Control-Allow-Origin: * ããããŒãã¬ã¹ãã³ã¹ã«å«ããŸãã
Part 1: ä¿è·ãªãœãŒã¹ã¢ã¯ã»ã¹æã®ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé
Part 1 ã®ã6.2.2. Client provisionsãã«ãä¿è·ãªãœãŒã¹ã¢ã¯ã»ã¹æã®ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé ãåæãããŠããã®ã§ãäžã€äžã€èŠãŠãããŸãã
| Part 1: 6.2.2. Client provisions, 1. |
|---|
| shall send access tokens in the HTTP header as in Section 2.1 of OAuth 2.0 Bearer Token Usage RFC6750; and |
| RFC 6750 ã® 2.1 ã§å®çŸ©ãããŠããæ¹æ³ã§ã¢ã¯ã»ã¹ããŒã¯ã³ãéããªããã°ãªããªãã |
ã€ãŸããAuthorization: Bearer ã¢ã¯ã»ã¹ããŒã¯ã³ ãšãã圢åŒã§ã¢ã¯ã»ã¹ããŒã¯ã³ãéä¿¡ããŸãã
| Part 1: 6.2.2. Client provisions, 2. |
|---|
| (withdrawn); |
| (æ€å) |
| Part 1: 6.2.2. Client provisions, 3. |
|---|
may send the last time the customer logged into the client in the x-fapi-auth-date header where the value is supplied as a HTTP-date as in Section 7.1.1.1 of RFC7231, e.g., x-fapi-auth-date: Tue, 11 Sep 2012 19:43:31 GMT; |
ãŠãŒã¶ãŒãæåŸã«ãã°ã€ã³ããæå»ããHTTP-date 圢åŒã§ x-fapi-auth-date ããããŒã«å«ããŠéä¿¡ããŠãããã |
| Part 1: 6.2.2. Client provisions, 4. |
|---|
may send the customerâs IP address if this data is available in the x-fapi-customer-ip-address header, e.g., x-fapi-customer-ip-address: 2001:DB8::1893:25c8:1946 or x-fapi-customer-ip-address: 198.51.100.119; and |
ãŠãŒã¶ãŒã® IP ã¢ãã¬ã¹ã x-fapi-customer-ip-address ããããŒã«å«ããŠéä¿¡ããŠãããã |
| Part 1: 6.2.2. Client provisions, 5. |
|---|
may send the x-fapi-interaction-id request header, in which case the value shall be a RFC4122 UUID to the server to help correlate log entries between client and server, e.g., x-fapi-interaction-id: c770aef3-6784-41f7-8e0e-ff5f97bddb3a. |
ã¯ã©ã€ã¢ã³ãåŽã®ãã°ãšãµãŒããŒåŽã®ãã°ã®ä»ãåããã容æã«ãããããUUID ã x-fapi-interaction-id ããããŒã«å«ããŠéä¿¡ããŠãããã |
3 ã 5 ã¯ãFAPI åºæã® x-fapi-* HTTP ããããŒã«é¢ããé
ç®ãšãªã£ãŠããŠãéä¿¡ãããã©ããã¯ã¯ã©ã€ã¢ã³ãã®èªç±ã§ãããŸãšãããšäžèšã®éãã§ãã
| çªå· | HTTP ããã㌠| å 容 |
|---|---|---|
| 3 | x-fapi-auth-date |
ãŠãŒã¶ãŒã®æçµãã°ã€ã³æå» |
| 4 | x-fapi-customer-ip-address |
ãŠãŒã¶ãŒã® IP ã¢ãã¬ã¹ |
| 5 | x-fapi-interaction-id |
éä¿¡ãèå¥ããããã® UUID |
Part 1: ã»ãã¥ãªãã£ãŒäžã®èæ ®äºé
Part 1 ã®ã7. Security considerationsãã«ãã»ãã¥ãªãã£ãŒäžã®èæ ®äºé ãåæãããŠããŸããäžèšã¯ããããã®é ç®ã®èŠçŽã§ãã
| èŠçŽ | |
|---|---|
| 7.1 | BCP 195 ã«åŸããTLS 1.2 以éã䜿ããRFC 6125 ã«åŸãã |
| 7.2 | Part 1 ã§ã¯èªå¯ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã¯èªèšŒãããªãã |
| 7.3 | Part 1 ã§ã¯èªå¯ãªã¯ãšã¹ãã®å®å šæ§ã¯ä¿èšŒãããªãã |
| 7.4.1 | Part 1 ã§ã¯èªå¯ãªã¯ãšã¹ãã®æå·åã«é¢ããèšåã¯ãªãã |
| 7.4.2 | ãã°ããæ å ±æŒæŽ©ããªãããã«æ³šæã |
| 7.4.3 | ãªãã¡ã©ãŒçµç±ã§æ å ±ãæŒããªãããã«æ³šæãã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã¯çãã |
| 7.5 | ãã€ãã£ãã¢ããªã¯ BCP 212 ã«åŸãããšããã ããPrivate-Use URI Scheme Redirection ãš Loopback Interface Redirection ããµããŒãããŠã¯ãªããªãããªãã€ã¬ã¯ã URI ã®ã¹ããŒã ã«ã¯ Claimed https Scheme URI Redirection ã§ç޹ä»ãããŠãã https ã䜿ãããšã |
| 7.6 | FAPI å®è£ ããã³äžå±€ã® OAuth/OIDC å®è£ ã®äž¡æ¹ãšãå®å šã§æ£ç¢ºã§ããããšãéèŠãOpenID Certification ãåç §ã®ããšã |
| 7.7 | è€æ°ã®ãã©ã³ãããµããŒãããããã°ããã©ã³ãæ¯ã«ç°ãªã issuer ãçšããããšã |
FAPI Part 2 ã¯ããªã¯ãšã¹ããªããžã§ã¯ããå¿ é ãšãããªã©ããŠãPart 1 ã§æããããŠããã»ãã¥ãªãã£ãŒäžã®èæ ®äºé ã«å¯Ÿãã解決çã瀺ããŠããŸããã»ãã¥ãªãã£ãŒãªã¹ã¯ã«å¯Ÿãããã匷åºãªå¯Ÿçãå¿ èŠãªéã« Part 1 ããã Part 2 ãæšå¥šãããŸãã
Part 2: Advanced
次ã¯ãAdvanced ã»ãã¥ãªãã£ãŒãããã¡ã€ã«ãå®ãã Part 2 ãèŠãŠãããŸãããã
Detached Signature
Part 2 ã®ã5.1.1. ID Token as Detached Signatureãã¯ããID ããŒã¯ã³ãããDetached SignatureããšããŠçšãããšè¿°ã¹ãŠããŸãã
ID ããŒã¯ã³ã¯èªå¯ãµãŒããŒã«ãã£ãŠçœ²åãããã®ã§ããã®å å®¹ãæ»æè ãæ¹ç«ããŠãããã®æ¹ç«ãæ€åºããããšãã§ããŸããID ããŒã¯ã³ãåãåã£ãã¯ã©ã€ã¢ã³ãã¯ã眲åãæ€èšŒããããšã§ãèªå¯ãµãŒããŒããéãããŠããããŒã¿ãæå ã«å±ããŸã§ã®éã«æ¹ç«ãããŠããªãããšã確èªã§ããŸãã
ãã®æ©èœãæµçšããID ããŒã¯ã³ã®å€éšã«çœ®ãããã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒçŸ€ïŒäŸãã° code ã stateïŒã®ããã·ã¥å€ã ID ããŒã¯ã³ã®äžã«åã蟌ãã§ããã°ãã¬ã¹ãã³ã¹ãåãåã£ãã¯ã©ã€ã¢ã³ãã¯ããID ããŒã¯ã³ã®å€éšã«çœ®ãããŠããã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒã®å€ã®ããã·ã¥å€ããèšç®ããããããID ããŒã¯ã³ã«åã蟌ãŸããŠããããã·ã¥å€ããšäžèŽããããšã確èªããããšã§ãåœè©²ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã®å€ãéäžã§æ¹ç«ãããŠããªãããšã確èªã§ããŸãã
èªå¯ã³ãŒãã衚ã code ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒã«ã€ããŠã¯ããã®ããã·ã¥å€ã衚ã c_hash ãšããã¯ã¬ãŒã ããå®ã¯æ¢ã« OIDC Core ã§å®çŸ©æžã¿ã§ããåæ§ã«ãã¢ã¯ã»ã¹ããŒã¯ã³ã衚ã access_token ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒã«ã€ããŠããat_hash ã¯ã¬ãŒã ãå®çŸ©æžã¿ã§ãã
ãŸã å®çŸ©ãããŠããªãã®ã¯ state ã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒã«å¯Ÿå¿ããããã·ã¥å€ã®ããã®ã¯ã¬ãŒã ãšããããšã§ãã5.1.1. ID Token as Detached Signatureãã§ã¯ s_hash ã¯ã¬ãŒã ããã®ç®çã®ããã«å®çŸ©ããŠããŸãã
s_hash
State hash value. Its value is the base64url encoding of the left-most half of the hash of the octets of the ASCII representation of thestatevalue, where the hash algorithm used is the hash algorithm used in thealgheader parameter of the ID Token's JOSE header. For instance, if thealgisHS512, hash the state value with SHA-512, then take the left-most 256 bits and base64url encode them. Thes_hashvalue is a case sensitive string.
Part 2 ã§ã¯ ID ããŒã¯ã³ã Detached Signature ãšããŠäœ¿ããããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã ID ããŒã¯ã³ãã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§å¿
èŠãšããŠããªããŠããID ããŒã¯ã³ãèŠæ±ãããªã¯ãšã¹ããæããªããã°ãªããªããŸãããå
·äœçã«ã¯ãresponse_type ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã« id_token ãå«ããªããã°ãªããŸãããã5.2.2. Authorization Serverãã® 2 çªç®ã®é
ç®ã§ _"shall require the response_type value code id_token;"ïŒresponse_type 㯠code id_token ã§ãªããã°ãªããªãïŒ_ãšèŠæ±ããŠããã®ã¯ãã®ããã§ãã
ããããªãããID2 以éãJARM ã䜿ãå Žå㯠ID ããŒã¯ã³ã Detached Signature ãšããŠäœ¿ãå¿ èŠã¯ãããŸããããªããªããã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒçŸ€ã®å®å šãªã»ãããäžã€ã® JWT ã«ãŸãšããããããã§ãã
Part 2: èªå¯ãµãŒããŒã«å¯ŸããèŠæ±äºé
Part 2 ã®ã5.2.2. Authorization serverãã«ãèªå¯ãµãŒããŒã«å¯ŸããèŠæ±äºé ãåæãããŠããŸãã
| Part 2: 5.2.2. Authorization server, 1. |
|---|
shall require a JWS signed JWT request object passed by value with the request parameter or by reference with the request_uri parameter; |
request ãŸã㯠request_uri ãã©ã¡ãŒã¿ãŒã§çœ²åæžã¿ãªã¯ãšã¹ããªããžã§ã¯ããèŠæ±ããªããã°ãªããªãã |
request ãš request_uri 㯠OIDC Core ã®ã6. Passing Request Parameters as JWTsãã§å®çŸ©ãããŠãããã©ã¡ãŒã¿ãŒã§ãããããã䜿ããšãã¯ããŸãããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒçŸ€ãäžã€ã® JWT ã«ãŸãšããŸãããã® JWT ããªã¯ãšã¹ããªããžã§ã¯ããšåŒã³ãŸãããããŠããã®ãªã¯ãšã¹ããªããžã§ã¯ãã request ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã®å€ãšããŠçŽæ¥æå®ãããããããã¯ããã®ãªã¯ãšã¹ããªããžã§ã¯ãã眮ãããŠããå Žæã瀺ã URI ã request_uri ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã®å€ãšããŠæå®ããŸãã
OIDC Core ã§ã¯ãªã¯ãšã¹ããªããžã§ã¯ããžã®çœ²åã¯å¿ é ã§ã¯ãããŸãããäžæ¹ãFAPI Part 2 ã§ã¯ãªã¯ãšã¹ããªããžã§ã¯ãã«çœ²åãå¿ èŠãšãããŠããŸãããªã¯ãšã¹ããªããžã§ã¯ãã«çœ²åãã€ããŠããã°ãèªå¯ãµãŒããŒã¯ãã®çœ²åãæ€èšŒããããšã§ãã¯ã©ã€ã¢ã³ãããéãããŠãããªã¯ãšã¹ããã©ã¡ãŒã¿ãŒçŸ€ãæå ã«å±ããŸã§ã®éã«æ¹ç«ãããŠããªãããšã確èªã§ããŸãã
æ£çŽã«èšãã°ãïŒä»ãšãªã£ãŠã¯ããäœå¹Žãåã®è©±ã«ãªããŸããïŒFAPI ã®ä»æ§æžãèªãã ãšãã«äžçªé©ããã®ããã®èŠå®ã§ãããªããªãããªã¯ãšã¹ããªããžã§ã¯ãããµããŒãããããã®èªå¯ãµãŒããŒåŽã®å®è£ ããçµéšäžããªã倧å€ãªããšãç¥ã£ãŠããããã§ãïŒåèâããªã¯ãšã¹ããªããžã§ã¯ãåŠçæé ãïŒãå®è£ ã倧å€ãªããšãšãOIDC Core ã§ãªãã·ã§ãã«æ©èœæ±ããããŠããããšããããOpenID Connect 察å¿ã謳ããªãããªã¯ãšã¹ããªããžã§ã¯ãããµããŒãããŠããªãèªå¯ãµãŒããŒã®å®è£ ã¯å€ãã§ããFAPI Part 2 ã«å¯Ÿå¿ããããã«ã¯ããªã¯ãšã¹ããªããžã§ã¯ãããµããŒãããèªå¯ãµãŒããŒã®å®è£ ã䜿ããªããã°ãªããªãããšã«æ³šæããŠãã ããã
| Part 2: 5.2.2. Authorization server, 2. |
|---|
shall require
|
|
ID ããŒã¯ã³ã Detached Signature ãšããŠçšãããããã¢ããªã±ãŒã·ã§ã³ã¬ã€ã€ãŒã§ ID ããŒã¯ã³ãå¿
èŠãšããŠããªããŠããID ããŒã¯ã³ã®çºè¡ãèŠæ±ããããã« id_token ã response_type ãã©ã¡ãŒã¿ãŒã«å«ããªããã°ãªããŸããã
ããããå
ã«è¿°ã¹ãããã«ãJARM ã䜿ãããå Žåãresponse_type ãã©ã¡ãŒã¿ãŒã« id_token ãå«ããªããŠãããã§ãããJARM ã䜿ãããå Žåããšã¯ãå
·äœçã«ã¯ãresponse_mode ãã©ã¡ãŒã¿ãŒãèªå¯ãªã¯ãšã¹ãã«å«ãŸãããã®å€ããquery.jwtãfragment.jwtãform_post.jwtãjwt ã®ããããã§ããå ŽåããããŸãã
è£è¶³ïŒID2 ã§ã¯ãJARM ã䜿ãããªãå Žåãresponse_type 㯠code id_token ãŸã㯠code id_token token ã®ã©ã¡ããããšãããŠããŸãããããããæçµçã§ code id_token token ã¯åé€ãããŸããã
| Part 2: 5.2.2. Authorization server, 3. |
|---|
| (moved to 5.2.2.1); |
| (5.2.2.1 ãžç§»å) |
| Part 2: 5.2.2. Authorization server, 4. |
|---|
| (moved to 5.2.2.1); |
| (5.2.2.1 ãžç§»å) |
| Part 2: 5.2.2. Authorization server, 5. |
|---|
| shall only issue sender-constrained access tokens; |
| çºè¡ããã¢ã¯ã»ã¹ããŒã¯ã³ã¯éä¿¡è éå®ã§ãªããã°ãªããªãã |
ID2 ã§ã¯ããã®èŠæ±äºé 㯠"shall only issue authorization code, access token, and refresh token that are holder of key bound;"ïŒHoK 察å¿ã®èªå¯ã³ãŒããã¢ã¯ã»ã¹ããŒã¯ã³ããªãã¬ãã·ã¥ããŒã¯ã³ã®ã¿ãçºè¡ããããšïŒ ã§ããããããããã®èŠæ±äºé ã¯éçŸå®çã§ãã£ããããçŸåšã®ãã®ã«å€æŽãããŸããããèå³ãããã° FAPI Issue 202 ã®è°è«ãåç §ããŠãã ããã
| Part 2: 5.2.2. Authorization server, 6. |
|---|
| shall support MTLS as mechanism for constraining the legitimate senders of access tokens; |
| ã¢ã¯ã»ã¹ããŒã¯ã³ã®éä¿¡è ãæ£åœãªè ã®ã¿ã«å¶éããä»çµã¿ãšã㊠MTLS ããµããŒãããªããã°ãªããªãã |
ID2 ã§ã¯ããã®èŠæ±äºé 㯠_"shall support [OAUTB] or [MTLS] as a holder of key mechanism;"ïŒholder of key mechanism ãšã㊠Token Binding ããã㯠MTLS ããµããŒãããããšïŒ_ãšãããã®ã§ãããããããå°æ¥çã«å®è£ ãããèŠèŸŒã¿ããªãããšãããOAUTBïŒToken BindingïŒã¯æçµçããåé€ãããŸããã
| Part 2: 5.2.2. Authorization server, 7. |
|---|
| (withdrawn); |
| (æ€å) |
| Part 2: 5.2.2. Authorization server, 8. |
|---|
| (moved to 5.2.2.1); |
| (5.2.2.1 ãžç§»å) |
| Part 2: 5.2.2. Authorization server, 9. |
|---|
| (moved to 5.2.2.1); |
| (5.2.2.1 ãžç§»å) |
| Part 2: 5.2.2. Authorization server, 10. |
|---|
shall only use the parameters included in the signed request object passed via the request or request_uri parameter; |
| ãªã¯ãšã¹ããªããžã§ã¯ãå ã®ãã©ã¡ãŒã¿ãŒã®ã¿ã䜿çšããããšã |
ID2 ã§ã¯ããã®èŠæ±äºé
㯠_"shall require that all parameters are present inside the signed request object passed in the request or request_uri parameter;"ïŒå
šãŠã®ãã©ã¡ãŒã¿ãŒã¯ãªã¯ãšã¹ããªããžã§ã¯ãå
ã«ååšããªããã°ãªããªãïŒ_ãšãããã®ã§ããã衚çŸã¯å€æŽãããŸããããèŠç¹ã¯åãã§ããFAPI Part 2 ã«æºæ ããããã«ã¯ãå
šãŠã®ãã©ã¡ãŒã¿ãŒããªã¯ãšã¹ããªããžã§ã¯ãã«å«ãŸããŠããªããã°ãªããŸããã
ããã¯ãOIDC Core ãšã¯ç°ãªããŸããOIDC Core ã§ã¯ããã©ã¡ãŒã¿ãŒçŸ€ã¯ãªã¯ãšã¹ããªããžã§ã¯ãã®äžã«ãå€ã«ã眮ãããšãã§ãããããã¯ããŒãžãããŸãã
| Part 2: 5.2.2. Authorization server, 11. |
|---|
| may support the pushed authorization request endpoint as described in PAR; |
| Pushed Authorization Request ãšã³ããã€ã³ãããµããŒãããŠãããã |
Pushed Authorization Request ãšã³ããã€ã³ãïŒä»¥é PAR ãšã³ããã€ã³ãïŒã¯ OAuth 2.0 Pushed Authorization Requests (PAR) ã§å®çŸ©ãããŠããæ°ãããšã³ããã€ã³ãã§ããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ããã®ãšã³ããã€ã³ãã§èªå¯ãªã¯ãšã¹ããç»é²ããç»é²ããèªå¯ãªã¯ãšã¹ãã衚ããªã¯ãšã¹ã URI ãååŸããããšãã§ããŸãããã®åŸãèªå¯ãšã³ããã€ã³ãã«èªå¯ãªã¯ãšã¹ããæããéãrequest_uri ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã®å€ãšããŠçºè¡ããããªã¯ãšã¹ã URI ãæå®ããŸãã
ãå³è§£ PAR : OAuth 2.0 Pushed Authorization Requestsãããæç²ããæ¬¡ã®å³ã¯ãPAR ãšã³ããã€ã³ããå©çšããèªå¯ã³ãŒããããŒã瀺ããŠããŸãã
è£è¶³ïŒèªå¯ãªã¯ãšã¹ããäºåç»é²ãããšããã¢ã€ãã£ã¢ã¯ ID2 ã® Section 7 ã«ãããŸããããã®ã»ã¯ã·ã§ã³ã§ã¯ãäºåç»é²çšã®ãšã³ããã€ã³ããããªã¯ãšã¹ããªããžã§ã¯ããšã³ããã€ã³ãããšåŒãã§ããŸãããPAR 仿§ã¯ãã®ã¢ã€ãã£ã¢ã«åºã¥ããŠçå®ãããŸãããçµæãšããŠãåœè©²ã»ã¯ã·ã§ã³ã¯æçµçã§åé€ãããŸããã
| Part 2: 5.2.2. Authorization server, 12. |
|---|
| (withdrawn); |
| (æ€å) |
| Part 2: 5.2.2. Authorization server, 13. |
|---|
shall require the request object to contain an exp claim that has a lifetime of no longer than 60 minutes after the nbf claim; |
ãªã¯ãšã¹ããªããžã§ã¯ã㯠exp ã¯ã¬ãŒã ãå«ãŸãªããã°ãªãããnbf ã¯ã¬ãŒã åŸã®çåæéã 60 åãè¶
ããŠã¯ãªããªãã |
OIDC Core ã§ã¯ããªã¯ãšã¹ããªããžã§ã¯ãã« exp ãå«ããããšã¯èŠæ±ãããŠããŸãããäžæ¹ãFAPI Part 2 ã§ã¯ exp ã¯ã¬ãŒã ãå¿
é ãšãªããŸãã
ããã«ãæçµçã§ãnbf ã¯ã¬ãŒã åŸã®çåæéã 60 åãè¶
ããŠã¯ãªããªãããšããèŠæ±äºé
ã远å ãããŸããããã®ãããnbf ã¯ã¬ãŒã ãå¿
é ãšãªããŸããã
ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®èŠç¹ããèŠããšãæ°ããèŠæ±äºé
ã¯ç Žå£ç倿Žã§ãããšããã®ã¯ãèªå¯ãªã¯ãšã¹ãã®ãªã¯ãšã¹ããªããžã§ã¯ãã nbf ã¯ã¬ãŒã ãå«ãã§ããªãå Žåãèªå¯ãµãŒããŒããªã¯ãšã¹ããæåŠããããã«ãªãããã§ããäºå®ãå
¬åŒã®äºææ§ãã¹ãã¹ã€ãŒãã®ããã€ãã®ãã¹ãããæ°ããèŠæ±äºé
ã®ããã«æŽæ°ãå¿
èŠãšãªããŸããã
èªå¯ãµãŒããŒã®å®è£
ã«ãã£ãŠã¯ããã®ç Žå£ç倿Žã®è¡æãåãããä»çµã¿ãæäŸããã§ããããäŸãã° Authlete ã¯ãèªå¯ãªã¯ãšã¹ãã FAPI Part 2 ãªã¯ãšã¹ããšå€å®ãããå Žåã§ã nbf ã¯ã¬ãŒã ãä»»æé
ç®ãšããŠåŠçããããã®ãã©ã°ãService.nbfOptionalããå®çŸ©ããŸããããã®ãã©ã°ã¯ Service Owner ã³ã³ãœãŒã«ã®ãnbf ã¯ã¬ãŒã ãã§å€æŽããããšãã§ããŸãã
| Part 2: 5.2.2. Authorization server, 14. |
|---|
shall authenticate the confidential client using one of the following methods (this overrides FAPI Security Profile 1.0 - Part 1: clause 5.2.2-4):
|
ã¯ã©ã€ã¢ã³ãèªèšŒã¯æ¬¡ã®ã©ã¡ããïŒãã㯠Part 1 ã®èŠæ±äºé
ãäžæžãïŒïŒ
|
Part 1 ãšç°ãªããPart 2 ã§ã¯ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒãšã㊠client_secret_jwt ã䜿ããªãã®ã§æ³šæããŠãã ããã
| ã¯ã©ã€ã¢ã³ãèªèšŒæ¹åŒ | Part 1 | Part 2 |
|---|---|---|
client_secret_basic |
NG | NG |
client_secret_post |
NG | NG |
client_secret_jwt |
OK | NG |
private_key_jwt |
OK | OK |
tls_client_auth |
OK | OK |
self_signed_tls_client_auth |
OK | OK |
| Part 2: 5.2.2. Authorization server, 15. |
|---|
shall require the aud claim in the request object to be, or to be an array containing, the OP's Issuer Identifier URL; |
ãªã¯ãšã¹ããªããžã§ã¯ãã® aud ã¯ãèªå¯ãµãŒããŒã®çºè¡è
èå¥åãã®ãã®ããŸãã¯ãããå«ãé
åã§ãªããã°ãªããªãã |
ãã®èŠæ±äºé
ã¯æçµçã§è¿œå ãããŸãããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ãªã¯ãšã¹ããªããžã§ã¯ãã« aud ã¯ã¬ãŒã ãå
¥ããªããã°ãªããŸããããã£ã¹ã«ããªãŒããã¥ã¡ã³ãå
ã® issuer ã¡ã¿ããŒã¿ã®å€ãèªå¯ãµãŒããŒã®çºè¡è
èå¥åãšãªããŸããïŒåèïŒOpenID Connect Discovery 1.0, 3. OpenID Provider MetadataïŒ
| Part 2: 5.2.2. Authorization server, 16. |
|---|
| shall not support public clients; |
| Public ã¯ã©ã€ã¢ã³ãããµããŒãããŠã¯ãªããªãã |
ãã®èŠæ±äºé ã¯æçµçã§è¿œå ãããŸãããã以åã® FAPI ããŒãžã§ã³ã®æç¹ã§ FAPI 2 ã®æèã§ Public ã¯ã©ã€ã¢ã³ãããµããŒãããããšã¯è«ççã«äžå¯èœã ã£ããšèšãããŠããŸãã
| Part 2: 5.2.2. Authorization server, 17. |
|---|
shall require the request object to contain an nbf claim that is no longer than 60 minutes in the past; and |
ãªã¯ãšã¹ããªããžã§ã¯ã㯠nbf ã¯ã¬ãŒã ãå«ãŸãªããã°ãªããããã㯠60 åãè¶
ããéå»ããããŠããŠã¯ãããªãã |
13 çªç®ã®èŠå®ã§ nbf ã¯ã¬ãŒã ãå¿
é ã§ããããšã瀺åãããŠããŸãããããã® 17 çªç®ã®èŠå®ã§ãããæç¢ºã«è¿°ã¹ãããŠããŸãã
| Part 2: 5.2.2. Authorization server, 18. |
|---|
shall require PAR requests, if supported, to use PKCE (RFC7636) with S256 as the code challenge method. |
PAR ãªã¯ãšã¹ãã§ã¯ãã³ãŒããã£ã¬ã³ãžã¡ãœããã S256 ãšãã PKCE ã®äœ¿çšãèŠæ±ããªããã°ãªããªãã |
ããã§ PAR 㯠OAuth 2.0 Pushed Authorization Requests ã®ããšã§ãã
FAPI ã®ä»¥åã®ããŒãžã§ã³ã§ã¯ãPart 2 ã®åèã«ãã㊠PKCE ãèŠæ±ãããã®ã¯ãã¯ã©ã€ã¢ã³ãã¿ã€ãã PUBLIC ã®å Žåã®ã¿ãã§ãããããããã®èŠæ±äºé ã¯æçµçã§ãPAR ã䜿çšãããå Žåã®ã¿ããšå€æŽãããŸããã
| Part 2: 5.2.2.1. ID Token as detached signature |
|---|
In addition, if the response_type value code id_token is used, the authorization server. |
å ããŠãresponse_type ã code id_token ã®å Žåãèªå¯ãµãŒããŒã¯ |
Section 5.2.2.1 㯠ID ããŒã¯ã³ã Detached Signature ãšããŠäœ¿çšãããå Žåã®è¿œå èŠæ±äºé ãåæããŠããŸãã
| Part 2: 5.2.2.1. ID Token as detached signature, 1. |
|---|
| shall support OIDC; |
| OIDC ããµããŒãããªããã°ãªããªãã |
| Part 2: 5.2.2.1. ID Token as detached signature, 2. |
|---|
| shall support signed ID Tokens; |
| 眲åããã ID ããŒã¯ã³ããµããŒãããªããã°ãªããªãã |
| Part 2: 5.2.2.1. ID Token as detached signature, 3. |
|---|
| should support signed and encrypted ID Tokens; |
| 眲åããããã€æå·åããã ID ããŒã¯ã³ããµããŒããã¹ãã§ããã |
OIDC ã®èгç¹ããã¯ããããã®èŠæ±äºé ã¯æ°ãããã®ã§ã¯ãããŸãããå®çŸ©äžãID ããŒã¯ã³ã¯åžžã«çœ²åãããŠããŸããID ããŒã¯ã³ã®æå·åãµããŒãã¯ä»»æã§ãã
| Part 2: 5.2.2.1. ID Token as detached signature, 4. |
|---|
| shall return ID Token as a detached signature to the authorization response; |
| Detached Signature ãšã㊠ID ããŒã¯ã³ãçºè¡ããªããã°ãªããªãã |
ID ããŒã¯ã³ãçºè¡ããªããã°ãªããªããšæžãããŠããŸãããSection 5.2.2.1 ã®åé ã«æžãããŠããæ¡ä»¶ã«ãã response_type ã« id_token ãå«ãŸããŠããã®ã§ãå¿
ç¶çã« ID ããŒã¯ã³ãçºè¡ãããŸãããã®ãããæ¬èŠå®ã¯ååšããå¿
èŠã¯ãããŸããã
| Part 2: 5.2.2.1. ID Token as detached signature, 5. |
|---|
shall include state hash, s_hash, in the ID Token to protect the state value if the client supplied a value for state. s_hash may be omitted from the ID Token returned from the Token Endpoint when s_hash is present in the ID Token returned from the Authorization Endpoint; and |
ID ããŒã¯ã³ã« s_hash ãå«ããªããã°ãªããªãããã ããèªå¯ãšã³ããã€ã³ãããçºè¡ããã ID ããŒã¯ã³ã« s_hash ãå«ãŸããŠããã°ãããŒã¯ã³ãšã³ããã€ã³ãããçºè¡ããã ID ããŒã¯ã³ã® s_hash ã¯çç¥å¯èœã |
JARM ã䜿ãããŠããå Žåã¯ããã®èŠå®ã«åŸãå¿ èŠã¯ãããŸããã
| Part 2: 5.2.2.1. ID Token as detached signature, 6. |
|---|
| should not return sensitive PII in the ID Token in the authorization response, but if it needs to, then it should encrypt the ID Token. |
| èªå¯ã¬ã¹ãã³ã¹å ã® ID ããŒã¯ã³ã«éèŠãª PII ãå ¥ããã¹ãã§ã¯ãªããããã®å¿ èŠãããå Žå㯠ID ããŒã¯ã³ãæå·åãã¹ãã |
PII 㯠"Personally Identifiable Information" ã®ç¥ã§ããå人ãç¹å®ããããšãå¯èœãªæ å ±ããæå³ããŸãã
ID ããŒã¯ã³æå·åã®æ©èœã¯ OIDC Core ã®æããååšããŸããID ããŒã¯ã³ã®æå·åã¢ã«ãŽãªãºã ãé察称åã§ããå Žåãèªå¯ãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã®å
¬ééµãèªèº«ã®ããŒã¿ããŒã¹ã§çŽæ¥ç®¡çãããããããã¯ã¯ã©ã€ã¢ã³ãã® jwks_uri ã¡ã¿ããŒã¿ãæãå Žæãã JWK Set ããã¥ã¡ã³ãããã§ããããŠããã®ããã¥ã¡ã³ãããå
¬ééµãåãåºããªããã°ãªããŸããã
ID ããŒã¯ã³ã眲åããéã¯ãèªå¯ãµãŒããŒãåãæ±ããªããã°ãªããªãã®ã¯ãµãŒããŒåŽã®éµã ãã§ãã
äžæ¹ãID ããŒã¯ã³æå·åããµããŒãããããã«ã¯ãèªå¯ãµãŒããŒã¯ã¯ã©ã€ã¢ã³ãåŽã®éµãåãæ±ããªããã°ãªããŸããã
ããããID ããŒã¯ã³ã®æå·åããµããŒãããŠããèªå¯ãµãŒããŒã®å®è£ ãå°ãªãçç±ã§ãã
| Part 2: 5.2.2.2. JARM |
|---|
In addition, if the response_type value code is used in conjunction with the response_mode value jwt, the authorization server |
å ããŠãresponse_type=code ã response_mode=jwt ãšäœµããŠäœ¿çšãããå Žåãèªå¯ãµãŒããŒã¯ïŒ |
| Part 2: 5.2.2.2. JARM, 1. |
|---|
| shall create JWT-secured authorization responses as specified in JARM, Section 4.3. |
| JARM 仿§ Section 4.3 ã§ç€ºãããŠããéãã« JWT ã§ä¿è·ãããèªå¯ã¬ã¹ãã³ã¹ãçæããªããã°ãªããªãã |
ãã®èŠå®ã¯ FAPI åºæã®èŠæ±äºé ã§ã¯ãããŸãããåã«ãJARM å®è£ 㯠JARM 仿§ãå®ããŠããããã«åäœãã¹ããšèšã£ãŠããã«éããŸããã
response_type ã id_token ãå«ãã§ããªãå Žåãèªå¯ã¬ã¹ãã³ã¹ã¯ ID ããŒã¯ã³ãå«ã¿ãŸããããã®ãããID ããŒã¯ã³ã Detached Signature ãšããŠçšããããšã¯ã§ããŸããããã®å Žåãèªå¯ã¬ã¹ãã³ã¹ãæ¹ãããããŠããªãããšãä¿èšŒãããããJARM ã䜿ããªããã°ãªããŸããã
Part 2: Confidential ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé
FAPI æçµçã§ãPart 2 ã® Section 5.2.3 ã®ã¿ã€ãã«ã¯ãPublic clientããããConfidential clientããžãšå€æŽãããŸããã
| Part 2: 5.2.3. Confidential client, 1. |
|---|
| shall support MTLS as mechanism for sender-constrained access tokens; |
| éä¿¡è éå®ã¢ã¯ã»ã¹ããŒã¯ã³ã®ä»çµã¿ãšã㊠MTLS ããµããŒãããªããã°ãªããªãã |
ã€ãŸããèªå¯ãµãŒããŒã¯ RFC 8705 ã® Section 3 ã§å®çŸ©ãããŠãããèšŒææžã«çŽä»ããã¢ã¯ã»ã¹ããŒã¯ã³ããçºè¡ããªããã°ãªããŸããã
| Part 2: 5.2.3. Confidential client, 2. |
|---|
shall include the request or request_uri parameter as defined in Section 6 of OIDC in the authentication request; |
èªèšŒãªã¯ãšã¹ãã« request ãŸã㯠request_uri ãå«ããªããã°ãªããªãã |
èªå¯ãµãŒããŒã«å¯ŸããèŠæ±äºé
ã«ãæããããŠããããã«ãrequest ãã©ã¡ãŒã¿ãŒããã㯠request_uri ãã©ã¡ãŒã¿ãŒãå«ãŸããŠããªããã°ãªããŸãããOIDC Core 㯠_"If one of these parameters is used, the other MUST NOT be used in the same request."ïŒã©ã¡ããäžæ¹ã®ãã©ã¡ãŒã¿ãŒãã䜿ã£ãŠã¯ãªããªãïŒ_ãšèšã£ãŠããç¹ã«ã¯æ³šæããŠãã ããã
| Part 2: 5.2.3. Confidential client, 3. |
|---|
| shall ensure the Authorization Server has authenticated the user to an appropriate Level of Assurance for the client's intended purpose; |
| é©å㪠LoA ã§ãŠãŒã¶ãŒèªèšŒããããªããªããã°ãªããªãã |
ãã®èŠå®ã¯åã«ããŠãŒã¶ãŒèªèšŒãé©åã«è¡ããªããã°ãªããªããšèšã£ãŠããã«éããŸãããéå»ã«ãã®èŠå®å
ã«å«ãŸããŠãã _"by requesting the acr claim as an essential claim"ïŒacr ã¯ã¬ãŒã ãå¿
é ã¯ã¬ãŒã ãšããŠèŠæ±ããããšã«ããïŒ_ãšããæèšã¯ FAPI æçµçã§åé€ãããŸããã
ID2 ã§ã¯ããã®èŠå®ã¯ _"shall request user authentication at LoA 3 or greater by requesting the `acr` claim as an essential claim as defined in section 5.5.1.1 of [OIDC];"ïŒãŠãŒã¶ãŒèªèšŒã« LoA 3 以äžãèŠæ±ããªããã°ãªããªããããã¯ã`acr` ã¯ã¬ãŒã ãå¿
é ãšããŠèŠæ±ããããšã«ããè¡ãïŒ_ãšãããã®ã§ããã
`acr` ã¯ã¬ãŒã ã«éãããã¯ã¬ãŒã ãå¿
é ãšããŠèŠæ±ããå ŽåãåçŽãª `acr_values` ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã¯äœ¿ããŸããããããã«ã`claims` ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãçšããŠããã®å€ãšã㊠JSON ãæž¡ãããã® JSON å
ã®æ·±ããšããã« `{"essential":true}` ãšæžããªããã°ãªããŸãããäžèšã¯ã`urn:mace:incommon:iap:silver` ãšãã ACR ãå¿
é ãšããŠèŠæ±ããããã« `claims` ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã«æå®ãã¹ã JSON ã§ãã
```json
{
"id_token":
{
"acr":
{
"essential": true,
"values": ["urn:mace:incommon:iap:silver"]
}
}
}
```
ãšããã§ããã®èŠå®ã¯ãå®ã¯ãFAPI Part 2 ãããŒã¹ã«ããŠãã[è±åœãªãŒãã³ãã³ãã³ã°](https://www.openbanking.org.uk/)ãããã¡ã€ã«ã§ã¯ãç·©ããããŠããŸããessential ãšããŠèŠæ±ããªããŠãããã®ã§ããããããæå³çã«ããããããã§ã¯ãªãããªãŒãã³ãã³ãã³ã°ãããã¡ã€ã«äœææã«åç
§ããïŒã³ããŒïŒããŒã¹ãå
ãšãªã£ãïŒFAPI 仿§ã®ã¹ãããã·ã§ããã« _"by requesting the `acr` claim as an essential claim"_ ãšããéšåãå
¥ã£ãŠããªãã£ãããã ãšæãããŸãã
FinTechLabs.io 瀟ãäœæããŠããå
¬åŒ FAPI äºææ§ãã¹ãã¹ã€ãŒãã«ã¯ããªãŒãã³ãã³ãã³ã°ãããã¡ã€ã«ã®ãã¹ããå
¥ã£ãŠããŸãããã¹ãã¹ã€ãŒãèªäœã®ãã¹ãããããããFinTechLabs.io 瀟㯠Authlete ã䜿ã£ãŠããŸããã圌ãããªãŒãã³ãã³ãã³ã°ãããã¡ã€ã«ã®ãã¹ããå®è¡ãããšããåé¡ãèµ·ããŸãããAuthlete ã®å®è£
ã¯å³å¯ã« FAPI ã«æºæ ããŠãããããã`acr` ã¯ã¬ãŒã ã essential ãšããŠèŠæ±ãããŠããªãããšãããšã©ãŒãå ±åããã®ã§ããããªãŒãã³ãã³ãã³ã°ãããã¡ã€ã«ã®æèã§ã¯ãããããšã©ãŒãšèŠãªããã«ã¹ã«ãŒããŠã»ããã£ãã®ã§ãã
ããªãŒãã³ãã³ãã³ã°ãããã¡ã€ã«ã®ä»æ§ã®ã»ããä¿®æ£ãã¹ãïŒææ°ã® FAPI 仿§ã«åãããã¹ãïŒããšããã®ã¯çã£åœãªæèŠãªã®ã§ããããå
¬åŒãã¹ãã¹ã€ãŒãã§ããããšã©ãŒãšããŠåŒŸããŠããŸããšãçŸåšã®è±åœãªãŒãã³ãã³ãã³ã°ã®å®è£
å
šãŠãããšããšãå
¬åŒãã¹ãããã¹ã§ããªããªããããã¯ææçã«å³ããããšãã話ãåºããããAuthlete ã®ã»ãã«æãå
¥ããããšã«ããŸãããAuthlete ã« FAPI ã«å ããOPEN_BANKING ãšãããããã¡ã€ã«ãçšæãããã OPEN_BANKING ãæå¹ã«ãªã£ãŠããå ŽåãFAPI Part 2 ã®æèã§ãæ¢ããŠã`acr` ã¯ã¬ãŒã ã essential ãšããŠèŠæ±ãããŠããããšãããã§ãã¯ããªãããã«ããŸããã
```java
private boolean isAcrEssentialRequired()
{
boolean required = false;
required |= mFapiRequirement.isAcrEssentialRequired();
// Open Banking Profile (OBP) is based on FAPI, but the specification
// does not require that the 'acr' claim be requested as essential.
// We here intentionally disable the check for the value of 'essential'
// when OBP is enabled because otherwise the official conformance test
// suite for OBP would fail.
if (isOpenBankingProfileEnabled())
{
required = false;
}
return required;
}
```
ãã®ãããªçµç·¯ããããAuthlete ã¯è±åœãªãŒãã³ãã³ãã³ã°ã®ã»ãã¥ãªãã£ãŒãããã¡ã€ã«ã«æºæ ãã補åãšããŠã[Open Banking Security Profile Conformance](https://openbanking.atlassian.net/wiki/spaces/DZ/pages/126321042/Open+Banking+Security+Profile+Conformance)ãããŒãžã«ãªã¹ããããŸããã

ãã®è©±ã«ã€ããŠã¯ãåç»ã[OAuth & OIDC ååŒ·äŒ èªå¯ãªã¯ãšã¹ãç·š by #authleteâ - 7. ãŠãŒã¶ãŒã®èå¥ã»èªèšŒ](https://www.youtube.com/watch?v=u311A8ZYZpw&list=PLxDcFnLrbxvZs5eWfxDFdPjrzZ2R7h2Uw&index=9)ãã® [14 å 36 ç§](https://www.youtube.com/watch?v=u311A8ZYZpw&list=PLxDcFnLrbxvZs5eWfxDFdPjrzZ2R7h2Uw&t=876s)ããããã話ããŠããŸãã®ã§ããèå³ãããã°ã芧ãã ããã
~~~ æŽå²æ¯ãè¿ãçµãã ~~~
ãã£ãã OPEN_BANKING ãã©ã°ãçšæãããã®ã®ã_"by requesting the `acr` claim as an essential claim"_ ãšããæèšã FAPI æçµçã§åé€ããããããAuthlete 㯠ACR ãå¿
é ã¯ã¬ãŒã ãšããŠèŠæ±ãããŠãããã©ããããã§ãã¯ããããšããããŸããããã®ãããOPEN_BANKING ãã©ã°ã¯ä»ãšãªã£ãŠã¯æå³ããªããªã£ãŠããŸããŸããã
|Part 2: 5.2.3. Confidential client, 4.|
|:--|
|(moved to 5.2.3.1);|
|(5.2.3.1 ã«ç§»å)|
|Part 2: 5.2.3. Confidential client, 5.|
|:--|
|(withdrawn);|
|(æ€å)|
|Part 2: 5.2.3. Confidential client, 6.|
|:--|
|(withdrawn);|
|(æ€å)|
|Part 2: 5.2.3. Confidential client, 7.|
|:--|
|(moved to 5.2.3.1);|
|(5.2.3.1 ã«ç§»å)|
|Part 2: 5.2.3. Confidential client, 8.|
|:--|
|shall send all parameters inside the authorization request's signed request object|
|ãªã¯ãšã¹ããªããžã§ã¯ãå
ã«å
šãŠã®ãã©ã¡ãŒã¿ãŒãå
¥ããããšã|
|Part 2: 5.2.3. Confidential client, 9.|
|:--|
|shall additionally send duplicates of the `response_type`, `client_id`, and `scope` parameters/values using the OAuth 2.0 request syntax as required by Section 6.1 of the OpenID Connect specification if not using PAR;|
|PAR ã䜿ãããŠããªããã°ãOAuth 仿§ã«é©åããããã«ã`response_type`ã`client_id`ã`scope` ãéè€ããŠéããªããã°ãªããªãã|
ãªã¯ãšã¹ããªããžã§ã¯ãã«å
šãŠã®ãã©ã¡ãŒã¿ãŒãå
¥ããã®ã§ããã°ã`request` ããã㯠`request_uri` ãã©ã¡ãŒã¿ãŒãäžã€ããã°ååã§ããããããOAuth 2.0 / OIDC Core ã§å¿
é ãšãããŠãããã©ã¡ãŒã¿ãŒïŒäŸãã° `client_id` ã `response_type`ïŒãçç¥ããŠããŸããšããã®ãªã¯ãšã¹ã㯠OAuth 2.0 / OIDC Core æºæ ã§ã¯ãªããªã£ãŠããŸããŸãããã®ãããOAuth 2.0 / OIDC Core ã§å¿
é ãšãããŠãããã©ã¡ãŒã¿ãŒã¯ããªã¯ãšã¹ããªããžã§ã¯ãå
ã«æ¢ã«å
¥ããŠãããšããŠãããªã¯ãšã¹ããªããžã§ã¯ãå€éšã«ãéè€ããŠçœ®ããªããã°ãªããŸããã
FAPI æçµçã§ã¯ã_"if not using PAR"ïŒPAR ã䜿ãããŠããªããã°ïŒ_ãšããæ¡ä»¶ã远å ããŸãããããã¯ãéã«èšããšãPAR ã䜿ãããŠããã°ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒçŸ€ã¯ OAuth 2.0 / OIDC ã«æºæ ããå¿
èŠã¯ãªããšããããšã瀺åããŠããŸãããã®éäºææ§ã¯ **[JWT Secured Authorization Request](https://datatracker.ietf.org/doc/draft-ietf-oauth-jwsreq/)** (**JAR**) ããæ¥ãŠããŸãã詳现ã¯ã**[JAR (JWT Secured Authorization Request) ã«é¢ããå®è£
è
ã®èŠæž](https://qiita.com/TakahikoKawasaki/items/d52ce91866ae0dcc2ff7)**ãããåç
§ãã ããã
|Part 2: 5.2.3. Confidential client, 10.|
|:--|
|shall send the `aud` claim in the request object as the OP's Issuer Identifier URL;|
|ãªã¯ãšã¹ããªããžã§ã¯ãã« `aud` ã¯ã¬ãŒã ãå¿
é ãå€ã¯èªå¯ãµãŒããŒã®çºè¡è
èå¥åã|
|Part 2: 5.2.3. Confidential client, 11.|
|:--|
|shall send the `exp` claim in the request object that has a lifetime of no longer than 60 minutes;|
|ãªã¯ãšã¹ããªããžã§ã¯ãã« `exp` ã¯ã¬ãŒã ãå¿
é ããªã¯ãšã¹ããªããžã§ã¯ãã®çåæé㯠60 åãè¶
ããŠã¯ãªããªãã|
äžèšäºã€ã®èŠå®ã«ã€ããŠã¯ãåæ§ã®ãã®ã Section 5.2.2 ã«ããããŸãã
|Part 2: 5.2.3. Confidential client, 12.|
|:--|
|(moved to 5.2.3.1);|
|(5.2.3.1 ãžç§»å)|
|Part 2: 5.2.3. Confidential client, 13.|
|:--|
|(moved to 5.2.3.1);|
|(5.2.3.1 ãžç§»å)|
|Part 2: 5.2.3. Confidential client, 14.|
|:--|
|shall send a `nbf` claim in the request object;|
|ãªã¯ãšã¹ããªããžã§ã¯ãã« `nbf` ã¯ã¬ãŒã ãå¿
é ã|
ãã®èŠå®ã«ã€ããŠã Section 5.2.2 ã«åããã®ããããŸãã
|Part 2: 5.2.3. Confidential client, 15.|
|:--|
|shall use RFC7636 with `S256` as the code challenge method if using PAR; and|
|PAR ã䜿çšããŠããå Žåãã³ãŒããã£ã¬ã³ãžã¡ãœããã `S256` ãšããRFC 7636 ã䜿ããªããã°ãªããªãã|
ã€ãŸããPAR ã䜿çšããŠããå Žåãèªå¯ãªã¯ãšã¹ã㯠`code_challenge_method=S256` ãå«ãŸãªããã°ãªããŸããã
|Part 2: 5.2.3. Confidential client, 16.|
|:--|
|shall additionally send a duplicate of the `client_id` parameter/value using the OAuth 2.0 request syntax to the authorization endpoint, as required by Section 5 of JAR, if using PAR.|
|PAR ã䜿çšããŠããå ŽåãJAR ã® Section 5 ã«åŸãã`client_id` ãéè€ããŠéããªããã°ãªããªãã|
PAR 仿§ã¯ããªã¯ãšã¹ããªããžã§ã¯ãã JAR ã®èŠåã«åã£ãŠåŠçããããšãèŠæ±ããŠããŸããJAR 仿§ã¯ `response_type` ãä»»æãã©ã¡ãŒã¿ãŒæ±ãã«ããããšã«ããŸãããã`client_id` ã¯å¿
é ã®ãŸãŸãšããŠããŸãã詳现ã¯ã[JAR (JWT Secured Authorization Request) ã«é¢ããå®è£
è
ã®èŠæž](https://qiita.com/TakahikoKawasaki/items/d52ce91866ae0dcc2ff7)ãããåç
§ãã ããã
|Part 2: 5.2.3.1. ID Token as detached signature|
|:--|
|In addition, if the `response_type` value `code id_token` is used, the client|
|å ããŠã`response_type` ã `code id_token` ã§ããã°ãã¯ã©ã€ã¢ã³ãã¯ïŒ|
Section 5.2.3.1 ã¯ãID ããŒã¯ã³ã Detached Signature ãšããŠäœ¿çšããéã®ã¯ã©ã€ã¢ã³ãã«å¯ŸããèŠæ±äºé
ãåæããŠããŸãã
|Part 2: 5.2.3.1. ID Token as detached signature, 1.|
|:--|
|shall include the value `openid` into the `scope` parameter in order to activate OIDC support;|
|`scope` ãã©ã¡ãŒã¿ãŒã« `openid` ãå«ããªããã°ãªããªãã|
ãã㯠FAPI åºæã®èŠæ±äºé
ã§ã¯ãããŸãããOIDC Core ã¯ãOIDC ãªã¯ãšã¹ã㯠`scope` ãã©ã¡ãŒã¿ãŒã« `openid` ãå«ãŸãªããã°ãªããªããšå®ããŠããŸãã詳现ã«ã€ããŠã¯ãOIDC Core ã® [Section 3.1.2.1](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest) ã«æžãããŠãã `scope` ãã©ã¡ãŒã¿ãŒã®èª¬æãåç
§ããŠãã ããã
|Part 2: 5.2.3.1. ID Token as detached signature, 2.|
|:--|
|shall require JWS signed ID Token be returned from endpoints;|
|åãšã³ããã€ã³ããã眲åããã ID ããŒã¯ã³ãè¿ããªããã°ãªããªãã|
OIDC ã®èгç¹ããã¯äœãæ°ããããšã¯ãããŸãããå®çŸ©äžãID ããŒã¯ã³ã¯åžžã«çœ²åãããŸãããŸãã`response_type` ã `code id_token` ã§ `scope` ã `openid` ãå«ãå Žåãèªå¯ãšã³ããã€ã³ããšããŒã¯ã³ãšã³ããã€ã³ãã®åæ¹ãšã ID ããŒã¯ã³ãè¿ããŸãããããã®ãšã³ããã€ã³ã矀ããäœãè¿ããããã«ã€ããŠã¯ãã[OpenID Connect å
šãããŒè§£èª¬](https://qiita.com/TakahikoKawasaki/items/4ee9b55db9f7ef352b47)ãããåç
§ãã ããã

|Part 2: 5.2.3.1. ID Token as detached signature, 3.|
|:--|
|shall verify that the authorization response was not tampered using ID Token as the detached signature;|
|ID ããŒã¯ã³ã Detached Signature ãšããŠäœ¿çšããèªå¯ã¬ã¹ãã³ã¹ãæ¹ãããããŠããªãããšãæ€èšŒããªããã°ãªããªãã|
ã€ãŸããã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ã¯ãID ããŒã¯ã³å€ã«ããã¬ã¹ãã³ã¹ãã©ã¡ãŒã¿ãŒçŸ€ã®ããã·ã¥å€ãèšç®ãããããã ID ããŒã¯ã³å
ã®ããã·ã¥å€çŸ€ãšæ¯èŒããªããã°ãªããŸããã
|Part 2: 5.2.3.1. ID Token as detached signature, 4.|
|:--|
|shall verify that `s_hash` value is equal to the value calculated from the `state` value in the authorization response in addition to all the requirements in 3.3.2.12 of OIDC; and<br/>NOTE: This enables the client to verify that the authorization response was not tampered with, using the ID Token as a detached signature.|
|`state` ãå
ã«èšç®ããå€ãš `s_hash` ã®å€ãäžèŽããããšãæ€èšŒããªããã°ãªããªãã|
ãã®èŠå®ã§ã¯ `state` ãš `s_hash` ã®çµã«ã€ããŠç¹å¥ã«èšåããŠããŸãããä»ã«ããã©ã¡ãŒã¿ãŒãšããã·ã¥å€ã®çµã¿åãããããããšã¯æ¢åºã®éãã§ãã
|Part 2: 5.2.3.1. ID Token as detached signature, 5.|
|:--|
|shall support both signed and signed & encrypted ID Tokens.|
|眲åããã ID ããŒã¯ã³ããã³ã眲åã»æå·åããã ID ããŒã¯ã³ã®åæ¹ããµããŒãããªããã°ãªããªãã|
å®çŸ©äžãID ããŒã¯ã³ã¯åžžã«çœ²åãããŸããID ããŒã¯ã³ãæå·åãããå Žåã眲åãšæå·åã®é çªã¯ãã眲åããŠããæå·åãã§ããçµæãšããŠãæå·åããã ID ããŒã¯ã³ã¯äžå³ã瀺ããããªãNested JWTãã«ãªããŸãã

ID ããŒã¯ã³ã®æ§é ã®è©³çްã«ã€ããŠã¯ãã[IDããŒã¯ã³ãåããã° OpenID Connect ãåãã](https://qiita.com/TakahikoKawasaki/items/8f0e422c7edd2d220e06)ãããåç
§ãã ããã
|Part 2: 5.2.3.2. JARM|
|:--|
|In addition, if the `response_type` value `code` is used in conjunction with the `response_mode` value `jwt`, the client|
|å ããŠã`response_type=code` ã `response_mode=jwt` ãšäœµããŠäœ¿çšãããå Žåãã¯ã©ã€ã¢ã³ãã¯ïŒ|
|Part 2: 5.2.3.2. JARM, 1.|
|:--|
|shall verify the authorization responses as specified in JARM, Section 4.4.|
|JARM 仿§ã§å®ããããŠããéãã«èªå¯ã¬ã¹ãã³ã¹ãæ€èšŒããªããã°ãªããªãã|
æ€èšŒæé ã®è©³çްã«ã€ããŠã¯ JARM ã® [Section 4.4. Processing rules](https://openid.net/specs/openid-financial-api-jarm-ID1.html#processing-rules) ãåç
§ããŠãã ããã
|Part 2: 5.2.4.|
|:--|
|(withdrawn)|
|(æ€å)|
|Part 2: 5.2.5.|
|:--|
|(withdrawn)|
|(æ€å)|
|Part 2: 6.2.1. Protected resource provisions, 1.|
|:--|
|shall support the provisions specified in clause 6.2.1 Financial-grade API Security Profile 1.0 - Part 1: Baseline; and|
|Part 1 ã® 6.2.1 ã®èŠå®çŸ€ããµããŒãããªããã°ãªããªãã|
|Part 2: 6.2.1. Protected resource provisions, 2.|
|:--|
|shall adhere to the requirements in MTLS.|
|MTLS ã®èŠæ±äºé
ã«åŸããªããã°ãªããªãã|
|Part 2: 6.2.2. Client provisions|
|:--|
|The client supporting this document shall support the provisions specified in clause 6.2.2 of Financial-grade API Security Profile 1.0 - Part 1: Baseline.|
|Part 1 ã® 6.2.2 ã®èŠå®çŸ€ããµããŒãããªããã°ãªããªãã|
ç°¡åã«èšããšãPart 2 ã® [Section 6](https://openid.net/specs/openid-financial-api-part-2-1_0-final.html#accessing-protected-resources-using-tokens) ã¯ãä¿è·ãªãœãŒã¹ãšã³ããã€ã³ããšã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãèšŒææžã«çŽä»ãã¢ã¯ã»ã¹ããŒã¯ã³ã䜿ãããšãããã³ãPart 1 ã®èŠå®çŸ€ã«åŸãããšãèŠæ±ããŠããŸãã
|Part 2: 7. (Withdrawn)|
|:--|
|(æ€å)|
[ID 2 ã® Section 7](https://openid.net/specs/openid-financial-api-part-2-ID2.html#request-object-endpoint) ã¯ããªã¯ãšã¹ããªããžã§ã¯ããšã³ããã€ã³ããã§ããããããããªã¯ãšã¹ããªããžã§ã¯ããšã³ããã€ã³ãã¯ã"OAuth 2.0 Pushed Authorization Requests" (PAR) ã§å®çŸ©ãããŠãã Pushed Authorization Request ãšã³ããã€ã³ãã§çœ®ãæãããããããåœã»ã¯ã·ã§ã³ã¯ FAPI æçµçã§åé€ãããŸãããPAR ã®æŠèŠã«ã€ããŠã¯ãã[å³è§£ PAR : OAuth 2.0 Pushed Authorization Requests](https://qiita.com/TakahikoKawasaki/items/97563be46b62a0e02fe6)ãããåç
§ãã ããã
## Part 2: ã»ãã¥ãªãã£ãŒäžã®èæ
®äºé
Part 2 ã®ã[8. Security considerations](https://openid.net/specs/openid-financial-api-part-2-1_0-final.html#security-considerations)ãã«ãã»ãã¥ãªãã£ãŒäžã®èæ
®äºé
ãåæãããŠããŸããèŠçŽã¯æ¬¡ã®éãã§ãã
||èŠçŽ|
|:--|:--|
|8.1|æ¬ä»æ§ã¯ [RFC 6749](https://tools.ietf.org/html/rfc6749) ã® [Section 10](https://tools.ietf.org/html/rfc6749#section-10) ããã³ [RFC 6819](https://tools.ietf.org/html/rfc6819) ã«ããã»ãã¥ãªãã£ãŒäžã®èæ
®äºé
ãåç
§ããã|
|8.2|ä¿è·ãªãœãŒã¹ãšã³ããã€ã³ãã¯èšŒææžã«çŽä»ãã¢ã¯ã»ã¹ããŒã¯ã³ã®ã¿ãåãå
¥ããããšã|
|8.3.1|ã¯ã©ã€ã¢ã³ãã¯èªå¯ãµãŒããŒæ¯ã«ç°ãªããªãã€ã¬ã¯ã URI ãçšããã¹ãã§ããã|
|8.3.2|æ»æè
ã«ããåœã®ããŒã¯ã³ãšã³ããã€ã³ããä¿¡ãããŸããããšãèªå¯ã³ãŒããšã¯ã©ã€ã¢ã³ãã·ãŒã¯ã¬ãããæ»æè
ã«æž¡ããŠããŸãã|
|8.3.3|IdP mix-up æ»æãžã®å¯ŸçãšããŠãã€ããªãããããŒãçšããããšãã§ããã|
|8.3.4|(åé€)|
|8.3.5|FAPI Part 2 ã§ã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ã¯ X.509 èšŒææžã«çŽä»ãã®ã§ã察å¿ããèšŒææžããªããã°ãçãŸããŠãå©çšã§ããªãã|
|8.4.1|RFC 6749 ã§ã¯èªå¯ãªã¯ãšã¹ãã»ã¬ã¹ãã³ã¹ã®å®å
šæ§ïŒintegrityïŒã¯ä¿èšŒããªãã|
|8.4.2|ãªã¯ãšã¹ããªããžã§ã¯ããå©çšããããšã§ãèªå¯ãªã¯ãšã¹ãã®æ¹ç«ãé²ãããšãã§ããã|
|8.4.3|ãã€ããªãããããŒãŸã㯠JARM ãå©çšããããšã§ãèªå¯ã¬ã¹ãã³ã¹ã®æ¹ç«ãé²ãããšãã§ããã|
|8.5|TLS 1.2 ã§çšããæå·ã¹ã€ãŒãã«å¶éããããã|
Part 2 ã®ã[8.5. TLS considerations](https://openid.net/specs/openid-financial-api-part-2-1_0-final.html#tls-considerations)ãã«ãããTLS ã®ããŒãžã§ã³ã 1.3 æªæºã®å Žåã蚱容ãããæå·ã¹ã€ãŒãã¯æ¬¡ã® 4 ã€ã«éå®ãããŸãã
1. `TLS_DHE_RSA_WITH_AES_128_GCM_SHA256`
2. `TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`
3. `TLS_DHE_RSA_WITH_AES_256_GCM_SHA384`
4. `TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384`
ãã ããèªå¯ãšã³ããã€ã³ãã«ã€ããŠã¯ãWeb ãã©ãŠã¶ã®çžäºéçšæ§ã®èгç¹ãããææ°ã® [BCP 195](https://tools.ietf.org/html/bcp195) ã§èš±å¯ãããŠããæå·ã¹ã€ãŒãã远å ã§èš±å®¹ããŠãããŸããŸããã
......å人çã«æ¬¡ã®æå·ã¹ã€ãŒã矀ãé€å€ããçç±ãèŠã€ããããªãã£ãã®ã§ã
- `TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256`
- `TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384`
[Issue 216 TLS_ECDHE_ECDSA cipher suites](https://bitbucket.org/openid/fapi/issues/216) ãäœæãããããã远å ããããã«ææ¡ããŸããã1 幎㚠4 ã¶æåŸãFAPI ã§ TLS 1.3 ãèš±å¯ããããšã«ãªã£ããšã®çç±ã§ãåœ Issue ã¯ã¯ããŒãºãããŸããã
||èŠçŽ|
|:--|:--|
|8.6|JWS ã®çœ²åã¢ã«ãŽãªãºã ãšããŠèš±ãããã®ã¯ `PS256` ãš `ES256` ã®ã¿ã|
JWS ã®çœ²åã¢ã«ãŽãªãºã ã¯ãJWA ã®ã[3.1. "alg" (Algorithm) Header Parameter Values for JWS](https://tools.ietf.org/html/rfc7518#section-3.1)ãã«ã`none` ãå«ã㊠13 åãåæãããŠããŸããPart 2 ã®ã[8.6. Algorithm considerations](https://openid.net/specs/openid-financial-api-part-2-1_0-final.html#algorithm-considerations)ãã§ã¯ãããã `PS256` ãš `ES256` ã«éå®ããŠããŸãã`RS256` ãš `none` ã«ã€ããŠã¯ãããããã䜿ãã¹ãã§ã¯ãªãïŒshould not useïŒããã䜿ã£ãŠã¯ãªããªãïŒshall not useïŒããšæç€ºçã«è¿°ã¹ãŠããŸãã
ã¡ãªã¿ã«ãèªå¯ãµãŒããŒã¯æ¬¡ã®ç®æã§ JWS ã䜿ã£ãŠããŸãã
||仿§|çšé|
|:-:|:-:|:--|
|1|[RFC 7523](https://tools.ietf.org/html/rfc7523)|<code>[client_assertion](https://tools.ietf.org/html/rfc7523#section-2.2)</code> ãã©ã¡ãŒã¿ãŒ|
|2|[OIDC Core](https://openid.net/specs/openid-connect-core-1_0.html)|[ID ããŒã¯ã³](https://openid.net/specs/openid-connect-core-1_0.html#IDToken)|
|3|[OIDC Core](https://openid.net/specs/openid-connect-core-1_0.html)|[ãªã¯ãšã¹ããªããžã§ã¯ã](https://openid.net/specs/openid-connect-core-1_0.html#JWTRequests)|
|4|[OIDC Core](https://openid.net/specs/openid-connect-core-1_0.html)|[UserInfo ãšã³ããã€ã³ã](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo)ããã®ã¬ã¹ãã³ã¹|
|5|[JARM](https://openid.net/specs/openid-financial-api-jarm.html)|ã¬ã¹ãã³ã¹ JWT|
|6|[CIBA Core](https://openid.net/specs/openid-client-initiated-backchannel-authentication-core-1_0.html)|ããã¯ãã£ãã«èªèšŒãªã¯ãšã¹ã|

||èŠçŽ|
|:--|:--|
|8.6.1|æå·ã¢ã«ãŽãªãºã `RSA1_5` ã¯äœ¿çšçŠæ¢ã|
æå·ã¢ã«ãŽãªãºã ã«é¢ãããã®èŠå®ã¯ FAPI æçµçã§è¿œå ãããŸãããFAPI Part 2 ã§ã¯ `RSA1_5` ã®äœ¿çšãçŠããããŸãããã®ã¢ã«ãŽãªãºã èå¥å㯠[RFC 7518](https://tools.ietf.org/html/rfc7518) ã® [4.1. "alg" (Algorithm) Header Parameter Values for JWE](https://tools.ietf.org/html/rfc7518#section-4.1) ã§å®çŸ©ãããŠããŠãRSAES-PKCS1-v1_5 ã衚ããŠããŸãã
||èŠçŽ|
|:--|:--|
|8.7|èªå®ãåãã FAPI å®è£
ã䜿çšããããšã|
|8.8|ã¢ã¯ã»ã¹ããŒã¯ã³ç¡ãã§ç¹æš©ã¢ã¯ã·ã§ã³ãèš±å¯ããŠã¯ãªããªãã|
|8.9|çœ²åæ€èšŒçšã®éµã¯ `jwks_uri`/`jwks` ã¯ã©ã€ã¢ã³ãã¡ã¿ããŒã¿ïŒ[RFC 7591](https://tools.ietf.org/html/rfc7518)ïŒã `jwks_uri` ãµãŒããŒã¡ã¿ããŒã¿ïŒ[RFC 8414](https://tools.ietf.org/html/rfc8414)ïŒãä»ããŠã¢ã¯ã»ã¹å¯èœã§ãªããã°ãªããªãã|
|8.10|åãéµãå
±æããã¯ã©ã€ã¢ã³ãã®äžã€ã§ããã®é²åŸ¡ãçªç Žããããšãå
šãŠã®ã¯ã©ã€ã¢ã³ãã®é²åŸ¡ãçªç Žãããçµæãšãªãã|
|8.11|JWK Set ã¯åã `kid` ãæã€éµãè€æ°å«ãã¹ãã§ã¯ãªããããã®å Žåã§ããéµã®ä»ã®å±æ§ãå©çšããŠéµãçµã蟌ãã§ãããã|
# FAPI å®è£
ããã§ã¯ãFAPI å®è£
ã«é¢ãããããã¯ã幟ã€ãåãäžããŸãã
## Baseline ãš Advanced ã®åºå¥
ã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ãã¢ã¯ã»ã¹ããŒã¯ã³ãèŠæ±ãããããã®ã¢ã¯ã»ã¹ããŒã¯ã³ã䜿ã£ãŠ API ã«ã¢ã¯ã»ã¹ããŠãããšããFAPI Part 1 ãš FAPI Part 2 ã®ã©ã¡ãã®ã»ãã¥ãªãã£ãããã¡ã€ã«ãé©çšãã¹ãã§ããããïŒ
åºå®çã«èšå®ããããªãå®è£
ãããã°ããã®å€æãå®è¡æã«åçã«ãããªãå®è£
ãããããšã§ãããã**FAPI 仿§ã¯ãã©ã¡ãã®ã»ãã¥ãªãã£ãããã¡ã€ã«ãé©çšãã¹ããã倿ããæ¹æ³ã«ã€ããŠäœãè¿°ã¹ãŠããŸããã**
åçŽãªè§£æ±ºææ®µã¯ãå
šãŠã®èªå¯ãªã¯ãšã¹ãã FAPI Part 2 ãªã¯ãšã¹ããšã¿ãªãããšãããã®ã«ãªãã§ããããå®ã¯è±åœãªãŒãã³ãã³ãã³ã°ã¯ãããªã£ãŠããŸãããã®ãããªæ±ºãæã¡ã®å®è£
ã¯ãåçºã®ã·ã¹ãã éçºã§ããã°èš±å®¹ã§ãããããããŸããã
ããããªãããæ±çšçãªèªå¯ãµãŒããŒå®è£
ã§ã¯ãé©çšããã»ãã¥ãªãã£ãããã¡ã€ã«ãã©ã¡ããã«ïŒãŸãã¯ãã以å€ïŒã«åºå®ããã®ã¯è³¢æãšã¯èšããŸããããªããªããããŸãã«ã·ã¹ãã èšèšã®æè»ããæããŠããŸãããã§ãããã®ãããæ±çšãœãªã¥ãŒã·ã§ã³ã®å Žåãèªå¯ãªã¯ãšã¹ãã FAPI Part 1ãFAPI Part 2ããŸãã¯ãã®ä»¥å€ãã©ããã¯ãåçã«å€æããããã«å®è£
ããã»ãã奜ãŸãããšèšããŸãã
ã§ã¯ãã©ããã£ãŠåçã«å€æããã°ããã§ããããïŒ ãããèããŠãããšè¡ãçãæ¹æ³ã¯äžã€ã§<sup>â»</sup>ã**èŠæ±ãããŠããã¹ã³ãŒããèŠãŠå€æãã**ããšã«ãªããŸãã
<sup>â»ïŒ[RFC 8707 Resource Indicators for OAuth 2.0](https://www.rfc-editor.org/rfc/rfc8707.html) ã§å®çŸ©ãããŠãã `resource` ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒãå©çšããæ¹æ³ããããããããããŸããã</sup>
äŸãã°ãïŒïŒïŒ`read`ã`write` ãšããã¹ã³ãŒã矀ãçšæããïŒïŒïŒã`read` ã¹ã³ãŒã㯠FAPI Part 1 ã®èŠæ±äºé
ãæºããããšãèŠæ±ãã`write` ã¹ã³ãŒã㯠FAPI Part 2 ã®èŠæ±äºé
ãæºããããšãèŠæ±ããããšããã«ãŒã«ãå®ããïŒïŒïŒã¹ã³ãŒãããã®ããã«è§£éããããã« API ãå®è£
ããŸããããããŠããã°ãèªå¯ãšã³ããã€ã³ãã®å®è£
ã¯ãèªå¯ãªã¯ãšã¹ãã® `scope` ãã©ã¡ãŒã¿ãŒã«ïŒïŒïŒ`write` ãå«ãŸããã° FAPI Part 2 ã®èŠå®çŸ€ãé©çšãïŒïŒïŒ`write` ã¯å«ãŸããªãã `read` ãå«ãŸããŠããã° FAPI Part 1 ã®èŠå®çŸ€ãé©çšãïŒïŒïŒ`read` ã `write` ãå«ãŸããŠããªããã°ãã®ä»ãšã¿ãªããŠæ®éã® OAuth 2.0 / OIDC ã®èŠå®çŸ€ãé©çšããšããããšã§ãå®è¡æã«åäœãåçã«åãæ¿ããããšãã§ããŸãã
ã¹ã³ãŒãã§å€æãããšããŠããã®å®è£
ã¯ã©ãããã°ããã§ããããïŒ äŸãã°ãã¹ã³ãŒãåã `read` ã§å§ãŸã£ãã FAPI Part 1 çšã¹ã³ãŒããšã¿ãªãããã«ããŸããïŒ ããããã®æ¹æ³ã§ããšãã¹ã³ãŒãåã«çžãããããéããŠãçãæªããã§ããã§ã¯ Authlete ã¯ã©ã®ãããªã¢ãããŒãããšã£ãã®ã§ããããïŒ
Authlete ã¯ãŸããã¹ã³ãŒãã«ä»»æã®å±æ§çŸ€ãçŽã¥ããããã®æ±çšçãªä»çµã¿ãå®è£
ããŸããããã®åŸã屿§å `fapi` ãç¹å¥æ±ããããã®å€ã `r` ã§ããã° FAPI Part 1ã`rw` ã§ããã° FAPI Part 2 ãšå€æããããã«ããŸãããã
FAPI 察å¿ã® AuthleteïŒããŒãžã§ã³ 2.0 以éïŒã«å¯Ÿå¿ãã Web ã³ã³ãœãŒã«ã§ã¯ãã¹ã³ãŒãã«å±æ§ãçŽã¥ãã UI ãæäŸããŠããŸããæ¬¡ã®ã¹ã¯ãªãŒã³ã·ã§ããã¯ã`fapi=r` ãšãã屿§ãæã€ `read` ã¹ã³ãŒããå®çŸ©ããŠããŸãã
|<img width="906" alt="scope-creation.png" src="https://qiita-image-store.s3.amazonaws.com/0/106044/1f82a439-8aa1-95e0-9b03-4663b0d7d824.png">|
|:-:|
|ã¹ã³ãŒããäœæãã UIã<br/>屿§ fapi=r ãæã€ read ã¹ã³ãŒãã®å®çŸ©äŸã|
èªå¯ãªã¯ãšã¹ããããŒã¹ããããã® Authlete API ã§ãã `/api/auth/authorization` ã¯ãèªå¯ãªã¯ãšã¹ãã® `scope` ãã©ã¡ãŒã¿ãŒã«å«ãŸããã¹ã³ãŒã矀ã®å±æ§çŸ€ãå
šãŠèª¿ã¹ã`fapi=rw` ãäžã€ã§ãå«ãŸããŠããã° FAPI Part 1ã`fapi=rw` ã¯å«ãŸããŠããªãã `fapi=r` ãäžã€ä»¥äžå«ãŸããŠããã° FAPI Part 2 ãšã¿ãªããŸãã
ããã§ç޹ä»ãã話ã¯ã2018 幎 7 æ 24 æ¥ã«æ±äº¬éèãã¬ããžã§éå¬ããã[Financial APIs Workshop](https://financial-api.net/)ãã«ãããçºè¡šè³æã[Authlete FAPI Implementation Part 2](https://www.slideshare.net/fintechlabs-io/authlete-fapi-implementation-part-2-107692329)ãã«èšèŒãããŠããŸããåè³æã«ã¯ããªã¯ãšã¹ããªããžã§ã¯ãå
å€ã®ãã©ã¡ãŒã¿ãŒã®äžèŽãã«é¢ããããªãããã¢ãã¯ãªè©±é¡ãèŒã£ãŠããŸãã
è£è¶³ïŒID2 ã§ã¯ãFAPI Part 1 ãš FAPI Part 2 ã¯ãRead-Only Security ProfileãããRead and Write Security Profileããšããåç§°ã§ãããFAPI æçµçã§ããããã®ååã¯ãBaseline Security ProfileãããAdvanced Security Profileããžãšå€æŽãããŸããã`fapi` 屿§çšã® `r` ãš `rw` ãšããå€ã¯ãå€ãåç§°ã«ç±æ¥ããŠããŸãã
## Mutual TLS
Mutual TLS ãšèšã£ããšãã«ã次ã®äžã€ã®æå³ãããããšã¯æ¢ã«èª¬æããŸããã
1. ã¯ã©ã€ã¢ã³ãèšŒææžã®æç€ºã䌎ã TLS éä¿¡
2. ã¯ã©ã€ã¢ã³ãèšŒææžãçšããã¯ã©ã€ã¢ã³ãèªèšŒ
3. Certificate Binding
1 ã¯ãAPI 管çãœãªã¥ãŒã·ã§ã³ãæ±ãéšåã§ãããããã2 ãš 3 ã«ã€ããŠã¯ãå¿
ããã API 管çã¬ã€ã€ãŒã§æ±ãå¿
èŠã¯ãããŸãããããããè¯ãã·ã¹ãã ã¢ãŒããã¯ãã£ã§ããã°ãAPI 管çå±€ããã¯ç¬ç«ããå¥ã®å±€ã§æ±ãã§ãããã
Authlete ã¯ããã®ç¬ç¹ãªã¢ãŒããã¯ãã£ãŒã«ãããAPI 管çã¬ã€ã€ãŒã®ä»äºã¯äžåãããªããŸãããã€ãŸãã1 ã®ã¬ã€ã€ãŒã«ã¯å
šãé¢äžããŸãããäžæ¹ã§ã2 ãš 3 ã®æ©èœããµããŒãããŸããããã«ãããAuthlete ã䜿ãã°ã奜ã㪠API 管çãœãªã¥ãŒã·ã§ã³ã䜿ãã€ã€ FAPI ã§èŠæ±ããã MTLS ããµããŒãããããšãã§ããŸããå®éã«ç§ã¯ Amazon API Gateway äžã§ MTLS ã詊ãããã®æé ã説æããã**[éèã°ã¬ãŒã Amazon API Gateway](https://www.authlete.com/ja/developers/tutorial/financial_grade_apigateway/)**ããšããèšäºãæžããŸããã
||
|:-:|
|Amazon API Gateway äžã§ MTLS ãå®çŸããéã®ã³ã³ããŒãã³ãé
眮ã®äŸ|
**ã©ã㪠API 管çãœãªã¥ãŒã·ã§ã³ã ãšããŠããTLS éä¿¡ã§äœ¿ãããã¯ã©ã€ã¢ã³ãèšŒææžãåãåºãæ©èœããæäŸããŠããã°ãAuthlete ãšçµã¿åãããŠäœ¿ãããšã§ãFAPI ã® MTLS ããµããŒãããããšãã§ããŸãã**
API 管çãœãªã¥ãŒã·ã§ã³ãçŽæ¥ 2 ãš 3 ã®æ©èœãå®è£
ããããšãããããããŸãããããããå®è£
å®äºãŸã§ã«ã¯æéããããã§ããããããããããåœè©²æ©èœã API 管çã¬ã€ã€ãŒã§çŽæ¥ãµããŒãããã®ã¯è¯ãèšèšãšã¯èšããŸãããçŸæç¹ã§ã¯ã倧æã¯ã©ãŠããã³ããŒã® API 管çãœãªã¥ãŒã·ã§ã³ã䜿ãã®ã§ããã°ãAuthlete ãçµã¿åãããŠäœ¿ãã®ãæé©è§£ã§ãã
MTLS ã®å®è£
ã«ã€ããŠãæ¥çã§ã¯æåãªãœãããŠã§ã¢ãšã³ãžãã¢ã§ããããŸããAuthlete 瀟ã®ããªã³ã·ãã«ã»ã¢ãŒããã¯ãã§ãã[ãžã£ã¹ãã£ã³ã»ãªããã£ãŒ](https://www.linkedin.com/in/justinricher/)ïŒJustin RicherïŒã話ããŠãã貎éãªåç»ããã¡ãã§ãã
|[](https://youtu.be/hYhHan5FzlA)|
|:-:|
|**["Authlete FAPI Enhancements" by Justin Richer in July 2018](https://youtu.be/hYhHan5FzlA)**|
2018 幎 7 æ 24 æ¥ã«æ±äº¬éèãã¬ããžã§éå¬ããã[Financial APIs Workshop](https://financial-api.net/)ãã®äžã³ãã§ãçºè¡šã§åœŒã䜿çšããè³æã¯ã[Authlete FAPI Implementation Part 1](https://www.slideshare.net/fintechlabs-io/authlete-fapi-implementation-part-1)ãã«çœ®ããŠãããŸãã
ã¡ãªã¿ã«ã圌ã®èæžã[OAuth 2 in Action](https://www.manning.com/books/oauth-2-in-action)ãã®æ¥æ¬èªèš³ãã[OAuth 培åºå
¥é](https://www.shoeisha.co.jp/book/detail/9784798159294)ããšããã¿ã€ãã«ã§ç¿æ³³ç€Ÿãã販売ãããŠããŸããç£ä¿®ã¯ Authlete 瀟ã§ãã
|||
|:-:|:-:|
|OAuth 2 in Action|OAuth 培åºå
¥é|
## ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æé
FAPI 仿§ã«ã¯é¢ä¿ãããŸããããéè¡ API ã®æèã§ãééåŠççšã®ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãçããããããšããçžè«ãé »ç¹ã«åããã®ã§ãããã§åãäžããŸãã
ãã®åŠçã¯ããèªå¯ãªã¯ãšã¹ãã® `scope` ãªã¯ãšã¹ããã©ã¡ãŒã¿ãŒã«ééåŠçã«å¿
èŠãªæš©éã瀺ãç¹å¥ãªã¹ã³ãŒããå«ãŸããŠããå Žåã«ããã®èªå¯ãªã¯ãšã¹ãã®çµæãšããŠçºè¡ãããã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéããä»ã®å Žåã®ãšããããçããããããšã§å®çŸã§ããŸããäŸãã°ãéé API ã `remit` ãšããã¹ã³ãŒããèŠæ±ãããšããå Žåããã®ã¹ã³ãŒããèªå¯ãªã¯ãšã¹ãã«å«ãŸããŠããå Žåã ããç¹å¥ã«ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãçãããŸãã
Authlete ã¯ãã¹ã³ãŒã屿§å `access_token.duration` ãç¹å¥åŠçããããšã§ããã®æ©èœãå®çŸããŸãã
èªå¯ãªã¯ãšã¹ãã«å«ãŸããã¹ã³ãŒã矀ã®å
šå±æ§ã調ã¹ã`access_token.duration` ãšãã屿§åãæã€å±æ§ã®å±æ§å€ã®äžã§ãäžçªå°ãããã®ãã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãšããŠçšããŸãã`access_token.duration` ãšãã屿§åãæã€å±æ§ãäžã€ãååšããªãå Žåã¯ãèªå¯ãµãŒããŒåäœã§èšå®ãããŠããã¢ã¯ã»ã¹ããŒã¯ã³æå¹æéãããã©ã«ãå€ãšããŠçšããŸãã`access_token.duration` ã§æ±ããããæå¹æéãããããã©ã«ãå€ã®æå¹æéã®ã»ããå°ããå Žåãããã©ã«ãå€ã®ã»ããçšããããŸãã
äŸãã°ãã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã 300 ç§ãšãã `remit` ã¹ã³ãŒãã®å®çŸ©ã¯æ¬¡ã®ããã«ãªããŸãã
|<img width="906" alt="access_token_duration.png" src="https://qiita-image-store.s3.amazonaws.com/0/106044/de517f63-1f02-6c10-50c7-291cf3c5cb42.png">|
|:-:|
|ã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéã 300 ç§ãšããäŸ|
åæ§ã«ããŠã`refresh_token.duration` ãšãã屿§åã§ãªãã¬ãã·ã¥ããŒã¯ã³ã®æå¹æéãèšå®ããããšãã§ããŸãã
è£è¶³ïŒAuthlete 2.1 以éã§ã¯ãã¯ã©ã€ã¢ã³ãåäœã§ã¢ã¯ã»ã¹ããŒã¯ã³æå¹æéãèšå®ããããšãã§ããŸãã詳现㯠**[Authlete ãã¬ããžããŒã¹](https://kb.authlete.com/ja)**ã®ã[ããŒã¯ã³ã®æå¹æéã®èšç®ããžãã¯](https://kb.authlete.com/ja/s/oauth-and-openid-connect/a/how-to-calculate-token-duration)ãããåç
§ãã ããã
## ã¢ã¯ã»ã¹ããŒã¯ã³ãšååŒè©³çްæ
å ±ã®çŽä»ã
ããã FAPI 仿§ã«ã¯é¢ä¿ãããŸãããããšããã€ã€æ¬§å·ã®éèé¢é£ææžã§èšåãããã®ã§ç¡é¢ä¿ãšãèšããŸããããéè¡ API ã®æèã§ãååŒæ¯ã«ã¢ã¯ã»ã¹ããŒã¯ã³ãçºè¡ããããã®ã¢ã¯ã»ã¹ããŒã¯ã³ã«ååŒè©³çްæ
å ±ãçŽä»ãããããšããçžè«ãé »ç¹ã«åããã®ã§ãããã§åãäžããŸãã
ãã®æ©èœã¯ããã¢ã¯ã»ã¹ããŒã¯ã³ã®æå¹æéãã§ç޹ä»ããã¹ã³ãŒãåäœã®å±æ§ã§ã¯å®çŸã§ããŸããããšããã®ã¯ãã¹ã³ãŒãåäœã§ã¯ãªããã¢ã¯ã»ã¹ããŒã¯ã³åäœã§åå¥ã«æ
å ±ãçŽä»ããå¿
èŠãããããã§ãã
Authlete ã«ã¯ãä»»æã®ããŒã»ããªã¥ãŒã®çµãã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ããä»çµã¿ãæããååšããŠããŸãããã®æ©èœãå©çšããããšã§ãååŒæ
å ±ãã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ããããšãã§ããŸãããã®æ©èœã®è©³çްã¯ã**[Extra Properties](https://www.authlete.com/developers/definitive_guide/extra_properties/)**ãã§èª¬æãããŠããŸãããŸãã[Authlete ãã¬ããžããŒã¹](https://kb.authlete.com/ja)ã®ã[ããŒã¯ã³ã«ä»»æã®ããããã£ãã²ãã¥ããæ¹æ³](https://kb.authlete.com/ja/s/oauth-and-openid-connect/a/extra-properties)ãããåç
§ãã ããã
泚æïŒã¢ã¯ã»ã¹ããŒã¯ã³ã«ä»»æã®ããŒã»ããªã¥ãŒã®çµã¿ãçŽã¥ããããšãã§ããã®ã§ãããã«äŸãã°ééå
ãéééé¡ã«é¢ããæ
å ±ãæžã蟌ãããšãã§ããŸãããããŸããå§ãããŸãããããã§ã¯ãªããååŒæ
å ±ã¯å¥ã®ããŒã¿ããŒã¹ã«ä¿åããŠããããã®ã¬ã³ãŒãã®äžæèå¥åã ããã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽã¥ããããã«ããã®ãããã§ãã
## èªå¯è©³çް
ããŒãžã§ã³ 2.2 以éãAuthlete 㯠**[OAuth 2.0 Rich Authorization Requests](https://datatracker.ietf.org/doc/draft-ietf-oauth-rar/)**ïŒ**RAR**ïŒããµããŒãããŠããŸãããã®æšæºä»æ§ã¯ `authorization_details` ãã©ã¡ãŒã¿ãŒã远å ããŸãã
**`authorization_details` ãã©ã¡ãŒã¿ãŒã¯ãèªå¯ã®è©³çްæ
å ±ãã¢ã¯ã»ã¹ããŒã¯ã³ã«ä¿æãããç®çã§äœ¿çšããããšãã§ããŸãã**äŸãã°ãããããïŒãã誰ã«ïŒããšãã£ãæ¯æãã«é¢ãã詳现æ
å ±ã§ãã
仿§ã«ããã°ã`authorization_details` ãã©ã¡ãŒã¿ãŒã¯ã`scope` ãã©ã¡ãŒã¿ãŒã䜿ãããå Žæã§ããã°ã©ãã§ã䜿ãããšãã§ããŸããäŸãã°ãèªå¯ãªã¯ãšã¹ããããŒã¯ã³ã¬ã¹ãã³ã¹ãã€ã³ããã¹ãã¯ã·ã§ã³ã¬ã¹ãã³ã¹ããªã©ã§äœ¿çšå¯èœã§ãã
||
|:-:|
|èªå¯ãªã¯ãšã¹ãå
ã® `authorization_details`|
||
|:-:|
|ããŒã¯ã³ã¬ã¹ãã³ã¹å
ã® `authorization_details`|
||
|:-:|
|ã€ã³ããã¹ãã¯ã·ã§ã³ã¬ã¹ãã³ã¹å
ã® `authorization_details`|
RAR ã¯ãèªå¯ã®è©³çްãèšè¿°ãããã®æ
å ±ãã¢ã¯ã»ã¹ããŒã¯ã³ã«çŽä»ããæ©èœãæäŸãããªãŒãã³æšæºä»æ§ã§ããRAR 㯠FAPI 2.0 ã®æè¡èŠçŽ ã®äžã€ãšããŠæ¡çšãããããšã«ãªã£ãŠããŸãïŒ[FAPI FAQ](https://openid.net/wg/fapi/faq/) ã® "Are there FAPI 2.0 implementations?" ãåç
§ã®ããšïŒã
Authlete ã® [Extra Properties](https://www.authlete.com/developers/definitive_guide/extra_properties/) ãåãç®çã§äœ¿çšããããšãã§ããŸããæ©èœçãªéããäžã€æãããšããã°ãExtra Properties ã§ã¯åããããã£ãŒãå
¬éãããé ããŠããããéžã¶ããšãã§ããŸããé ãããããããã£ãŒçŸ€ã¯ OAuth/OIDC ã®ã¬ã¹ãã³ã¹å
ã«çŸããããšã¯ãªããªããŸãããAuthlete ã®ã€ã³ããã¹ãã¯ã·ã§ã³ APIïŒ`/auth/introspection` APIïŒã§åãåºãããšãã§ããŸããã¢ã¯ã»ã¹ããŒã¯ã³ã«æ
å ±ãçŽä»ããããããã®æ
å ±ãã¯ã©ã€ã¢ã³ãã¢ããªã±ãŒã·ã§ã³ããŠãŒã¶ãŒã«ã¯èŠããããªããšããã±ãŒã¹ã¯ãããŸãããã®ãããªãšããExtra Properties ã䟿å©ã§ãã
# ãããã«
é·ãèšäºãæåŸãŸã§èªãã§ããã ããããããšãããããŸããã
**Authlete 㯠FAPI 1.0 æçµçããã³ FAPI 2.0 ã§æ¡çšäºå®ã®æ¢ç¥ã®æè¡ä»æ§ãå®è£
æžã¿ã§ãã**Authlete ã¢ã«ãŠã³ãïŒ[ç»é²](https://so.authlete.com/accounts/signup)ïŒãããã°ã**[Authlete API ãã¥ãŒããªã¢ã«](https://www.authlete.com/ja/developers/tutorial/)**ãåç
§ããªãã FAPI ã詊ãããšãã§ããŸãã
èªå® FAPI å®è£
ã«ãèå³ãããã°ã[Authlete 瀟](https://www.authlete.com/ja/)ãŸã§[ãåãåãã](https://www.authlete.com/ja/contact/)ãã ããã






















