±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚcsdn£¬»¥ÁªÍø°²È«Ò»Ö±ÊǸöÖØÒªÎÊÌ⣬Ôõô×öºÃ°²È«ÊÇÒ²ÏàÐÅ´ó¼ÒÔÚ²»¶ÏµÄŬÁ¦ÖУ¬ÎÄÕ¼òµ¥µÄ½éÉÜ£¬Ï£ÍûÈôó¼ÒÓиöеÄÈÏʶ¡£ |
|
ÔÚ Web Ó¦Óÿª·¢ÖУ¬°²È«Ò»Ö±ÊǷdz£ÖØÒªµÄÒ»¸ö·½Ãæ¡£ÃæÏò»¥ÁªÍø¹«ÍøµÄ½Ó¿Ú·þÎñ£¬Èç¹û²»¼Ó·À»¤»áµ¼ÖÂÊý¾Ýй¶ºÍÉÌÒµ·çÏÕ¡£Ó¦ÓõݲȫÐÔ°üÀ¨Óû§ÈÏÖ¤£¨Authentication£©ºÍÓû§ÊÚȨ£¨Authorization£©Á½¸ö²¿·Ö¡£Óû§ÈÏÖ¤Ö¸µÄÊÇÑé֤ij¸öÓû§ÊÇ·ñΪϵͳÖеĺϷ¨Ö÷Ì壬Ҳ¾ÍÊÇ˵Óû§ÄÜ·ñ·ÃÎʸÃϵͳ¡£Óû§ÈÏÖ¤Ò»°ãÒªÇóÓû§ÌṩÓû§ÃûºÍÃÜÂ롣ϵͳͨ¹ýУÑéÓû§ÃûºÍÃÜÂëÀ´Íê³ÉÈÏÖ¤¹ý³Ì¡£Óû§ÊÚȨָµÄÊÇÑé֤ij¸öÓû§ÊÇ·ñÓÐȨÏÞÖ´ÐÐij¸ö²Ù×÷¡£¼òµ¥À´Ëµ£¬ÈÏÖ¤ÊÇָϵͳÐèҪȷÈÏÄãÊÇË£¿¶øÊÚȨÊÇÖ¸ÔÚͨ¹ýÈÏÖ¤Ö®ºó£¬ÄãÄܸÉʲô£¿
ºËÐĸÅÄî
Óû§ÈÏÖ¤¹Ø¼ü¶ÔÏó
Subject£ºÖ÷Ì壬¿ÉÒÔÊÇÓû§£¬Ò²¿ÉÄÜÊdzÌÐò£¬¶¼ÒªÈ¥·ÃÎÊϵͳµÄ×ÊÔ´£¬ÏµÍ³ÐèÒª¶Ôsubject½øÐÐÉí·ÝÈÏÖ¤¡£
Principal£ºÉí·ÝÐÅÏ¢£¬Í¨³£ÊÇΨһµÄ£¬Ò»¸öÖ÷Ì⻹Óжà¸öÉí·ÝÐÅÏ¢£¬µ«¶¼ÓÐÒ»¸öÖ÷Éí·ÝÐÅÏ¢£¨Primary
Principal£©¡£
Credential£ºÆ¾Ö¤ÐÅÏ¢£¬¿ÉÒÔÊÇÃÜÂë¡¢Ö¤Êé¡¢Ö¸ÎÆ¡£
Óû§ÊÚȨ¹Ø¼ü¶ÔÏó
who£ºÖ÷Ì⣬¼´ÉÏÎĵÄsubject
what£º×ÊÔ´£¬resource£¬subject±ØÐë¾ß±¸×ÊÔ´µÄ·ÃÎÊȨÏ޲ſɷÃÎÊ×ÊÔ´¡£
how£ºÈ¨ÏÞ/Ðí¿Épermission£¬Õë¶Ô×ÊÔ´µÄȨÏÞ»òÐí¿É£¬subject¾ßÓÐpermission·ÃÎÊ×ÊÔ´£¬ÈçºÎ·ÃÎÊÐèÒª¶¨Òåpermission¡£
³£¼ûµÄʵÏÖ±ê×¼
Http³£ÓÃÈÏÖ¤·½Ê½
Http BasicÈÏÖ¤£ºÓû§ÃûÃÜÂë°´ÕÕ¸ñʽ¡°Óû§Ãû:ÃÜÂ롱ͨ¹ýBase-64±àÂ룬ͨ¹ýAuthorization
header´«µÝµ½·þÎñ¶Ë£¬·þÎñ¶Ë½âÂë³ÉΪ¡°Óû§Ãû:ÃÜÂ롱¸ñʽ½øÐÐÈÏÖ¤¡£
Http DigestÈÏÖ¤£ºµ±¿Í»§¶ËµÚÒ»´ÎÇëÇó·þÎñ¶Ë×ÊԴʱ£¬·þÎñ¶Ë»á·µ»ØÒ»¸öËæ»úÊý(nonce),
È»ºó¿Í»§¶Ë»áͨ¹ý¶à´ÎMD5¼ÓÃÜÀ´¼ÆËã³öÀ´responseµÄÖµ (response=MD5(HA1:nonce:HA2)),
ÆäÖÐHA1=MD5(username:realm:password), HA2=MD5(method:digestURI).
µ±·þÎñ¶ËÄõ½Õâ¸öresponse£¬ÄÇôËü»á´ÓDBÈ¡³öÓû§ÃûÃÜÂëÀ´×öͬÑùµÄ²Ù×÷À´¿´¼ÆËã³öÀ´µÄresponseÊÇ·ñÒ»Ö£¬Èç¹ûÒ»Ö£¬Ôò±íÃ÷ÈÏ֤ͨ¹ý¡£
Cookies & Session£ºÔÚµÚÒ»´ÎµÇ½ÇëÇóÖд«µÝÓû§ÃûÃÜÂ룬·þÎñ¶ËÔÚУÑé½áÊøºóÉú³ÉÒ»¸ösession-id£¬²¢½«Õâ¸ösession-idºÍÓû§¹ØÁª£¬È»ºóͨ¹ýhttp
responseµÄcookie header·µ»Ø¸ø¿Í»§¶Ë£¬¿Í»§¶ËÖ»ÐèÒª´æ´¢Õâ¸öcookie²¢ÔÚºóÐøµÄÇëÇó¶¼´øÉÏÕâ¸öcookie¾Í¿ÉÒÔ¡£
JWT£¨Json web token£©£ºÒ»ÖÖ°²È«±ê×¼(RFC 7519)¡£·þÎñÆ÷ÈÏÖ¤ÒÔºó£¬Éú³ÉÒ»¸ö
JSON ¶ÔÏ󣬷¢»Ø¸øÓû§£¬Óû§Óë·þÎñ¶ËͨÐŵÄʱºò£¬¶¼Òª·¢»ØÕâ¸ö JSON ¶ÔÏó¡£·þÎñÆ÷Íêȫֻ¿¿Õâ¸öºÏ·¨Ç©ÃûµÄ¶ÔÏóÈ϶¨Óû§Éí·Ý¡£
»¥ÁªÍø³£ÓÃÊÚȨÀíÂÛ
ACL: ¿ØÖÆ·ÃÎÊÁбí(Access Control List) ¡£ACLÊÇÃæÏò"×ÊÔ´"µÄ·ÃÎÊ¿ØÖÆÄ£ÐÍ£¬»úÖÆÊÇÎ§ÈÆ"×ÊÔ´"Õ¹¿ªµÄ¡£ÔÚACLÖУ¬°üº¬Óû§(User)¡¢×ÊÔ´(Resource)¡¢×ÊÔ´²Ù×÷(Operation)Èý¸ö¹Ø¼üÒªËØ¡£Ã¿Ò»Ïî×ÊÔ´£¬¶¼ÅäÓÐÒ»¸öÁÐ±í£¬¼Ç¼ÄÄЩÓû§¿ÉÒÔ¶ÔÕâÏî×ÊÔ´Ö´ÐÐÄÄЩ²Ù×÷¡£µ±ÏµÍ³ÊÔͼ·ÃÎÊÕâÏî×ÊԴʱ£¬»á¼ì²éÕâ¸öÁбíÖÐÊÇ·ñÓйØÓÚµ±Ç°Óû§µÄ²Ù×÷ȨÏÞ¡£
RBAC: »ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆ(Role-BasedAccess Control)¡£RBACÈÏΪÊÚȨʵ¼Ê¾ÍÊÇ
who£¬what£¬how ÈýÕßÖ®¼äµÄ¹ØÏµ£¬¼´ who ¶Ô what ½øÐÐ how µÄ²Ù×÷¡£
OAuth2£ºOAuthÊÇÒ»¸ö¹ØÓÚÊÚȨ£¨authorization£©µÄ¿ª·ÅÍøÂç±ê×¼£¬Ä¿Ç°µÄ°æ±¾ÊÇ2.0°æ¡£
»ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖÆ
RBACÈÏΪȨÏ޵Ĺý³Ì¿ÉÒÔ³éÏó¸ÅÀ¨Îª£ºÅжϡ°WhoÊÇ·ñ¿ÉÒÔ¶ÔWhat½øÐÐHowµÄ·ÃÎʲÙ×÷£¨Operator£©¡±Õâ¸öÂß¼±í´ïʽµÄÖµÊÇ·ñΪTrueµÄÇó½â¹ý³Ì¡£¼´½«È¨ÏÞÎÊÌâת»»ÎªWho¡¢What¡¢HowµÄÎÊÌâ¡£who¡¢what¡¢how¹¹³ÉÁË·ÃÎÊȨÏÞÈýÔª×é¡£
RBACµÄºËÐÄÄ£ÐÍͼÈçÏ£º

