±à¼ÍƼö: |
±¾ÎÄÀ´×ÔÓÚsegmentfault
£¬±¾ÎÄÓë´ó¼Ò·ÖÏíÁ˹ØÓÚ΢·þÎñ·ÃÎʰ²È«Éè¼Æ·½°¸µÄ̽Ë÷Óëʵ¼ù¡£ |
|
ÎÒÃÇÊ×ÏÈ´Ó´«Í³µ¥ÌåÓ¦Óüܹ¹ÏµķÃÎʰ²È«Éè¼ÆËµÆð£¬È»ºó·ÖÎöÏÖ´ú΢·þÎñ¼Ü¹¹Ï£¬·ÃÎʰ²È«Éæ¼°µÄÔÔò£¬½Ó×ÅÌÖÂÛĿǰ³£Óõļ¸ÖÖ΢·þÎñ¼Ü¹¹ÏµķÃÎʰ²È«Éè¼Æ·½°¸¡£×îºó£¬ÏêÎöSpring
Cloud΢·þÎñ¼Ü¹¹ÏÂÈçºÎ½â¾ö·ÃÎʰ²È«µÄÎÊÌâ¡£
Ò»¡¢´«Í³µ¥ÌåÓ¦ÓõķÃÎʰ²È«Éè¼Æ

ÉÏÃæµÄʾÒâͼչʾÁ˵¥ÌåÓ¦ÓõķÃÎÊÂß¼¡£Óû§Í¨¹ý¿Í»§¶Ë·¢³öhttp»òÕßhttpsÇëÇ󣬾¹ý¸ºÔؾùºâºó£¬µ¥ÌåÓ¦ÓÃÊÕµ½ÇëÇó¡£½Óמ¹ýauth²ã£¬½øÐÐÉí·ÝÑéÖ¤ºÍȨÏÞÅú×¼£¬ÕâÀһ°ã»áÓиúºó¶ËÊý¾Ý¿âµÄ½»»¥¡£Í¨¹ýºó£¬½«ÇëÇó·Ö·¢µ½¶ÔÓ¦µÄ¹¦ÄÜÂß¼²ãÖÐÈ¥¡£Íê³ÉÏà¹Ø²Ù×÷ºó£¬·µ»Ø½á¹û¸ø¿Í»§¶Ë¡£
´«Í³µ¥ÌåÓ¦ÓõķÃÎʰ²È«Éè¼Æ¡ª¡ªÔÔò

´ÓÒÔÉÏ·ÖÎö¿ÉÒÔ¿´µ½£¬´«Í³µ¥ÌåÓ¦ÓõķÃÎʰ²È«Éè¼ÆÔÔòΪ£º
µÚÒ»£¬Ã¿´ÎµÄÓû§ÇëÇó¶¼ÐèÒªÑéÖ¤ÊÇ·ñ°²È«£¬ÕâÀï¿ÉÒÔ·ÖÁ½ÖÖÇé¿ö£º
Ò»ÖÖÊÇûÓÐsessionµÄÇëÇó£¬ÐèÒª¾¹ý¼¸¸ö²½ÖèÍê³Ésession»¯¡£Ò»°ãΪÑéÖ¤µ±Ç°Óû§µÄcredential£¬»ñÈ¡µ±Ç°Óû§µÄidentity£¬ÕâÁ½²½¶¼ÐèÒª·ÃÎÊÊý¾Ý¿âµÈ³Ö¾Ã»¯¶ÔÏóÀ´Íê³É£¬×îºóÒ»²½ÊÇΪµ±Ç°¿ÉÓô´½¨session£¬·µ»Ø¸ø¿Í»§¶Ëºó£¬ÆôÓøÃsession¡£
ÁíÒ»ÖÖÊÇÓÐsessionµÄÇëÇó£¬Ö»ÐèÑéÖ¤ÇëÇóÖе±Ç°sessionµÄÓÐЧÐÔ£¬¼´¿É¼ÌÐøÇëÇó¡£
µÚ¶þ£¬Óû§µÄ²Ù×÷ÇëÇó¶¼ÔÚºó¶Ëµ¥¸ö½ø³ÌÖÐÖ´ÐÐÍê³É£¬ÍêÈ«ÒÀÀµºó¶Ëµ÷Ó÷½·¨µÄ¿É¿¿ÐÔ¡£Ò»µ©³ö´í£¬Ó¦ÓÃÊÇÎÞ·¨ÔÙ´ÎÖØ¸´ÇëÇó¡£
´«Í³µ¥ÌåÓ¦ÓõķÃÎʰ²È«Éè¼Æ¡ª¡ªÓÅÊÆºÍ×¢Òâµã

