¾ÖÇø®ÄÉÀÌ¼Ç º¸¾ÈÀÇ ¿ªÇÒÀº Á¡Á¡ ´õ Áß¿äÇØÁö°í ÀÖ´Ù. KeycloakÀº ¿ÀǼҽº IAM(ID ¹× Á¢±Ù °ü¸®) µµ±¸ÀÌ´Ù. »ç¿ëÀÚ´Â IAMÀ» ÅëÇØ ¾ÖÇø®ÄÉÀÌ¼Ç ¹× IT ¼ºñ½º¿¡ ´ëÇÑ ÀÎÁõ ÇÁ·Î¼¼½º¸¦ °£¼ÒÈÇÒ ¼ö ÀÖ´Ù. KeycloakÀ» ÅëÇØ ¼ºñ½º¸¦ º¸È£ÇÏ°í ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ ÀÎÁõÀ» Ãß°¡ÇÒ ¼öµµ ÀÖ´Ù. ÀÌ Ã¥¿¡¼´Â KeycloakÀÇ ¼³Ä¡ºÎÅÍ ´Ù¾çÇÑ ¾ÖÇø®ÄÉÀ̼ǿ¡ ´ëÇÑ º¸È£ ¹æ¹ý, OpenID ¹× OAuth 2.0°ú ¿¬µ¿ÇÏ´Â ¹æ¹ý, ÇÁ·Î´ö¼Ç ȯ°æ¿¡¼ÀÇ ¼³Á¤ ¹æ¹ý°ú ¸ð¹ü »ç·Ê¸¦ ´Ù·é´Ù.
´ëºÎºÐÀÇ ±â¾÷ÀÌ ´ÜÀÏ º¥´õ ÆÛºí¸¯ Ŭ¶ó¿ìµå¸¦ »ç¿ëÇÒ Áغñ°¡ µÇ±â ¸î ³â ÀüºÎÅÍ Å¬¶ó¿ìµå ¿¬ÇÕ Ç÷§ÆûÀ» ±¸ÃàÇÏ´Â ¾Æ¸£ÁÖ³ª Å×Å©³î·ÎÁö½º(Arjuna Technologies)¿¡¼ °æ·ÂÀ» ½ÃÀÛÇß´Ù. ±× ÈÄ ·¹µåÇÞ(Red Hat)¿¡ ÇÕ·ùÇØ °³¹ßÀÚµéÀÇ ¾÷¹«¸¦ µµ¿ï ¹æ¹ýÀ» ã¾ÒÀ¸¸ç ¿©±â¼ºÎÅÍ Keycloak¿¡ ´ëÇÑ ¾ÆÀ̵ð¾î°¡ ½ÃÀ۵ƴÙ. 2013³â ·¹µåÇÞÀÇ ´Ù¸¥ °³¹ßÀÚ¿Í ÇÔ²² Keycloak ÇÁ·ÎÁ§Æ®¸¦ °øµ¿ ¼³¸³Çß´Ù. ÇöÀç Keycloak ÇÁ·ÎÁ§Æ®ÀÇ ¸®´õÀÌÀÚ ÇÁ·ÎÁ§Æ®ÀÇ ÃÖ°í ±â¿©ÀÚ´Ù. ¶ÇÇÑ ·¹µåÇÞ°ú ·¹µåÇÞ °í°´ÀÇ ID ¹× Á¢±Ù °ü¸® ¾÷¹«¸¦ ¼öÇàÇÏ´Â ¼ö¼® ¼ÒÇÁÆ®¿þ¾î ¿£Áö´Ï¾î·Î ²ÙÁØÈ÷ ÀÏÇÏ°í ÀÖ´Ù.
1ºÎ. Keycloak ½ÃÀÛÇϱâ
1Àå. Keycloak ½ÃÀÛÇϱâ
__±â¼ú ¿ä±¸ »çÇ×
__Keycloak ¼Ò°³
__Keycloak ¼³Ä¡ ¹× ½ÇÇà
____µµÄ¿¿¡¼ Keycloak ½ÇÇà
____OpenJDK¸¦ ÅëÇÑ Keycloak ¼³Ä¡ ¹× ½ÇÇà
__Keycloak °ü¸® ¹× °èÁ¤ ÄÜ¼Ö È°¿ë
____Keycloak °ü¸®ÀÚ ÄÜ¼Ö ½ÃÀÛÇϱâ
____Keycloak °èÁ¤ ÄÜ¼Ö ½ÃÀÛÇϱâ
__¿ä¾à
__Áú¹®
2Àå. ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È ¼³Á¤
__±â¼ú ¿ä±¸ »çÇ×
__»ùÇà ¾ÖÇø®ÄÉÀÌ¼Ç ÀÌÇØ
__¾ÖÇø®ÄÉÀÌ¼Ç ½ÇÇà
__¾ÖÇø®ÄÉÀ̼ǿ¡ ·Î±×ÀÎÇϱâ
__¹é¿£µå REST API ¾ÈÀüÇÏ°Ô È£ÃâÇϱâ
__¿ä¾à
__Áú¹®
2ºÎ. KeycloakÀ» ÅëÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È
3Àå. °£·«ÇÑ Ç¥ÁØ ¼Ò°³
__OAuth 2.0À» ÅëÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç Á¢±Ù ±ÇÇÑ Àΰ¡
__OpenID Connect¸¦ ÅëÇÑ »ç¿ëÀÚ ÀÎÁõ
__JWT¸¦ ÅäÅ«À¸·Î È°¿ë
__SAML 2.0ÀÌ ¿©ÀüÈ÷ Áß¿äÇÑ ÀÌÀ¯
__¿ä¾à
__Áú¹®
4Àå. OpenID Connect¸¦ È°¿ëÇÑ »ç¿ëÀÚ ÀÎÁõ
__±â¼ú ¿ä±¸ »çÇ×
__OpenID Connect playground ½ÇÇà
__°Ë»ö ¿£µåÆ÷ÀÎÆ® ÀÌÇØ
__»ç¿ëÀÚ ÀÎÁõ
__ID ÅäÅ« ÀÌÇØÇϱâ
____»ç¿ëÀÚ ÇÁ·ÎÆÄÀÏ ¾÷µ¥ÀÌÆ®
____»ç¿ëÀÚ Á¤ÀÇ ¼Ó¼º Ãß°¡
____ID ÅäÅ«¿¡ ¿ªÇÒ Ãß°¡
__UserInfo ¿£µåÆ÷ÀÎÆ® È£Ãâ
__»ç¿ëÀÚ ·Î±×¾Æ¿ô ó¸®
____·Î±×¾Æ¿ô ½ÃÀÛ
____ID ¹× Á¢±Ù ÅäÅ« ¸¸·á È°¿ë
____OIDC ¼¼¼Ç °ü¸® È°¿ë
____OIDC ¹é-ä³Î ·Î±×¾Æ¿ô È°¿ë
____OIDC ÇÁ·ÐÆ®-ä³Î ·Î±×¾Æ¿ô È°¿ë
____·Î±×¾Æ¿ôÀº ¾î¶»°Ô ó¸®ÇØ¾ß Çϴ°¡?
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
5Àå. OAuth 2.0À» È°¿ëÇÑ Á¢±Ù ±ÇÇÑ Àΰ¡
__±â¼ú ¿ä±¸ »çÇ×
__OAuth 2.0 Ç÷¹À̱׶ó¿îµå ½ÇÇà
__Á¢±Ù ÅäÅ« ȹµæ
__»ç¿ëÀÚ µ¿ÀÇ ¿äû
__Á¢±Ù ÅäÅ«¿¡ ºÎ¿©µÈ Á¢±Ù ±ÇÇÑ Á¦ÇÑ
____ÅäÅ« Á¢±ÙÀ» Á¦ÇÑÇϱâ À§ÇÑ ¿Àµð¾ð½º È°¿ë
____¿ªÇÒÀ» »ç¿ëÇØ ÅäÅ« ¾×¼¼½º Á¦ÇÑÇϱâ
____ÅäÅ« Á¢±ÙÀ» Á¦ÇÑÇϱâ À§ÇÑ ¹üÀ§ È°¿ë
__Á¢±Ù ÅäÅ« °ËÁõ
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
6Àå. ´Ù¾çÇÑ ¾ÖÇø®ÄÉÀÌ¼Ç À¯Çü º¸¾È
__±â¼ú ¿ä±¸ »çÇ×
__³»ºÎ ¹× ¿ÜºÎ ¾ÖÇø®ÄÉÀÌ¼Ç ÀÌÇØ
__À¥ ¾ÖÇø®ÄÉÀÌ¼Ç º¸È£
____¼¹ö »çÀ̵å À¥ ¾ÖÇø®ÄÉÀÌ¼Ç º¸È£
____Àü¿ë REST API°¡ Æ÷ÇÔµÈ SPA º¸È£
____Áß°³ REST API¸¦ »ç¿ëÇÏ´Â SPA º¸È£
____¿ÜºÎ REST API°¡ Æ÷ÇÔµÈ SPA º¸È£
__³×ÀÌƼºê ¹× ¸ð¹ÙÀÏ ¾ÖÇø®ÄÉÀÌ¼Ç º¸È£
__REST API ¹× ¼ºñ½º º¸È£
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
7Àå. Keycloak°ú ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
__±â¼ú ¿ä±¸ »çÇ×
__ÅëÇÕ ¾ÆÅ°ÅØó ¼±ÅÃ
__ÅëÇÕ ¿É¼Ç ¼±ÅÃ
__Golang ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
____Golang Ŭ¶óÀ̾ðÆ® ¼³Á¤
__ÀÚ¹Ù ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
____Quarkus »ç¿ë
____SpringBoot »ç¿ë
____Keycloak ¾î´ðÅÍ È°¿ë
__ÀÚ¹Ù½ºÅ©¸³Æ® ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
__Node.js ¾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
____Node.js Ŭ¶óÀ̾ðÆ® »ý¼º
____Node.js ¸®¼Ò½º ¼¹ö »ý¼º
__ÆÄÀ̽㠾ÖÇø®ÄÉÀÌ¼Ç ÅëÇÕ
____ÆÄÀ̽ã Ŭ¶óÀ̾ðÆ® »ý¼º
____ÆÄÀ̽㠸®¼Ò½º ¼¹ö »ý¼º
__¸®¹ö½º ÇÁ·Ï½Ã È°¿ë
__ÀÚü ÅëÇÕ ÄÚµå ±¸ÇöÀ» ±ÇÀåÇÏÁö ¾ÊÀ½
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
8Àå. Àΰ¡ Àü·«
__Àΰ¡ ÀÌÇØÇϱâ
__RBAC È°¿ë
__GBAC È°¿ë
____±×·ì ¸â¹ö½ÊÀ» ÅäÅ«¿¡ ¸ÅÇÎ
__OAuth2 ¹üÀ§ È°¿ë
__ABAC È°¿ë
__ÅëÇÕ Keycloak Àΰ¡ ¼¹ö È°¿ë
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
3ºÎ. Keycloak ¼³Á¤ ¹× °ü¸®
9Àå. ÇÁ·Î´ö¼Ç ȯ°æÀ» À§ÇÑ Keycloak ¼³Á¤
__±â¼ú ¿ä±¸ »çÇ×
__Keycloak È£½ºÆ®³×ÀÓ ¼³Á¤
____ÇÁ·ÐÆ®¿£µå URL ¼³Á¤
____¹é¿£µå URL ¼³Á¤
____admin URL ¼³Á¤
__TLS È°¼ºÈ
__µ¥ÀÌÅͺ£À̽º ¼³Á¤
__Ŭ·¯½ºÅ͸µ È°¼ºÈ
__¸®¹ö½º ÇÁ·Ï½Ã ¼³Á¤
____³ëµå ºÎÇÏ ºÐ»ê
____Ŭ¶óÀ̾ðÆ® Á¤º¸ Àü¼Û
____¼¼¼Ç ¾îÇÇ´ÏƼ À¯Áö
__Keycloak ȯ°æ Å×½ºÆ®
____ºÎÇÏ ºÐ»ê ¹× ½Ã½ºÅÛ ´ëü ÀÛµ¿ Å×½ºÆ®
____ÇÁ·ÐÆ®¿£µå ¹× ¹é¿£µå URLs Å×½ºÆÃ
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
10Àå. »ç¿ëÀÚ °ü¸®
__±â¼ú ¿ä±¸ »çÇ×
__·ÎÄà »ç¿ëÀÚ °ü¸®
____·ÎÄà »ç¿ëÀÚ »ý¼º
____»ç¿ëÀÚ ÀÚ°ÝÁõ¸í °ü¸®
____»ç¿ëÀÚ Á¤º¸ ȹµæ ¹× °ËÁõ
____ÀÚµ¿ µî·Ï È°¼ºÈ
____»ç¿ëÀÚ ¼Ó¼º °ü¸®
__LDAP ¹× ¾×Ƽºê µð·ºÅ͸® ÅëÇÕ
____LDAP ¸ÅÆÛ ÀÌÇØ
____±×·ì µ¿±âÈ
____¿ªÇÒ µ¿±âÈ
__¼µåÆÄƼ ID Á¦°øÀÚ ÅëÇÕ
____OpenID Connect ID Á¦°øÀÚ »ý¼º
__¼Ò¼È ID Á¦°øÀÚ ¿¬µ¿
__»ç¿ëÀÚ µ¥ÀÌÅÍ °ü¸®
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
11Àå. »ç¿ëÀÚ ÀÎÁõ
__±â¼ú ¿ä±¸ »çÇ×
__ÀÎÁõ È帧 ÀÌÇØ
____ÀÎÁõ È帧 ¼³Á¤
__Æнº¿öµå »ç¿ë
____Æнº¿öµå Á¤Ã¥ º¯°æ
____»ç¿ëÀÚ Æнº¿öµå ¸®¼Â
__OTPs »ç¿ë
____OTP Á¤Ã¥ º¯°æ
____»ç¿ëÀÚ°¡ OTP »ç¿ë ¿©ºÎ¸¦ ¼±ÅÃÇÒ ¼ö ÀÖµµ·Ï Çã¿ë
____OTP¸¦ ÅëÇÑ »ç¿ëÀÚ ÀÎÁõ È°¼ºÈ
__À¥ ÀÎÁõ È°¿ë
____ÀÎÁõ È帧¿¡¼ WebAuthn È°¼ºÈ
____º¸¾È ±â±â µî·Ï ¹× ÀÎÁõ
__°·ÂÇÑ ÀÎÁõ »ç¿ë
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
12Àå. ÅäÅ« ¹× ¼¼¼Ç °ü¸®
__±â¼ú ¿ä±¸ »çÇ×
__¼¼¼Ç °ü¸®
____¼¼¼Ç »ý¸íÁֱ⠰ü¸®
____È°¼º ¼¼¼Ç °ü¸®
____»ç¿ëÀÚ ¼¼¼Ç Á¶±â Á¾·á
____ÄíÅ° ¹× ¼¼¼Ç°úÀÇ °ü·Ã¼º ÀÌÇØ
__ÅäÅ« °ü¸®
____ID ÅäÅ« ¹× Á¢±Ù ÅäÅ« »ý¸íÁֱ⠰ü¸®
____¸®ÇÁ·¹½Ã ÅäÅ« »ý¸íÁֱ⠰ü¸®
____¸®ÇÁ·¹½Ã ÅäÅ« ·ÎÅ×ÀÌ¼Ç È°¼ºÈ
____ÅäÅ« Æó±â
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
13Àå. Keycloak È®Àå
__±â¼ú ¿ä±¸ »çÇ×
__¼ºñ½º °ø±ÞÀÚ ÀÎÅÍÆäÀ̽º ÀÌÇØÇϱâ
____»ç¿ëÀÚ Á¤ÀÇ Á¦°øÀÚ ÆÐŰ¡
____»ç¿ëÀÚ Á¤ÀÇ Á¦°øÀÚ ¼³Ä¡
____KeycloakSessionFactory ¹× KeycloakSession ÄÄÆ÷³ÍÆ® ÀÌÇØ
____Á¦°øÀÚÀÇ »ý¸íÁÖ±â ÀÌÇØ
____Á¦°øÀÚ ¼³Á¤
__ÀÎÅÍÆäÀ̽º º¯°æ
____Å׸¶ ÀÌÇØ
____½Å±Ô Å׸¶ »ý¼º ¹× Àû¿ë
____ÅÛÇø´ È®Àå
____Å׸¶ °ü·Ã SPI È®Àå
__ÀÎÁõ È帧 »ç¿ëÀÚ Á¤ÀÇ
__´Ù¸¥ »ç¿ëÀÚ Á¤ÀÇ Æ÷ÀÎÆ® È®ÀÎ
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
4ºÎ. º¸¾È °í·Á »çÇ×
14Àå. Keycloak ¹× ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È
__Keycloak º¸¾È
____Keycloak¿¡ ´ëÇÑ Åë½Å ¾ÏÈ£È
____Keycloak È£½ºÆ® À̸§ ¼³Á¤
____Keycloak¿¡¼ »ç¿ëÇÏ´Â ¼¸í Å° ¼øȯ
____ÁÖ±âÀûÀÎ Keycloak ¾÷µ¥ÀÌÆ®
____¿ÜºÎ ÀúÀå¼ÒÀÇ ½ÃÅ©¸´À» KeycloakÀ¸·Î ·Îµå
____¹æȺ® ¹× ħÀÔ ¹æÁö ½Ã½ºÅÛÀ» ÅëÇÑ Keycloak º¸¾È
__µ¥ÀÌÅͺ£À̽º º¸¾È
____¹æȺ®À» »ç¿ëÇÑ µ¥ÀÌÅͺ£À̽º º¸¾È
____µ¥ÀÌÅͺ£À̽º ÀÎÁõ ¹× Á¢±Ù Á¦¾î È°¼ºÈ
____µ¥ÀÌÅͺ£À̽º ¾ÏÈ£È
__Ŭ·¯½ºÅÍ Åë½Å º¸¾È
____Ŭ·¯½ºÅÍ ÀÎÁõ È°¼ºÈ
____Ŭ·¯½ºÅÍ Åë½Å ¾ÏÈ£È
__»ç¿ëÀÚ °èÁ¤ º¸¾È
__¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È
____À¥ ¾ÖÇø®ÄÉÀÌ¼Ç º¸¾È
____OAuth 2.0 ¹× OpenID Ä¿³ØÆ® º£½ºÆ® ÇÁ·¢Æ¼½º
____Keycloak Ŭ¶óÀ̾ðÆ® ¼³Á¤
__¿ä¾à
__Áú¹®
__Âü°í¹®Çå
__Æò°¡
__ã¾Æº¸±â