RBACµÄ¹Ø×¢µãÔÚÓÚ Role ºÍ User, Permission µÄ¹ØÏµ¡£³ÆÎª User assignment(UA)
ºÍ Permission assignment(PA)¡£¹ØÏµµÄ×óÓÒÁ½±ß¶¼ÊÇ Many-to-Many
¹ØÏµ¡£¾ÍÊÇ user ¿ÉÒÔÓжà¸ö role£¬role ¿ÉÒÔ°üÀ¨¶à¸ö user¡£User ͨ¹ý³ÉΪ Role
¶øµÃµ½ÕâЩ Role µÄ Permission£¬Role ¸ôÀëÁË User ºÍ Permission
µÄÂß¼¹ØÏµ¡£
ʵÌå¹ØÏµÍ¼ÈçÏ£º

Óû§£¨user£©£ºÈË¡¢»úÆ÷¡¢ÍøÂçµÈ£¬½øÐÐ×ÊÔ´»ò·þÎñ·ÃÎʵÄʵʩÖ÷Ìå
½ÇÉ«£¨role£©£ºÒ»¸ö¹¤×÷Ö°ÄÜ£¬±»ÊÚÓè½ÇÉ«µÄÓû§½«¾ßÓÐÏàÓ¦µÄȨÍþºÍÔðÈÎ
»á»°£¨session£©£º´ÓÓû§µ½Æä¼¤»îµÄ½ÇÉ«¼¯ºÏµÄÒ»¸öÓ³Éä
ȨÏÞ£¨permission£©£º¶ÔÊÜRBAC±£»¤µÄÒ»¸ö»ò¶à¸ö¶ÔÏóÖ´ÐÐij¸ö²Ù×÷µÄÐí¿É
²Ù×÷£¨operation£©£ºÒ»¸ö³ÌÐò¿ÉÖ´ÐеÄÓ³Ïñ£¬±»µ÷ÓÃʱΪÓû§Ö´ÐÐijЩ¹¦ÄÜ
¿ÍÌ壨object£©£ºÐèÒª½øÐзÃÎÊ¿ØÖƵÄϵͳ×ÊÔ´£¬ÀýÈ磺Îļþ¡¢´òÓ¡»ú¡¢Êý¾Ý¿â¼Ç¼µÈ
ij¸öÖ÷Ì壨subject£©¶Ôij¸ö¿ÍÌ壨object£©ÐèҪʵʩijÖÖ²Ù×÷£¨operation£©£¬ÏµÍ³¶ÔÕâÖÖ²Ù×÷µÄÏÞÖÆ¾ÍÊÇȨÏÞ¿ØÖÆ¡£ÔÚÒ»¸ö°²È«µÄϵͳÖУ¬Í¨¹ýÈÏÖ¤À´È·ÈÏÖ÷ÌåµÄÉí·Ý¡£¿ÍÌåÊÇÒ»ÖÖ×ÊÔ´£¬ÊÇÖ÷Ìå·¢ÆðÇëÇóµÄ¶ÔÏó¡£Ö÷ÌåËùÄÜ×öʲô£¬¾ÍÊÇȨÏÞ£¬È¨ÏÞ¿ÉÒÔϸ·ÖΪ²»Í¬µÄÄÜÁ¦£¬ÀýÈ磺ÔÚLinuxÎļþϵͳÖУ¬½«È¨ÏÞ·ÖΪ
¶Á¡¢Ð´¡¢Ö´ÐÐ ÈýÖÖÄÜÁ¦¡£
ÊÊÓÃÓÚRBACÄ£Ð͵ĿªÔ´¿ò¼Ü
Apache Shiro
ShiroÊÇÒ»¸öÇ¿´ó¶øÁé»îµÄ¿ªÔ´°²È«¿ò¼Ü£¬Äܹ»·Ç³£ÇåÎúµÄ´¦ÀíÈÏÖ¤¡¢ÊÚȨ¡¢¹ÜÀí»á»°ÒÔ¼°ÃÜÂë¼ÓÃÜ¡£ShiroÔÚ±£³ÖÇ¿´ó¹¦ÄܵÄͬʱ£¬»¹ÔÚ¼òµ¥ÐÔºÍÁé»îÐÔ·½ÃæÓµÓо޴óÓÅÊÆ¡£Shiro¶Ô½ÇÉ«µÄ¼òµ¥µÄǩȨ£¨·ÃÎÊ¿ØÖÆ£©£¬Ö§³ÖϸÁ£¶ÈµÄǩȨ£»²»¸úÈκεĿò¼Ü»òÕßÈÝÆ÷À¦°ó£¬¿ÉÒÔ¶ÀÁ¢ÔËÐС£