С½á£¬´«Í³µ¥ÌåÓ¦ÓÃÓÉÓÚÉè¼ÆÏà¶Ô¼òµ¥µ¥Ò»£¬±©Â¶¸øÍâ½çµÄÈë¿ÚÏà¶Ô½ÏÉÙ£¬´Ó¶ø¾ßÓб»¹¥»÷²¢Ôì³ÉΣº¦ÐԵĿÉÄÜСµÄÓÅÊÆ¡£
Ò²ÕýÊÇÓÉÓÚµ¥ÌåÓ¦Óüòµ¥µ¥Ò»µÄÌØµã£¬ÐèҪעÒâÏà¹ØÎÊÌ⣺
Ó¦Óúó¶Ë±£´æÁËËùÓеÄcredentialµÈÃô¸ÐÐÅÏ¢
Ò»µ©ÈëÇÖÁ˶ÔÕâ¸öÓ¦ÓõÄÇëÇ󣬾ÍÓпÉÄÜÄõ½ËùÓеı£´æÔÚºó¶ËµÄÐÅÏ¢
Ó¦ÓõÄÿ´Î²Ù×÷Ò»°ã¶¼ÐèÒªºÍÊý¾Ý¿â½øÐн»»¥£¬Ôì³ÉÊý¾Ý¿â¸ºÔرä¸ß
¶þ¡¢Î¢·þÎñ¼Ü¹¹Ï£¬·ÃÎʰ²È«Éè¼ÆÔÔò

ÏÈÀ´¿´ÏÂÕâÕŵäÐ͵Ä΢·þÎñÉè¼Æ¼Ü¹¹Í¼£¬ÈçͼËùʾ£¬ÓÐÒÔϼ¸µãÌØÕ÷£º
ÿ¸ö·þÎñÖ»ÓÐȨÏÞÈ¥²Ù×÷×Ô¼º¸ºÔðµÄÄDz¿·Ö¹¦ÄÜ¡£
Óû§ÇëÇóµÄÉí·ÝÑéÖ¤ºÍȨÏÞÅú×¼¶¼ÓɶÀÁ¢µÄgateway·þÎñÀ´±£ÕÏ
¶ÔÍâ·þÎñµÄLB²ãÎÞ·¨Ö±½ÓÓëÌṩҵÎñ·þÎñµÄÓ¦ÓÃ²ã½øÐзÃÎÊ

´ÓÉÏÃæµÄÌØÕ÷·ÖÎöÀ´¿´£¬ÏëÒª¸ø³öÒ»·Ý·ÃÎʰ²È«Éè¼ÆµÄÔÔò˵Ã÷£¬¾ÍÒª¿´¿´Î¢·þÎñ¼Ü¹¹Ï£¬·ÃÎʰ²È«ÓÐÄÄЩʹµã£¬ÒÔÏÂÂÞÁÐÁ˼¸µã£º
µ¥µãµÇ¼£¬¼´ÔÚ΢·þÎñÕâÖÖ¶à¶ÀÁ¢·þÎñµÄ¼Ü¹¹Ï£¬ÊµÏÖÓû§Ö»ÐèÒªµÇ¼һ´Î¾ÍÄÜ·ÃÎÊËùÓÐÏ໥ÐÅÈεÄÓ¦ÓÃϵͳ
΢·þÎñ¼Ü¹¹ÏµÄÓ¦ÓÃÒ»°ã¶¼ÊÇÎÞ״̬µÄ£¬µ¼ÖÂÓû§µÄÇëÇóÿ´Î¶¼ÐèÒª¼øÈ¨£¬¿ÉÄÜÒý·¢Auth·þÎñµÄÐÔÄÜÆ¿¾±
΢·þÎñ¼Ü¹¹Ï£¬Ã¿¸ö×é¼þ¶¼¹ÜÀíן÷×ԵŦÄÜȨÏÞ£¬ÕâÖÖϸÁ£¶ÈµÄ¼øÈ¨»úÖÆÐèÒªÊÂÏÈÁ¼ºÃµÄ¹æ»®
΢·þÎñ¼Ü¹¹Ï£¬ÐèÒª¿¼Âǵ½ÄÇЩ·Çä¯ÀÀÆ÷¶ËµÄ¿Í»§ÇëÇó£¬ÊÇ·ñ¾ßÓÐÁ¼ºÃµÄ¿É²Ù×÷ÐÔ
¸ù¾Ýʵ¼ÊÇé¿ö£¬»¹ÓÐһЩÆäËûÍ´µã£¬ÕâÀï²»ÔÙһһ׸Êö£¬¶øÕâЩʹµã£¬¾ÍÐγÉÁËÎÒÃÇÔÚΪ΢·þÎñ¼Ü¹¹Éè¼Æ·ÃÎʰ²È«µÄÔÔò¡£
Èý¡¢Î¢·þÎñ¼Ü¹¹Ï£¬³£ÓõķÃÎʰ²È«Éè¼Æ·½°¸
HTTP Basic Authentication + Independent Auth DB
HTTP Basic Authentication + Central Auth DB
API Tokens
SAML
ÕâÀïÁгö4ÖÖ£¬Ê×Ïȼòµ¥½éÉÜÏ£¬È»ºóÒ»Ò»ÐðÊö¡£
µÚÒ»ÖÖ£¬Ê¹ÓÃHTTP Basic AuthÐÒ飬¼ÓÉ϶ÀÁ¢µÄAuthÊý¾Ý¿â¡£
µÚ¶þÖÖ£¬Ò²ÊÇʹÓÃHTTP Basic AuthÐÒ飬¸úµÚÒ»ÖÖ²»Í¬µÄÊÇ£¬Ê¹Óü¯ÖÐʽµÄAuthÊý¾Ý¿â
µÚÈýÖÖ£¬API TokensÐÒ飬ÕâÖÖ´ó¼ÒÓ¦¸Ã±È½ÏÊìϤ£¬ºÜ¶à¹«ÓзþÎñ£¨±ÈÈçGithub¡¢TwitterµÈ£©µÄAPI¶¼ÊÇÓÃÕâÖÖ·½Ê½¡£
µÚËÄÖÖ£¬SAML£¬¼´Security Assertion Markup Language£¬·Òë¹ýÀ´£¬ÊÇ¡º°²È«ÉùÃ÷±ê¼ÇÓïÑÔ¡»£¬ËüÊÇ»ùÓÚXMLµÄÒ»ÖÖÐÒ飬ÆóÒµÄÚʹÓõý϶ࡣ
ÏÂÃæÒ»Ò»×ö½éÉÜ¡£
΢·þÎñ³£Ó÷ÃÎʰ²È«Éè¼Æ·½°¸¡ª¡ªBasic Auth + Independent Auth DB

