MS_OAuthMTLS - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- æ»ã
-
OAuth 2.0 æ¡åŒµïŒOAuth2.0 Proof of PossessionïŒ
Financial API (FAPI)ïŒFAPI1ãFAPI2ïŒãOAuth 2.1 -
UserAgentã§OAuth2ã®TokenãååŸãããã¹ãã»ãã©ã¯ãã£ã¹
- OAuth2.0 mTLSïŒæåã®æŽŸçïŒ
- Token BindingïŒå»æ¢ã®åŸåïŒ
- OAuth2.0 DPoP
-
OAuth 2.0 æ¡åŒµïŒOAuth2.0 Proof of PossessionïŒ
èšååŒåç¬Šäœæã«é¢ããã»ãã¥ãªãã£æ¡åŒµä»æ§ïŒRFC 8705 ãšããŠæšæºåïŒ
-
Mutual TLS(MTLS)ïŒOAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens
-
OAuth2.0 Proof of PossessionãåæãšããïŒRFC 8705ïŒã®æŽŸçãšèšããã
TLS äŸåã§ã€ã³ãã©æ§ç¯ãå¿ èŠã -
Mutual TLS ãšãããšãåã«ãTLS éä¿¡æã«ã¯ã©ã€ã¢ã³ãåŽãèšŒææžãæç€ºããã
ããšãæå³ããã -
FAPI ã®æèã§ã¯ãèšååŒå笊ã®äœæãšäœ¿çšã
-
ã¯ã©ã€ã¢ã³ãèšŒææžã«ãã OAuth ã¯ã©ã€ã¢ã³ãèªèšŒ
-
ã¯ã©ã€ã¢ã³ãèšŒææžã«çŽä»ãããŒã¯ã³ã«é¢ããåŠç
-
å¥ç§°ãCertificate Bindingãã§ã以äžãéžæçã«äœ¿çšã§ããã
- å ¬ééµåºç€ïŒPKIïŒ
- èªå·±çœ²åèšŒææžã»å ¬ééµïŒjwks_uri çïŒ
-
â» ãã®ããŒãžã¯ããã©ãã 12 ãåèã«ããŠäœæã
ç§»è¡ã¡ã¢ïŒèª€åïŒ: ããã¥ãªãã£æ¡åŒµä»æ§ãâãã»ãã¥ãªãã£æ¡åŒµä»æ§ããä¿®æ£ããã
è£è¶³ïŒ2 ã€ã®æ©èœã 1 ã€ã®ä»æ§ã«å ¥ã£ãŠããïŒ: åç§°ãé·ãã®ã¯ã
ãã®ä»æ§ãç¬ç«ããŠäœ¿ãã 2 ã€ã®æ©èœãå«ãããã§ããã
- Mutual TLS Client Authentication
⊠ã¯ã©ã€ã¢ã³ãèšŒææžãclient_secretã®ä»£ããã«äœ¿ãïŒã¯ã©ã€ã¢ã³ãèªèšŒïŒ- Certificate Bound Access Tokens
⊠çºè¡ããã¢ã¯ã»ã¹ ããŒã¯ã³ããã®èšŒææžã«çŽã¥ããïŒéä¿¡è å¶çŽïŒåŸè¿°ã®ãå®è£ ã«é¢ãã ---> Access Tokenãã«ãããšããã
ãã® 2 ã€ã¯äºãã«ç¬ç«ããŠäœ¿çšã§ããã
X.509 èšŒææžã®ã¯ã©ã€ã¢ã³ãèšŒææžã䜿çšããã
- TLS ãã³ãã·ã§ã€ã¯ã«ããç§å¯éµã®ææãæ€èšŒããã
- ã¯ã©ã€ã¢ã³ãèšŒææžã®å ¥ãæ¿ãã¯èªç±ã«è¡ãããšãåºæ¥ãã
- 以äžã®ã±ãŒã¹ã§åŠçæ¹åŒãç°ãªã£ãŠããã
-
TLS éä¿¡ã§çšããããå ¬ééµåºç€ïŒPKIïŒã®ã¯ã©ã€ã¢ã³ãèšŒææžãçšããæ¹åŒ
- èšŒææžãã§ãŒã³ãšã
- äºåç»é²ãããµããžã§ã¯ãèå¥åïŒDNïŒã䜿çšããã
ïŒãã®å Žåã®ã¡ã¿ããŒã¿ã¯ãtls_client_auth_subject_dnïŒ
-
ã¡ã¿ããŒã¿å€: tls_client_auth
-
TLS éä¿¡ã§çšããããèªå·±çœ²åã®ã¯ã©ã€ã¢ã³ãèšŒææžãçšããæ¹åŒ
- èšŒææžãã§ãŒã³ãæ€èšŒããªã
- åœè©²èªå·±çœ²åèšŒææžãšã
- äºåç»é²ããå
¬ééµïŒjwks_uri çïŒã䜿çšããã
ïŒãã®ã¡ã¿ããŒã¿ã¯å®çŸ©ãããŠããªãïŒ
-
ã¡ã¿ããŒã¿å€: self_signed_tls_client_auth
è£è¶³ïŒã©ã¡ããéžã¶ãïŒ: PKI æ¹åŒã¯
CA ãèšŒææžãåçºè¡ããŠãç»é²å 容ãå€ããã«æžãïŒDN ã§ç §åããããïŒãã
ä¿¡é Œãã CA ã®ç®¡çãå¿ èŠã«ãªãã
èªå·±çœ²åæ¹åŒã¯ CA ãäžèŠã§ãéµã®ããŒããŒã·ã§ã³ã
jwks_uriã®æŽæ°ã ãã§è¡ããã
FAPI ã§ã¯äž¡æ¹ãèªããããŠããã
- Token Endpoint ã§ Mutual TLS ã¯ã©ã€ã¢ã³ãèªèšŒããã
- X.509 èšŒææžã® Hash ã«ãã Client ãš Access Token ãçµã³ä»ããã
- Resource EndPoint ã§ Mutual TLS ã¯ã©ã€ã¢ã³ãèªèšŒããã
- Resource Server ã¯ãX.509 èšŒææžã® Hash ãšã
Access Token ã®çµã³ä»ããæ€èšŒããã
- Client èªäœã¯æ®ã©äœãå€ããªããŠè¯ãã
- 察å¿ããªããã°ãªããªãã®ã¯ Server åŽã
-
Client åŽããã¯ãServer ããã®ããŒã¯ã³ã
- ãæå人å笊ããšããŠæ±ã£ãã®ã
- ãèšååŒå笊ããšããŠæ±ã£ãã®ã
è§£ããªãã
-
Client èªèº«ã®ãªã¹ã¯ç®¡çã«ã¯ããã®æ å ±ãå¿ èŠãªã®ã§ã
åããªãœãŒã¹ URI ã¯ããæå人å笊ããåãæ±ã£ãŠã¯ãªããªãã -
ç°ãªã Authorization Scheme ã§ã¯ãªãã
Bearer ã¹ããŒãããã®ãŸãŸäœ¿ãã®ã¯ã
è±åœã® Open Banking ã§ã®æ¡çšã®ãæãã«é æ ®ããçµæã
ç§»è¡ã¡ã¢ïŒå©è©ïŒ: ãåããªãœãŒã¹ URI ã¯ããæå人å笊ãã¯åãæ±ã£ãŠã¯ãªããªãããã®
å©è©ã®éè€ãããåãæ±ã£ãŠã¯ãªããªããã«æŽããã
Authorization Server ã®äžèšã®ãšã³ããã€ã³ãã«ã¯ã©ã€ã¢ã³ãèªèšŒã®è¿œå ã¡ã«ããºã ãæäŸã
- RFC6749 ... OAuth 2.0 : Token ãšã³ããã€ã³ã
- RFC 7009 ... Token Revocation : Revocation ãšã³ããã€ã³ã
- RFC 7662 ... Token Introspection : Introspection ãšã³ããã€ã³ã
ä»»æã®ãšã³ããã€ã³ã
-
client_idãã©ã¡ã¿ãå¿ é
ã¯ã©ã€ã¢ã³ãèšŒææžã®å 容ãšã¯ç¬ç«ã㊠Client ãèå¥ããããã -
ã¯ã©ã€ã¢ã³ãèšŒææžã Client Credentials ãšããŠäœ¿çšããŠã
client_idããã€ã³ããã 2 ã€ã®ç°ãªã£ãæ¹æ³ãããã -
ãªããClient ã®ç»é²æ¹æ³ã«äŸåããªãã
- åçã«ç»é²
- éçã«æ§æ
- å¥ã®æ¹æ³ã§ç¢ºç«
tls_client_auth_subject_dn
- ã¯ã©ã€ã¢ã³ãèšŒææžã®äºæ³ããããµããžã§ã¯ãèå¥åã®æåå衚çŸã
ïŒã¡ã¿ããŒã¿ã®èŠå®ã¯ç¡ãïŒ
-
jwks_uri ã® Jwk Setããã
x5cãã©ã¡ã¿ã®æåã®èšŒææžã®å ¬ééµ
ïŒRSA ="n"and"e", EC ="x"and"y"ïŒãååŸã
- éä¿¡è
å¶éã«ã¯ã
x5t#S256ïŒSHA-256 ã«ããèšŒææžãã£ã³ã¬ãŒããªã³ãïŒã䜿çšããã -
x5t#S256ã¯ä»¥äžã®æ§ã«èŠå®ãããã®ã§éåžžãthumbprint ã®æååããã®ãŸãŸæ±ãã°ã€ã€ã
base64url-encoded [RFC4648] SHA-256 [SHS] hash
(a.k.a. thumbprint, fingerprint or digest)
of the DER encoding of the X.509 certificate [RFC5280].
Client ã Token ãšã³ããã€ã³ããžã®æ¥ç¶ã§ã¯ã©ã€ã¢ã³ãèšŒææžã䜿çšãããšã
Authorization Server ã¯çºè¡ããã Access Token ãã¯ã©ã€ã¢ã³ãèšŒææžã«
ãã€ã³ãã§ããã
- Access Token ã«èšŒææžããã·ã¥ãåã蟌ã
- JWT ã«ã
cnf>x5t#S256ã¡ã³ããšããŠåã蟌ãã - 以äžã¯ã
x5t#S256ãå«ã JWT ãã€ããŒãã®äŸã
- JWT ã«ã
{
"iss": "https://server.example.com",
"sub": "[email protected]",
"exp": 1493726400,
"nbf": 1493722800,
"cnf":{
"x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
}
}- Introspection ãšã³ããã€ã³ã
Introspection ãšã³ããã€ã³ããã
以äžã®ãããªãx5t#S256ãå«ãã¡ã¿ããŒã¿ãè¿ãã
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"iss": "https://server.example.com",
"sub": "[email protected]",
"exp": 1493726400,
"nbf": 1493722800,
"cnf":{
"x5t#S256": "bwcK0esc3ACC3DB2Y5_lESsXE8o9ltc05O89jdN-dg2"
}
}è£è¶³ïŒ
cnfã¯ã¬ãŒã ïŒ:cnfïŒconfirmationïŒã¯ RFC 7800 ã§å®çŸ©ããã
ããã®ããŒã¯ã³ã䜿ãã«ã¯ãããã«æžãããéµã®ææã蚌æããããšãã
æ±çšã®ã¯ã¬ãŒã ã§ããã
mTLS ã¯cnfã®äžã«èšŒææžã®ãã£ã³ã¬ãŒããªã³ãïŒx5t#S256ïŒãå ¥ãã
DPoP ã¯å ¬ééµã®ãµã ããªã³ãïŒjktïŒãå ¥ããã
èšååŒå笊ã®ãèšåæ¬ãã«ãããã
Client ã¯ãResource ãªã¯ãšã¹ãã«ãToken ãªã¯ãšã¹ãã§äœ¿çšããã¯ã©ã€ã¢ã³ãèªèšŒã
䜿çšããå¿
èŠãããã
ïŒèšŒææžãäžèŽããªãå Žåã¯ãHTTP 401 ãš "invalid_token" ã§æåŠãå¿
é ãïŒ
ïŒOpenID Connect - DiscoveryïŒ
-
mutual_tls_sender_constrained_access_tokens- æ¬ä»æ§ã®ãµããŒãã瀺ã bool å€ã
- ãªãã·ã§ã³ãdefault å€ã¯
"false"ã
ïŒOpenID Connect - Dynamic Client RegistrationïŒ
-
mutual_tls_sender_constrained_access_tokens- æ¬ä»æ§ã䜿çšããæå³ã瀺ã bool å€ã
- ãªãã·ã§ã³ãdefault å€ã¯
"false"ã
ç§»è¡ã¡ã¢ïŒRFC ã§ã®ãã©ã¡ã¿åïŒ: æ¬ããŒãžã¯ãã©ãã 12 ãåºã«ããŠãããã
mutual_tls_sender_constrained_access_tokensãšãªã£ãŠãããã
RFC 8705 ã§ã¯tls_client_certificate_bound_access_tokensã«æ¹ç§°ããã
ïŒDiscovery / Registration ã®åæ¹ïŒã
-
Authorization Server
-
ä»ã®ã¯ã©ã€ã¢ã³ãèªèšŒããµããŒãããå Žåã
(MTLS) ã¯ã©ã€ã¢ã³ãèªèšŒããªãã·ã§ã³ã«ããã -
èªå·±çœ²åèšŒææžã䜿çšããå Žåã
èšŒææžãã§ãŒã³ãæ€èšŒããªãããã« TLS ã¹ã¿ãã¯ãæ§æããå¿ èŠãããã -
ã¯ã©ã€ã¢ã³ãèªèšŒãå¿ èŠãšããªãä»ã®ãšã³ããã€ã³ããã
ä»ã®ãã¹ãåã§ãã¹ãããããšãèæ ®ããŠãããã
-
-
Resource Server
Resource Server ã¯ãã¯ã©ã€ã¢ã³ãã®èšŒææžã®ãã§ãŒã³ãæ€èšŒããå¿ èŠã¯ãªãã®ã§ã
èšŒææžãã§ãŒã³ãæ€èšŒããªãããã« TLS ã¹ã¿ãã¯ãæ§æããå¿ èŠãããã
ã¯ã©ã€ã¢ã³ãèªèšŒãš "éä¿¡è
å¶éä»ã Access Token" ã¯ã
äºãã«ç¬ç«ããŠäœ¿çšã§ããã
-
ã¯ã©ã€ã¢ã³ãèªèšŒããã® "éä¿¡è å¶éä»ã Access Token"
- ããã«ã€ããŠã¯èª¬ææžã¿ã
- ã¯ã©ã€ã¢ã³ãèšŒææžãæŽæ°ãããšã
"éä¿¡è å¶éä»ã Access Token" ã¯ç¡å¹ã«ãªãã - ç¡å¹åãããå Žåã¯ãæéåãã®ã¢ã¯ã»ã¹ããŒã¯ã³ãšåæ§ã«åŠçã§ããã
-
ã¯ã©ã€ã¢ã³ãèªèšŒãªãã® "éä¿¡è å¶éä»ã Access Token"
- ã¯ã©ã€ã¢ã³ãèªèšŒãªãã§ã
"éä¿¡è å¶éä»ã Access Token" ã®ã¿äœ¿çšã§ããã - Token ãªã¯ãšã¹ãã§ãèšŒææžãã§ãŒã³ãæ€èšŒããªãããã«
TLS ã¹ã¿ãã¯ãæ§æããå¿ èŠãããã - Resource ãªã¯ãšã¹ãã§ãã¯ã©ã€ã¢ã³ãèªèšŒæžãš Access Token ããååŸãã
èšŒææžãã£ã³ã¬ãŒããªã³ããæ¯èŒããã
- ã¯ã©ã€ã¢ã³ãèªèšŒãªãã§ã
â» äºãã«ç¬ç«ããŠäœ¿çšã§ãããšããã³ãã¯ã
tls_client_authself_signed_tls_client_auth
ãã¯ã©ã€ã¢ã³ãèªèšŒã®ã¿ã§äœ¿çšããããšãã§ããïŒ
è£è¶³ïŒäžèšã®çåãžã®çãïŒ: ãã®ãšããã§ã
ã¯ã©ã€ã¢ã³ãèªèšŒã ãã«äœ¿ãããšãã§ããã
RFC 8705 ã§ã¯ãã¯ã©ã€ã¢ã³ãèªèšŒïŒç¬¬ 2 ç« ïŒãš
èšŒææžãã€ã³ã ã¢ã¯ã»ã¹ ããŒã¯ã³ïŒç¬¬ 3 ç« ïŒã
æç¢ºã«å¥ã®ç« ç«ãŠã«ãªã£ãŠããã
Discovery / Registration ã®ã¡ã¿ããŒã¿ãå¥ã ã«çšæãããŠãã
ïŒåè ã¯token_endpoint_auth_methodã
åŸè ã¯tls_client_certificate_bound_access_tokensïŒã
- Token ãšã³ããã€ã³ããžãªã¯ãšã¹ãããªã Implicit Flow ã¯ãµããŒãã§ããªãã
- éã«ãHybrid Flow ã®ãµããŒããå¿ èŠã ããToken ãšã³ããã€ã³ãã§åŠçãããããã°ããã
-
ããŒãžã§ã³
- äž»æµãªã®ã§ãTLS 1.2 [RFC5246] ãåŒçšã
- æè¿çºè¡šããããTLS 1.3 [RFC8446] ãæšå¥šã
-
èæ ®äºé
BCP 195, RFC 7525: Recommendations for Secure Use of TLS and DTLS -
ãããã¯ãŒã¯ä»²ä»è
- ããŒããã©ã³ãµããªããŒã¹ãããã·ãªã©ã§ãTLS ãäžæãããŠãè¯ãã
- ãã®å Žåãã¯ã©ã€ã¢ã³ãèšŒææžã¡ã¿ããŒã¿ãåãæž¡ãæ¹æ³ã¯ä»æ§ã®ç¯å²å€ã
è£è¶³ïŒTLS çµç«¯ãæå€§ã®å®è£ 課é¡ïŒ: ãTLS ãäžæãããŠãè¯ãããšãããã
ãã®å ŽåããŒããã©ã³ãµãåãåã£ãã¯ã©ã€ã¢ã³ãèšŒææžã
ã¢ããªã±ãŒã·ã§ã³ãŸã§éã¶å¿ èŠãããïŒX-SSL-Client-Certçã®ãããïŒã
仿§å€ãªã®ã§è£œåããšã«äœæ³ãç°ãªãã
ãã€å€éšããåãããããåœè£ ãããªãããå¿ ãäžæžãããå¿ èŠãããã
mTLS ã®å°å ¥ã§ãã€ã³ãã©æ§ç¯ãå¿ èŠããšèšãããå®äœã¯ãããã«ããã
-
X.509 èšŒææžãšèšŒææžãã§ãŒã³ã®è§£æãšæ€èšŒã¯è€é
-
å®è£ ãã¹ã«ãã£ãŠä»¥åã«ã»ãã¥ãªãã£ã®è匱æ§ãé²åããŠããã
-
ååã«ãã¹ãããã X.509 ã©ã€ãã©ãªã䜿çšããã¹ãã§ã
ç¬èªã® X.509 èšŒææžæ€èšŒæé ãæžããªãããšã
- åããµããžã§ã¯ãèå¥åïŒDNïŒãæã€èšŒææžã䜿çšããŠ
ã¯ã©ã€ã¢ã³ããåœè£ ããããšããå¯èœæ§ãããã - åŸã£ãŠãèšŒææžçºè¡ããªã·ãŒãã»ãã¥ãªãã£èŠä»¶ãæºãããŠãã
éãããæ°ã® CA ã ããä¿¡é Œã¢ã³ã«ãŒãšããŠåãå ¥ããã¹ãã
ïŒOAuth 2.0 Token BindingïŒ
OAuth 2.0 Token Binding ã®
ãToken ããClient äžã®é察称ããŒã»ãã¢ã«ãã€ã³ããããåŠçæ¹åŒã¯ã
"éä¿¡è å¶éä»ã Access Token" ã«å¯Ÿãã
- ãã¶ã€ã³
- ã¢ãããŒã·ã§ã³
ã«å¯ŸããŠã幟ã€ãã®é¡äŒŒç¹ãããã
-
èšååŒå笊ã®ããã®
çŽä»ãïŒããŒã¯ã³ã»ãã€ã³ãã£ã³ã°ïŒã«é¢ããŠã
OAuth 2.0 Token Binding ãšç«¶åãã仿§ã -
Authorization Server ãçºè¡ãã Access Token ãã
Client äžã®é察称ããŒã»ãã¢ã«ãã€ã³ãããã- Client äžã§çæãããé察称ããŒã»ãã¢ã䜿çšãã
- ç§å¯éµä¿æã®èšŒæïŒProof of PossessionãPOPïŒãè¡ãã
èŠå¶èŠä»¶ã«ãã£ãŠåæ©ä»ãããã OAuth 察å¿ã®éèååŒã§ã
- èšŒææžã®äœæãé åžãããã³ç®¡çã®é£ããã®å€ããåé¿ãã
- ããåºç¯ãªå°å ¥ãšå±éãèŠèŸŒãå¯èœæ§ãããã
ãŸã ãæ°ãããçŸåšã®éçºãã©ãããã©ãŒã ãšããŒã«ã§ã¯ãæ¯èŒçå°æ°ã®ãµããŒããããªãã
- ãã°ããåãããããçŸåšã®éçºãã©ãããã©ãŒã ãšããŒã«ã§åºããµããŒããããŠããã
- ãã¡ãã¯ãOAuth 2.0 Token Binding ãããè¿ éãªãœãªã¥ãŒã·ã§ã³æäŸãç®æããŠããã
è£è¶³ïŒæ±ºçïŒ: ãã®æ¯èŒã®çµè«ã¯ã
mTLS ã RFC 8705 ãšããŠæšæºåãããToken Binding ã¯
ãã©ãŠã¶å®è£ ãèŠéãããŠäºå®äžå»æ¢ããšãã圢ã§åºãã
ãèšŒææžã®äœæã»é åžã»ç®¡çã®é£ãããåé¿ãããããšãã
Token Binding ã®ã¢ãããŒã·ã§ã³ã®ã»ãã¯ããã®åŸ
**ã¢ããªã±ãŒã·ã§ã³å±€ã§éµãæã€ DPoPïŒRFC 9449ïŒ**ã
åŒãåããŠããã
FAPI 2.0 ã§ããéä¿¡è å¶çŽã®ææ®µãšããŠ
mTLS ãŸã㯠DPoP ãæå®ãããŠããã
-
draft-ietf-oauth-mtls-xx - OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens
https://tools.ietf.org/html/draft-ietf-oauth-mtls -
ã2019幎çãäžçæå 端㮠API ã»ãã¥ãªãã£ãŒæè¡ã
å®è£ è ã«ãããFAPIïŒFinancial-grade APIïŒã解説 - Qiita
0.2. Mutual TLS
https://qiita.com/TakahikoKawasaki/items/83c47c9830097dba2744#02-mutual-tls -
KEYCLOAK-6771 Holder of Key mechanism:
OAuth 2.0 Mutual TLS Client Authentication and
Certificate Bound Access Tokens by tnorimat
Pull Request #5083 · keycloak/keycloak
https://github.com/keycloak/keycloak/pull/5083
- OAuth2.0 Proof of Possession
- OAuth2.0 DPoP
- Token Binding
- ASP.NETïŒã¯ã©ã€ã¢ã³ãèšŒææž
- Financial API (FAPI)
Tags: ITåœéæšæº, èªèšŒåºç€, ã¯ã¬ãŒã ããŒã¹èªèšŒ, OAuth