Spring Security
Spring SecurityÌṩÁËÒ»Ì× Web Ó¦Óð²È«ÐÔµÄÍêÕû½â¾ö·½°¸¡£ÔÚÓû§ÈÏÖ¤·½Ã棬Spring
Security ¿ò¼ÜÖ§³ÖÖ÷Á÷µÄÈÏÖ¤·½Ê½£¬°üÀ¨ HTTP »ù±¾ÈÏÖ¤¡¢HTTP ±íµ¥ÑéÖ¤¡¢HTTP ÕªÒªÈÏÖ¤¡¢OpenID
ºÍ LDAP µÈ¡£ÔÚÓû§ÊÚȨ·½Ã棬Spring Security ÌṩÁË»ùÓÚ½ÇÉ«µÄ·ÃÎÊ¿ØÖƺͷÃÎÊ¿ØÖÆÁÐ±í£¨Access
Control List£¬ACL£©£¬¿ÉÒÔ¶ÔÓ¦ÓÃÖеÄÁìÓò¶ÔÏó½øÐÐϸÁ£¶ÈµÄ¿ØÖÆ¡£
Apache Shiro VS Spring Security
³ýÁ˲»ÄÜÍÑÀëSpring£¬shiroµÄ¹¦ÄÜSpring Security¶¼ÓС£¶øÇÒSpring Security¶ÔOauth¡¢OpenIDÒ²ÓÐÖ§³Ö,ShiroÔòÐèÒª×Ô¼ºÊÖ¶¯ÊµÏÖ¡£µ«Apache
ShiroµÄѧϰÄѶÈÒªµ×ºÜ¶à£¬Èç¹û¶ÔApache Shiro ºÍ Spring Security¶¼²»ÊìµÄÍŶӣ¬½¨ÒéÖ±½ÓÉÏÊÖshiro¡£
OAuth2.0
OAuth ÊÇÒ»¸öÔÚ²»ÌṩÓû§ÃûºÍÃÜÂëµÄÇé¿öÏ£¬ÊÚȨµÚÈý·½Ó¦Ó÷ÃÎÊ Web ×ÊÔ´µÄ°²È«ÐÒé¡£ÀýÈçÒ»¸ö
OAuth ³¡¾°£ºÓû§½«ÕÕÆ¬´æ´¢ÔÚGoogle£¬È»ºóÔÚ"ÔÆ³åÓ¡"µÄÍøÕ¾£¬½«ÕÕÆ¬³åÓ¡³öÀ´¡£ÄÇô£¬"ÔÆ³åÓ¡"ÍøÕ¾ÐèÒª»ñµÃÓû§µÄÊÚȨÀ´¶ÁÈ¡GoogleÉϵÄÓû§ÕÕÆ¬¡£
OAuthÔÚ"¿Í»§¶Ë"Óë"·þÎñÌṩÉÌ"Ö®¼ä£¬ÉèÖÃÁËÒ»¸öÊÚȨ²ã£¨authorization
layer£©¡£¡°¿Í»§¶Ë"²»ÄÜÖ±½ÓµÇ¼"·þÎñÌṩÉÌ¡±£¬Ö»ÄܵǼÊÚȨ²ã£¬ÒԴ˽«Óû§Óë¿Í»§¶ËÇø·Ö¿ªÀ´¡£"¿Í»§¶Ë"µÇ¼ÊÚȨ²ãËùÓõÄÁîÅÆ£¨token£©£¬ÓëÓû§µÄÃÜÂ벻ͬ¡£Óû§¿ÉÒÔÔڵǼµÄʱºò£¬Ö¸¶¨ÊÚȨ²ãÁîÅÆµÄȨÏÞ·¶Î§ºÍÓÐЧÆÚ¡£
OAuth µÄһЩÃû´Ê£º
Third-party application£ºµÚÈý·½Ó¦ÓóÌÐò£¬ÓÖ³Æ ¡°Client¡± ¿Í»§¶Ë
HTTP Service£ºHTTP·þÎñÌṩÉÌ£¬ÉÏÀýÖеÄGoogle
Resource Owner£º×ÊÔ´ËùÓÐÕߣ¬¾ÍÊÇÓû§
User Agent£ºÓû§´úÀí£¬¾ÍÊÇä¯ÀÀÆ÷
Authorization server£ºÈÏÖ¤·þÎñÆ÷£¬¼´·þÎñÉÌÌṩÉÌרÃÅ´¦ÀíÈÏÖ¤µÄ·þÎñÆ÷
Resource server£º×ÊÔ´·þÎñÆ÷£¬¼´·þÎñÌṩÉÌ´æ·ÅÓû§Éú³ÉµÄ×ÊÔ´µÄ·þÎñÆ÷
¿Í»§¶Ë±ØÐëµÃµ½Óû§µÄÊÚȨ£¨authorization grant£©£¬²ÅÄÜ»ñµÃÁîÅÆ£¨access token£©¡£OAuth
2.0¶¨ÒåÁËËÄÖÖÊÚȨ·½Ê½¡£
ÊÚȨÂëģʽ£¨authorization code£©
¼ò»¯Ä£Ê½£¨implicit£©
ÃÜÂëģʽ£¨resource owner password credentials£©
¿Í»§¶Ëģʽ£¨client credentials£©
ÅÄÅÄ´û¼Ü¹¹Ê¦Ñ¸øÁËÒ»¸öÁ÷³ÌͼÀ´°ïÖúÅжÏʲôÑùµÄ³¡¾°ÏÂÐèÒª²ÉÓÃÄÄÖÖOAuth2µÄworkflow£º