µÚÒ»ÖÖ£¬ÈçÉÏʾÒâͼËùʾ£¬Ê¹ÓÃBasic AuthÐÒ飬ÅäºÏÿ¸ö·þÎñ×Ô¼º¶¼ÓµÓд洢CredentialÃô¸ÐÊý¾ÝµÄÊý¾Ý¿â£¨»òÕ߯äËû³Ö¾Ã»¯²Ö¿â£©¡£
¼òµ¥½éÉÜÏÂBasic AuthÐÒ飬ËüÊÇÔÚÓû§µÄÇëÇóÖÐÌí¼ÓÒ»¸öAuthorizationÏûϢͷ£¬Õâ¸öÏûϢͷµÄÖµÊÇÒ»¸ö¹Ì¶¨¸ñʽ£º
Basic base64encode(username+¡°:¡±+password)
ÍêÕûµÄÏûϢͷÁÐ×ÓΪ£º
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Basic AuthÐÒé»ù±¾Éϱ»ËùÓÐÁ÷ÐеÄÍøÒ³ä¯ÀÀÆ÷¶¼Ö§³Ö¡£
ÕâÖÖ·½°¸µÄÌØµã£º
ÿ¸öÌṩ¹¦ÄܵķþÎñ¶¼ÓµÓÐ×Ô¼º¶ÀÁ¢µÄ¼øÈ¨ºÍÊÚȨ»úÖÆ
ÿ¸öÌṩ¹¦ÄܵķþÎñ¶¼ÓµÓÐ×Ô¼º¶ÀÁ¢µÄÊý¾Ý¿â£¬À´±£´æÃô¸ÐÐÅÏ¢
ÿ´ÎÓû§ÇëÇó¶¼ÐèҪЯ´øÓû§µÄcredentialÀ´Íê³É²Ù×÷
С½áÏÂʹÓÃÕâÖÖ·½°¸µÄºÃ´¦£º
΢·þÎñµÄÓ¦ÓÿÉÒÔʵÏÖ100%ÎÞ״̬»¯
»ùÓÚBasic Auth¿ª·¢¼òµ¥
ͬʱ£¬Ð¡½áÏÂʹÓÃÕâÖÖ·½°¸ÐèҪעÒâµÄµØ·½£º
ÓÉÓÚÿ¸ö·þÎñ¶¼ÓÐ×Ô¼º´æ´¢credentialµÄ»úÖÆ£¬ÐèÒªÊÂÏÈΪÿ¸ö·þÎñÉè¼ÆºÃÈçºÎ´æ´¢ºÍ²éÕÒÓû§µÄCredential
ÓÉÓÚÿ´ÎÓû§ÇëÇó¶¼»áЯ´øÓû§µÄCredential£¬ÐèÒªÊÂÏÈÉè¼ÆºÃÈçºÎ¹ÜÀí¼øÈ¨»úÖÆ
΢·þÎñ³£Ó÷ÃÎʰ²È«Éè¼Æ·½°¸¡ª¡ªBasic Auth + Central Auth DB

µÚ¶þÖÖ£¬ÈçÉÏʾÒâͼËùʾ£¬Ê¹ÓÃBasic AuthÐÒ飬ÓëµÚÒ»ÖÖ·½°¸Ïà±È£¬Ã¿¸ö·þÎñ¹²ÓÃÓÐͬһ¸öAuth
DB¡£
µÚ¶þÖÖ·½°¸µÄÌØµãºÍµÚÒ»ÖÖºÜÏàËÆ£º
ÿ¸öÌṩ¹¦ÄܵķþÎñ¶¼ÓµÓÐ×Ô¼º¶ÀÁ¢µÄ¼øÈ¨ºÍÊÚȨ»úÖÆ
ÿ¸öÌṩ¹¦ÄܵķþÎñ¹²ÓÃͬһ¸öDB£¬À´±£´æCredentialµÈÃô¸ÐÐÅÏ¢
ÿ´ÎÓû§ÇëÇó¶¼ÐèҪЯ´øÓû§µÄcredentialÀ´Íê³É²Ù×÷
С½áÏÂʹÓõڶþÖÖ·½°¸µÄºÃ´¦£º
³ýÁËÓµÓеÚÒ»ÖÖ·½°¸ÏàËÆµÄºÃ´¦Í⣬ÓÉÓÚ¹²ÓÃÁËͬһ¸ö³Ö¾Ã»¯²Ö¿âÀ´¹ÜÀíÓû§ÐÅÏ¢£¬¼ò»¯ÁËÔÀ´¶ÀÁ¢¹ÜÀíµÄ»úÖÆ
ͬʱ£¬Ð¡½áÏÂʹÓÃÕâÖÖ·½°¸ÐèҪעÒâµÄµØ·½£º
ÖÐÐÄ»¯Auth DB»á±»Ã¿´ÎÓû§ÇëÇóÀ´·ÃÎÊÁ¬½Ó£¬¿ÉÄÜÒý·¢AuthDBÐÔÄÜÆ¿¾±
ÐèÒªÔÚÿ¸ö·þÎñÖÐʵÏÖ¶Ô¹²ÓÐAuth DB²éÕÒÓû§ÐÅÏ¢µÄÂß¼
΢·þÎñ³£Ó÷ÃÎʰ²È«Éè¼Æ·½°¸¡ª¡ªAPI Tokens

µÚÈýÖÖ£¬ÈçÉÏʾÒâͼËùʾ£¬Ê¹ÓÃToken BasedÐÒéÀ´¶ÔÓû§ÇëÇó½øÐвÙ×÷¼øÈ¨¡£
¼òµ¥½éÉÜÏÂ×î»ù±¾µÄToken BasedµÄ½»»¥·½Ê½£º
Óû§Ê¹Óðüº¬Óû§ÃûºÍÃÜÂëµÄcredential´Ó¿Í»§¶Ë·¢Æð×ÊÔ´ÇëÇó
ºó¶Ë½ÓÊÜÇëÇó£¬Í¨¹ýÊÚȨÖÐÐÄ£¬Éú²úÓÐЧtoken×Ö·û´®£¬·µ»Ø¸ø¿Í»§¶Ë
¿Í»§¶Ë»ñµÃtokenºó£¬Ôٴη¢³ö×ÊÔ´ÇëÇó
ºó¶Ë½ÓÊÜ´øtokenµÄÇëÇó£¬Í¨¹ýÊÚȨÖÐÐÄ£¬»ñÈ¡Ïà¹Ø×ÊÔ´£¬·µ»Ø¸ø¿Í»§¶Ë
Òµ½ç³£ÓõÄOAuth¾ÍÊÇ»ùÓÚToken BasedÕâÌ×Âß¼£¬ÊµÏֵĻ¥ÁªÍø¼¶µÄ¼øÈ¨»úÖÆ¡£
µÚÈýÖÖ·½°¸µÄÌØµãÃ÷ÏÔ£º
ʹÓÃtokenÀ´½øÐмøÈ¨£¬Ìæ»»Óû§±¾ÉíµÄÓû§ÃûºÍÃÜÂ룬Ìá¸ßÁ˽»»¥°²È«ÐÔ
ÿ´ÎÓû§ÇëÇóÐèҪЯ´øÓÐЧtoken£¬ÓëAuth·þÎñ½øÐн»»¥ÑéÖ¤
С½áÏÂʹÓõÚÈýÖÖ·½°¸µÄºÃ´¦£º
ÓÉÓÚʹÓÃÁËtokenÀ´¼øÈ¨£¬ÒµÎñ·þÎñ²»»á¿´µ½Óû§µÄÃô¸ÐÐÅÏ¢
ͬʱ£¬Ð¡½áÏÂʹÓÃÕâÖÖ·½°¸ÐèҪעÒâµÄµØ·½£º
Auth·þÎñ¿ÉÄÜÐèÒª´¦Àí´óÁ¿µÄÉú²útokenµÄ²Ù×÷
΢·þÎñ³£Ó÷ÃÎʰ²È«Éè¼Æ·½°¸¡ª¡ªSAML