Spring Cloud Security
Spring Cloud SecurityÌṩÁËÒ»×éÓÃÓÚ¹¹½¨°²È«Ó¦ÓóÌÐòºÍ·þÎñµÄ¼òµ¥¿ò¼Ü¡£»ùÓÚSpring
BootºÍSpring Security OAuth2£¬ÎÒÃÇ¿ÉÒÔ¿ìËÙ´´½¨ÊµÏÖ³£¼ûģʽµÄϵͳ£¬Èçµ¥µãµÇ¼¡¢ÁîÅÆË¢ÐºÍÁîÅÆ½»»»¡£
Spring Security VS Spring Cloud Security
Spring Security½â¾öµÄÊǵ¥Ìå·þÎñµÄÊÚȨÈÏÖ¤ÎÊÌ⣬Spring Cloud Security½â¾öµÄÊÇ·Ö²¼Ê½¼Ü¹¹ÏµÍ³¼äÊÚȨÎÊÌâ¡£ÔÚʹÓÃSpring
Cloud Security OAuth2.0µÄ΢·þÎñÌåϵÄÚ²¿£¬ÒÀÈ»ÐèҪʹÓÃSpring SecurityʵÏÖ×ÊÔ´·þÎñÄڵķÃÎÊȨÏÞ¿ØÖÆ¡£
|