µÚËÄÖÖ£¬ÈçÉÏʾÒâͼËùʾ£¬Ê¹ÓÃSAMLÐÒéÀ´¶ÔÓû§ÇëÇó½øÐвÙ×÷¼øÈ¨¡£ËüÊÇÒ»¸ö»ùÓÚXMLµÄ±ê×¼£¬ÓÃÓÚÔÚ²»Í¬µÄ°²È«Óò(security
domain)Ö®¼ä½»»»ÈÏÖ¤ºÍÊÚȨÊý¾Ý¡£ÔÚSAML±ê×¼¶¨ÒåÁËÉí·ÝÌṩÕß(identity provider)ºÍ·þÎñÌṩÕß(service
provider)£¬ÕâÁ½Õß¹¹³ÉÁËÇ°ÃæËù˵µÄ²»Í¬µÄ°²È«Óò¡£
ÒÔÉÏͼGoogleÌṩµÄApps SSOµÄ»úÖÆ£¬¼òµ¥½éÉÜÏÂSAML¼øÈ¨µÄ½»»¥·½Ê½£º
Óû§ÇëÇó·ÃÎÊ×Ô½¨µÄgoogle application
µ±Ç°application Éú³ÉÒ»¸ö SAML Éí·ÝÑéÖ¤ÇëÇó¡£SAML ÇëÇ󽫽øÐбàÂ벢ǶÈëµ½SSO
·þÎñµÄÍøÖ·ÖС£
µ±Ç°application½«Öض¨Ïò·¢Ë͵½Óû§µÄä¯ÀÀÆ÷¡£Öض¨ÏòÍøÖ·°üº¬Ó¦ÏòSSO ·þÎñÌá½»µÄ±àÂë
SAML Éí·ÝÑéÖ¤ÇëÇó¡£
SSO£¨Í³Ò»ÈÏÖ¤ÖÐÐÄ»ò½ÐIdentity Provider£©½âÂë SAML ÇëÇ󣬲¢ÌáÈ¡µ±Ç°applicationµÄ
ACS£¨ÉùÃ÷¿Í»§·þÎñ£©ÍøÖ·ÒÔ¼°Óû§µÄÄ¿±êÍøÖ·£¨RelayState ²ÎÊý£©¡£È»ºó£¬Í³Ò»ÈÏÖ¤ÖÐÐĶÔÓû§½øÐÐÉí·ÝÑéÖ¤¡£
ͳһÈÏÖ¤ÖÐÐÄÉú³ÉÒ»¸ö SAML ÏìÓ¦£¬ÆäÖаüº¬¾¹ýÑéÖ¤µÄÓû§µÄÓû§Ãû¡£°´ÕÕ SAML 2.0 ¹æ·¶£¬´ËÏìÓ¦½«Ê¹ÓÃͳһÈÏÖ¤ÖÐÐĵÄ
DSA/RSA ¹«Ô¿ºÍ˽Կ½øÐÐÊý×ÖÇ©Ãû¡£
ͳһÈÏÖ¤ÖÐÐÄ¶Ô SAML ÏìÓ¦ºÍ RelayState ²ÎÊý½øÐбàÂ룬²¢½«¸ÃÐÅÏ¢·µ»Øµ½Óû§µÄä¯ÀÀÆ÷¡£Í³Ò»ÈÏÖ¤ÖÐÐÄÌṩÁËÒ»ÖÖ»úÖÆ£¬ÒÔ±ãä¯ÀÀÆ÷¿ÉÒÔ½«¸ÃÐÅϢת·¢µ½µ±Ç°application
ACS¡£
µ±Ç°applicationʹÓÃͳһÈÏÖ¤ÖÐÐĵĹ«Ô¿ÑéÖ¤ SAML ÏìÓ¦¡£Èç¹û³É¹¦ÑéÖ¤¸ÃÏìÓ¦£¬ACS
Ôò»á½«Óû§Öض¨Ïòµ½Ä¿±êÍøÖ·¡£
Óû§½«Öض¨Ïòµ½Ä¿±êÍøÖ·²¢µÇ¼µ½µ±Ç°application¡£
ĿǰSAMLÔÚÒµ½çÒ²ÓÐÏ൱µÄʹÓöȣ¬°üÀ¨IBM WeblogicµÈ²úÆ·¡£
µÚËÄÖÖ·½°¸µÄÌØµãÓУº
ÓÉIdentity ProviderÌṩ¿ÉÐŵÄÇ©ÃûÉùÃ÷
·þÎñµÄ·ÃÎʰ²È«ÓÉ¿ÉÐŵÄIdentity ProviderÌṩ
С½áÏÂʹÓõÚËÄÖÖ·½°¸µÄºÃ´¦£º±ê×¼µÄ¿ÉÐÅ·ÃÎÊÄ£ÐÍ
ͬʱ£¬Ð¡½áÏÂʹÓÃÕâÖÖ·½°¸ÐèҪעÒâµÄµØ·½£º
»ùÓÚXMLÐÒ飬´«ÊäÏà¶Ô¸´ÔÓ
¶Ô·Çä¯ÀÀÆ÷¿Í»§¶ËÊÊÅä²»·½±ã
ËÄ¡¢Spring Cloud Security½â¾ö·½°¸
Spring Cloud SecurityÌØµãÓУº
»ùÓÚOAuth2 ºÍOpenIDÐÒéµÄ¿ÉÅäÖõÄSSOµÇ¼»úÖÆ
»ùÓÚtokens±£ÕÏ×ÊÔ´·ÃÎʰ²È«
ÒýÈëUAA¼øÈ¨·þÎñ£¬UAAÊÇÒ»¸öWeb·þÎñ£¬ÓÃÓÚ¹ÜÀíÕË»§¡¢Oauth2¿Í»§¶ËºÍÓû§ÓÃÓÚ¼øÈ¨µÄÎÊÌâÁîÅÆ(Issue
Token)¡£UAAʵÏÖÁËOauth2ÊÚȨ¿ò¼ÜºÍ»ùÓÚJWT(JSON web tokens)µÄÎÊÌâÁîÅÆ¡£

ÏÂÃæ¼òµ¥½éÉÜÏÂUAA£¬ÊÂʵÉÏ£¬ËüÊÇÓÉCloudFoundry·¢ÆðµÄ£¬Ò²ÊÇCloudFoundryƽ̨µÄÉí·Ý¹ÜÀí·þÎñ£¨https://docs.cloudfoundry.org...£©¡£
Ö÷Òª¹¦ÄÜÊÇ»ùÓÚOAuth2£¬µ±Óû§·ÃÎʿͻ§¶ËÓ¦ÓÃʱ£¬Éú³É²¢·¢·Åtoken¸øÄ¿±ê¿Í»§¶Ë¡£
UAAÈÏÖ¤·þÎñ°üº¬Èçϼ¸¸ö·½ÃæµÄÄÚÈÝ£º
ÈÏÖ¤¶ÔÏó¡£ÈçÓû§¡¢¿Í»§¶ËÒÔ¼°Ä¿±ê×ÊÔ´·þÎñÆ÷
ÈÏÖ¤ÀàÐÍ¡£Ö÷ÒªÓÐÊÚȨÂëģʽ¡¢ÃÜÂëģʽÒÔ¼°¿Í»§¶Ëģʽ
ÈÏÖ¤·¶Î§£¬¼´ÈÏ֤ȨÏÞ£¬²¢×÷Ϊһ¸öÃüÃûµÄ²ÎÊý¸½¼Óµ½AccessTokenÉÏ¡£
½ÓÏÂÀ´£¬½áºÏʵÀý£¬Ò»ÆðÀ´¿´ÏÂUAAÔÚSpring CloudÖеÄʵ¼ù¡£

ÈçͼËùʾ£¬ÕâÊÇÒ»¸ö¼òµ¥µÄ»ùÓÚSpring Cloud΢·þÎñ¼Ü¹¹µÄÀý×Ó£¬ËüµÄÖ÷Òª×é¼þÓУº
Eureka×é¼þÌṩ·þÎñ·¢ÏÖ¹¦ÄÜ
¶ÀÁ¢µÄConfig×é¼þÌṩÀàËÆÅäÖÃÖÐÐĵķþÎñ£¬³Ö¾Ã»¯²ã¿ÉÒÔÊÇÎļþϵͳ£¬Ò²¿ÉÊÇgit repository
Auth×é¼þÌṩ»ùÓÚUAAµÄ¼øÈ¨·þÎñ
Account×é¼þ±£´æÓû§µÄÒµÎñÐÅÏ¢
ÆäËû×é¼þ²»Ò»Ò»½éÉÜÁË
ÕâÀïÖ÷Òª½²Auth×é¼þºÍAccount×é¼þÊÇÈçºÎ»ùÓÚUAA·þÎñ½øÐÐÈÏÖ¤ºÍÊÚȨ¡£

ͼһΪAuth×é¼þÒµÎñ´úÂëÖж¨ÒåÁ˲»Í¬¿Í»§¶ËµÄÈÏÖ¤ÀàÐͺÍÈÏÖ¤·¶Î§£¬ÆäÖУº
ä¯ÀÀÆ÷¶ËµÄÈÏÖ¤ÀàÐÍÊÇpassword£¬ÈÏÖ¤·¶Î§ÊÇui
account×é¼þ¶ËµÄÈÏÖ¤ÀàÐÍÊÇclient_credentials£¬ÈÏÖ¤·¶Î§ÊÇserver
ͼ¶þΪconfig×é¼þ£¨ÅäÖÃÖÐÐÄ£©¶¨ÒåµÄÇëÇó·ÓɵĹæÔò£¬ÆäÖУº
ʹÓÃ/uaa/**À´×ª·¢»ùÓÚuaaµÄÈÏÖ¤ÇëÇóÖÁauth×é¼þ
ʹÓÃ/accouts/**À´×ª·¢ÇëÇóÖÁaccount×é¼þ£¬²¢±ê¼ÇserviceIdΪaccount-service£¬ÓëͼһÖеÄwithClient¶ÔÓ¦¡£

ͼһΪä¯ÀÀÆ÷´ò¿ªÓ¦ÓÃÈë¿Úºó£¬ÊäÈëÓû§ÃûºÍÃÜÂëºó£¬·¢³öµÄÈÏÖ¤ÇëÇó£º
ÈÏÖ¤urlΪ/uaa/oauth/token£¬ÕâÊÇuaaģʽϱê×¼µÄÇëÇó»ñÈ¡tokenµÄurl
±íµ¥Öаüº¬ÁË×Ö¶Îscope£¨ÈÏÖ¤·¶Î§£©ºÍ×Ö¶Îpassword£¨ÈÏÖ¤ÀàÐÍ£©
ͼ¶þΪͼһ·¢³öÈÏÖ¤ÇëÇóµÄ·µ»Ø½á¹û£º
Access_tokenΪÓÐЧÈÏÖ¤token£¬½«À´±»ÆäËûÇëÇóʹÓÃ
ͼÈýΪ·¢³ö»ñÈ¡µ±Ç°Óû§µÄÐÅÏ¢µÄÇëÇó£º
ÔÚÇëÇóÀïµÄAuthorizationµÄֵΪͼ¶þÖлñµÃµÄaccess_token

ͼһΪAccount×é¼þÔÚConfig×é¼þ£¨ÅäÖÃÖÐÐÄ£©¶¨ÒåµÄOAuth2ÐÒéÏ»ñÈ¡tokenµÄ·½Ê½£¬ÕâÀﶨÒåÁË£º
clientIDºÍclientSecret
accessTokenUrl£¬ÕâÀïÖ¸¶¨ÁËauth×é¼þµÄuaa»ñÈ¡tokenµÄurl
grant-type£¬¼´ÈÏÖ¤ÀàÐÍ£¬ÕâÀïÖ¸¶¨Îªclient_credentials
scope£¬ÕâÀïÖ¸¶¨ÁËserver£¬ËµÃ÷ÊÇÕâ¸öÈÏÖ¤ÇëÇóÖ»ÊÊÓÃÔÚ¸÷΢·þÎñÖ®¼äµÄ·ÃÎÊ¡£
ͼ¶þΪAccout×é¼þÒµÎñ´úÂëÖж¨ÒåÁËÐèҪʹÓÃAuth×é¼þ½øÐÐÊÂÏȼøÈ¨µÄ·½·¨£º
ʹÓÃ@PreAuthorize
annotationÖпÉÒÔÖ¸¶¨ÈÏÖ¤·¶Î§µÄ¾ßÌåÌõ¼þ£¬ÕâÀïÊÇÏÞ¶¨ÁËserver»òÕßÊÇdemoÕË»§£¬²ÅÓÐȨÏÞ·¢ÆðÈÏÖ¤¡£

×îºóС½áÏÂSpring Cloud SecurityµÄÌØµã£º
»ùÓÚUAA£¬Ê¹ÓÃOAuth2ÐÒé¡£²»»á±©Â¶Óû§µÄÃô¸ÐÐÅÏ¢
»ùÓÚÈÏÖ¤ÀàÐͺÍÈÏÖ¤·¶Î§£¬ÊµÏÖϸÁ£¶ÈµÄ¼øÈ¨»úÖÆ
·Çä¯ÀÀÆ÷¿Í»§¶ËÏÂÁ¼ºÃµÄ²Ù×÷ÐÔ
Q&A
ÎÊÌ⣺Basic Auth + Central Auth DBÕâÖÖ·½Ê½ÖУ¬Ã¿¸ö·þÎñÓÐ×Ô¼ºµÄ¼øÈ¨DB£¬Õâ¿éÖ»ÊÇÒ»¸ö»º³åÂð£¿Èç¹ûÖÐ;ͨ¹ý±ðµÄ·½Ê½ÐÞ¸ÄÁËÖÐÐÄDBµÄÊý¾Ý£¬¶ø»º³åÓÖû¹ýÆÚ£¬Õâ¸öʱºòÓÐʲô½â¾ö·½°¸Âð£¿
´ð£º²»ÊÇ»º³å£¬ÕâÀïµÄCentral Auth DBÊÇÖ¸¸÷¸ö΢·þÎñ¹²ÓÃÒ»¸öÊý¾Ý¿â¡£
ÎÊÌ⣺΢·þÎñ¼Ü¹¹ÐèÒª·þÎñ·ÓɺͷþÎñ×¢²áô£¿¸úesbµÄÇø±ðÔÚÄÄÀ
´ð£º·þÎñ·ÓÉ×é¼þºÍ·þÎñ×¢²á×é¼þºÍÊÇÏà¶Ô±ØÒªµÄ£¬ËûÃDZ£Ö¤ÁËÓû§ÇëÇóÄÜ·¢µ½ÕýÈ·µÄ΢·þÎñÖÐÈ¥¡£ESBÆóÒµ·þÎñ×ÜÏßÊÇÏà¶Ô±È½ÏÖØµÄ×é¼þ£¬¶ø²»ÊÇÏñ΢·þÎñ×é¼þÒ»ÑùÖ»¸ºÔ𵥸öÒµÎñ¡£
ÎÊÌâ:ÔÚ΢·þÎñÖУ¬¶ÔÓÚÊý¾ÝȨÏÞµÄÁ£¶È£¬ÊÇ¿ÉÒÔ¼¯ÖÐÔÚÔÚgatewayÖнøÐл¹ÊÇÓÉÿ¸ö΢·þÎñ×Ô¼º¶ÀÁ¢ÅäÖã¿
´ð£ºÍƼöÓÉÄǸöרßºÔØÈ¨ÏÞµÄ΢·þÎñ×é¼þÀ´ÅäÖá£
ÎÊÌ⣺ÄúºÃ£¬ÐÁ¿àÁË£¬ÇëÎÊÏÖÔÚÓÐÀàËÆSAMLÐÒ飬µ«ÊDz»»ùÓÚXML£¬¶øÊÇ»ùÓÚJSON»òÕ߯äËû¼ò»¯¸ñʽµÄÐÒéÂð£¿
´ð£ºÄ¿Ç°¾ÝÎÒËù֪ûÓлùÓÚJSONµÄSAMLÐÒé¡£Óиö½ÐJWT£¨JSON web token£©µÄÐÒ飬ËüÊÇÍêÈ«»ùÓÚJSONµÄ£¬Spring
Cloud¼Ü¹¹ÖÐҲʹÓÃÁËJWT¡£
ÎÊÌ⣺¶ÔÓÚÕâ¸ö¼Ü¹¹£¬·þÎñ»®·ÖµÄÁ£¶ÈÓÐûÓÐʲôºÃµÄ½¨Ò飿ÁíÍâµÇ¼ƾ֤±£´æÔÚ¿Í»§¶ËÈçºÎ½â¾ö±¨Îı»À¹½ØµÄ°²È«Â©¶´£¿
´ð£º·þÎñ»®·ÖÐèÒª°´¾ßÌåÒµÎñÀ´Ëµ£¬Ò»°ãÀ´Ëµ£¬Ò»¸öÒµÎñʵÌå×÷Ϊһ¸ö΢·þÎñ¡£Ê¹ÓÃhttps¿ÉÒÔÒ»¶¨³Ì¶ÈÉÏÌá¸ß°²È«ÐÔ¡£
ÎÊÌâ:spring cloud security¿ÉÒÔ½â¾ötokenÖØ·Å¹¥»÷ô£¿
´ð£ºtokenÖØ·Å¹¥»÷²»ÊÇÌØ±ðÁ˽⣬¿ÉÄÜÊÇÊý¾ÝÈõÒ»ÖÂÐÔµ¼Öµģ¬½¨ÒéÉè¼Æ¾¡¿ÉÄ̵ܶĹýÆÚʱ¼ä¡£
ÎÊÌ⣺ÎÒÃǹ«Ë¾ÏÖÔÚÔÚÉè¼ÆDMP£¬´ÓÐÐÒµµÄ×´¿öÀ´¿´£¬²ÉÓÃÁË΢·þÎñ£¬µ«ÊÇÓÐÒ»µã£¬Ê×ÏȶÔÓÚÓ¦Óñ¾Éí±©Â¶³öÀ´µÄ·þÎñ£¬ÊǺÍÓ¦ÓÃÒ»Æð²¿ÊðµÄ£¬Ò²¾ÍÊDz¢·Çµ¥¶ÀµÄ²¿Êð£¬ÄÇôҵÎñ×é¼þ½Ó¿Ú±©Â¶²¿ÊðÊÇ·ñºÏÀíÄØ£¿
´ð£ºÒµÎñ×é¼þµÄ½Ó¿ÚÒ»°ã¿ÉÒÔͨ¹ýÍ³Ò»Íø¹ØÀ´¹ÜÀí¡£Ò²¿ÉÒÔ¶ÔÒµÎñ½Ó¿ÚÏñspring cloudÖÐÉèÖ÷ÃÎÊscopeÏÞÖÆ¡£
ÎÊÌ⣺ËùÓб©Â¶µÄ΢·þÎñÊÇ·ñÐèÒªÒ»¸öͳһµÄ·þÎñ¹Ü¿ØºÍÖÎÀíÆ½Ì¨£¿
´ð£ºÊǵģ¬Ò»°ãÓзþÎñÍø¹ØºÍ·þÎñ·¢ÏÖ×é¼þÀ´¹ÜÀíÓû§ÇëÇó¡£
ÎÊÌ⣺΢·þÎñµÄgatewayÐèҪʵÏֵײã¶à¸öϸÁ£¶ÈµÄAPI×éºÏµÄ³¡¾°£¬ÎÒÃÇÏÖÔÚÒ»²¿·ÖʹÓÃÒì²½£¬µ«ÊÇÓöµ½ÁËû°ì·¨È«ÃæµÄ½âź¡£ÎÒÏëÎÊÎÊ£¬¶ÔÓÚ´Ë£¬Ê¹ÓÃÏìӦʽ£¿»¹ÊÇÒì²½»Øµ÷ʽ£¿ËüÃǵÄÇø±ðµã»áÓÐÄÄÐ©ÄØ£¿
´ð£ºÊ¹ÓÃÄÄÖÖAPI·½°¸£¬ÆäʵҪ¿´ÒµÎñ¡£Èç¹ûºó¶ËÒµÎñÐèҪǿÊý¾ÝÒ»ÖÂÐÔ£¬½¨ÒéʹÓÃÏìӦʽµÄ¡£·´Ö®£¬¿ÉÒÔʹÓÃÒì²½»Øµ÷»òÕßÏûÏ¢¶ÓÁС£
ÎÊÌ⣺uaaºÍnetflix zull¼¯³É ¿ÉÐÐÂð£¿ÊÇ·ñ×ö¹ýÕâ·½ÃæµÄ³¢ÊÔ£¿
´ð£º¿ÉÒÔ¡£Zuul×é¼þÌá¹©Íø¹Ø·þÎñ£¬uaaÊÇ»ùÓÚOAuth2ÐÒ飬ÌṩÊÚȨ·þÎñµÄ¡£Î¢·þÎñ¼Ü¹¹Ï£¬ËûÃÇÊǶÀÁ¢µÄ£¬ÊÇ¿ÉÒÔ×ÔÓÉ×éºÏµÄ¡£¾Ù¸öÀý×Ó£¬¿ÉÒÔÔÚzuul×é¼þµÄÅäÖÃÎļþÖУ¬ÎªÊÚȨ·þÎñ£¨auth-service£©×é¼þµÄÖ¸¶¨Â·ÓÉ±í¡£ |