Microsoft µo¦æ¤F Web Services Enhancements (WSE) 1.0 ª©,¥H¦b¤ä«ùªº²£«~¤¤±Ò¥Î¦w¥þ¡B¸ô¥Ñ©Mªþ¥ó¡A¦P®É¥¦ÁÙ¤ä«ù°ª¯ÅWeb ªA°È¡CWeb Services Enhancements 2.0¤w±q²³æ¤ä«ù°ò¥»¨óijµo®i¨ì¤ä«ù®Ö¤ß¥\¯àÉO¾Þ§@¨t²Îªº¶°¦¨¡A¦}¼W±j¤Fµ¦²¤¡B«H¥ô©M¤W¤U¤å¥OµP¥\¯à¡C
WSE ¤]¬O¹ï .NET Framework ¤ä«ùªºÂX®i¡A¥¦¥Î¤_³Ð«Ø©M¨Ï¥Î Web ªA°È¡A¦Ó WSE 2.0 ªö¥Î·sªº½sµ{¼Ò¦¡¡C¹L¥h¡AWeb ªA°È¤ä«ù¤@ª½¨Ì¿à Internet Information Server (IIS) §@¬°¨ä HTTP ªA°È¾¹¥DÉó¡Q²{¦b¡AWSE 2.0 ¤ä«ù³q¹L TCP/IP ©Î¦b¶iµ{¤º¨Óµo°e®ø®§¡C³o¼Ë¡A±z¥i¥H³q¹L¹ïµ¥¡B³æ¦V¡BÉݨBµ¥¤è¦¡±N®ø®§±qªA°È¾¹µo°e¨ì«È¤áºÝ¡C
¤U±¡A§Ú̱N²n¤¶²Ð WSE 2.0 ªº¤LÓ¥Dn¥\¯à¡A¦}°²³]±z¤w¼ô±x WSE 1.0¡C
Rock Paper Scissors¡R¤@Ïú¦w¥þªº¡B¤À¥¬¦¡®ø®§³B²z¥Ü¨ÒÀ³¥Îµ{§Ç
¬°¤F®i¥Ü WSE 2.0 ªº¦UӤ象A§Ú·Q³Ð«Ø¤@ÓÀ³¥Îµ{§Ç¥H®i¥Ü¤@¨Ç·s¦w¥þ¥\¯à©M®ø®§³B²z¥\¯à¡C¨ãÊ^¨Ó»¡¡A§Ú³ßÅw¨Ï¥Î TCP ®ø®§³B²z¤ä«ù¨ÓÅã¥Ü¹ïµ¥³q«H¡A¦}¨Ï¥¦¦bWindows ¦w¥þ©Ê»â°ì¤u§@¡C§Ú·Q¨ìªº¬O¤@Ó²³æªº¤À¥¬¦¡ª©¥»ªºÂ Rock Paper Scissors ´åÀ¸¡A²{¦b¥i¥H¥Î WSE 2.0 ¶i¦æ¦w¥þ¤Àµo¡C
Rock Paper Scissors ¬O¤@Ó¨â¤H¤Iµ£´åÀ¸¡A¶Ç²Î¤W¥]¬AÅý¨CӫĤl©ç¤â¤T¦¸¡A¦b²Ä¤T¦¸©ç¤â®É¥X¥Ü¥ÛÀY¡B°Å¤M©Î¥¬ªº§Îª¬¡C®ÚÕu¤Uªí¤¤©Ò¥Ü²z¥Ñ¨M©wÐ`ªÌ¡R
¥ÛÀY ¥¬ °Å¤M ¥ÛÀY ¥§½ ¥¬»q¥ÛÀY¡C¥¬¤èĹ¡T ¥ÛÀY¯{§¥°Å¤M¡C¥ÛÀY¤èĹ¡T ¥¬ ¥¬»q¥ÛÀY¡C¥¬¤èĹ¡T ¥§½ °Å¤M°Å¶}¥¬¡C°Å¤M¤èĹ¡T °Å¤M ¥ÛÀY¯{§¥°Å¤M¡C¥ÛÀY¤èĹ¡T °Å¤M°Å¶}¥¬¡C°Å¤M¤èĹ¡T ¥§½
¸Ó´åÀ¸³q±`¥Î¤_ÚÌ©w¥Ñ½Ö¥ý¿ï¾Ü°Ñ¥[¨F¦a´Î²yÁɪº¿ï¤â¡B½Ö¦Y³Ì¦Zªº¦B²N²O¡A¬Æ¦Ü¥Ñ½ÖÀ»¥´¹ï¤èªº¤âÁu¡C
§Ú̱N Rock Paper Scissors ·h¥X¨F¦a¡Aª½±µÀ³¥Î¦b¨ã¦³ WSE 2.0 ªº¦w¥þ¡B¨ó§@¡B¹Îµ²ªº¥ø·~§Þ³N¤¤¡C¸Ó´åÀ¸ªº®ø®§³B²zµ²ÌÛ¦p¤U±ªº¹Ï 1 ©Ò¥Ü¡C
¹Ï 1¡RRock Paper Scissors ®ø®§³B²z©M¦w¥þ¼Ò«¬
Rock Paper Scissors ¦³¨âÓ¥Dn²Õ¥ó¡R¤@Ó¬O¦W¬° RPSService ªº ASP.NET Web ªA°È¡A¥t¤@Ó¬O¥Ñ¦hӥΤá¹B¦æªº¹ïµ¥À³¥Îµ{§Ç¡CRPSService ªº§@¥Î¬OÅý¥Î¤áª`¥Uª±´åÀ¸©Î´M§ä¹ï¤â¨Óª±´åÀ¸¡C¹ïµ¥À³¥Îµ{§Ç¥ý¬OÉO RPSService ³q«H¥H§ä¨ìnÉO¤§³q«Hªº¹ï¤è¡AµM¦Z¦bÚÌ©w¹ï¤â¦Zª½±µÉO¨ä¹ï¤è¶i³q«H¡C
¹ïµ¥¡R¹ï¤_®ø®§³B²z¡AWSE 2.0 ±q°ò¤_¶Ç²Î HTTP ½Ð¨D/ÅTÀ³¡]§Y RPC Àô¹Ò¡^Âà´«¬°ªö¥Î¥i¯à¦P®É¨ã¦³¹ïµ¥®ø®§³B²z¡BÉݨB®ø®§³B²z©M®ø®§¶¤¦CªºÀô¹Ò¡C
Kerberos¡R¾ãÓÀ³¥Îµ{§Ç¬O³q¹L¨Ï¥Î¶°¦¨ªº Windows Kerberos ¤ä«ù³Ð«Øªº¡C¨Ï¥Î WSE 2.0¡A±z¥i¥H¥Î¤@Ïú¦w¥þªº¤è¦¡³s±µÊIµ¸¡C§Ú̱N¶i¦æÅçµý¡B¼Æ¦rñ¦W©M¥[±K®ø®§¥HÚÌ«O¨ã¦³³Ì°ªªº¦w¥þ©Ê¡A¥B³o±N§¹¥þ°ò¤_ Windows ¥Î¤á±b¤á¡C
«K±¶ºÞ²z¡R¤£¥Î½s¼g¥N½X¨Ó±±¨î³X°Ý¡A§ÚÌ«K¥i¥H³q¹Lµ¦²¤°t¸m¤å¥ó¨Ó°t¸m®ø®§ªº¦w¥þ©Ê¡C³q¹Lµ¦²¤¤å¥ó¡A¥i¥H±±¨în¹ê²{ªº¦w¥þÏúÃþ¡Bn¹ï®ø®§ªºþ³¡¤À¶i¦æ¼Æ¦rñ¦W©Î¥[±K¤Î¨ä¹ê²{¤è¦¡¡AÁÙ¥i°ò¤_®ø®§®É©Ê±±¨î±µ¨ü±ø¥ó¡C¥Ø«e¡A¥i¥H±±¨î¦w¥þ©Êªº¬ÛÀ³¤Hû¬°¡R±zªººÞ²zû¡C
Rock Paper Scissors¡R¸ÓÀ³¥Îµ{§Çªº«n§@¥Î¤£¦b¤_À³¥Îµ{§Ç¥»¨¡A¦Ó¬O¥¦ÉO¥»¨Ò¤¤¤£¦P¹êÊ^³q«H®É¨Ï¥Î¦w¥þ®ø®§¡Bµ¦²¤©M´M§}ªº¤è¦¡¡C±z²q¤£¨ì¡A§Ú¥¿·Q¶H§Úªº¦ÑªO»¡¡R¡§¬°¤F¨M©w¾û¤µ¦~ªº¼úª÷¡A§Ú·QÅý§ĄC¤H¹B¦æ¤@Ó¤pªºÀ³¥Îµ{§Ç RockPaperScissors.exe...¡¨
ÉO Windows ¦w¥þ©Ê¶°¦¨ªº Kerberos ¥OµP¤ä«ù
§ÚÌn°Q½×ªº WSE 2.0 ªº²Ä¤@³¡¤À¬O¤ä«ù Kerberos ¦w¥þ¥OµP¡CWSE 1.0 ¤ä«ù¥Î¤á¦W¥OµP©M X.509 ¦w¥þ¥OµP¡C¥i¥H±N³o¨Ç¥OµP²K¥[¨ì¦w¥þ¥OµPªº®ø®§¶°¦X¡A¦}¥Î¤_³Ð«Ø¼Æ¦rñ¦W©Î°õ¦æ¥[±K¡C¹ï¤_ WSE 2.0 ¨Ó»¡¡A·í¦b Windows Server 2003 ©Î±a¦³ Service Pack 1 ªº Windows XP ¤W¹B¦æ®É¡A«h¤w²K¥[¤F Kerberos ¥OµP¤ä«ù¡C§ó«nªº¬O¡AKerberos ¥OµP¤ä«ù¯à°÷ÉO¶°¦¨ªº Windows ¦w¥þ©Ê¤@°_¨Ï¥Î¡A³o¼Ë¡A¤£¦A»Ýn±N¥Î¤á¦W¬M®g¦¨ Windows ¥Î¤á¡A¤]¤£¥Î¥t¥~³]¸m¥Î¤á¼ÆÕu®w¡A¥i¥H°ò¤_ Windows ¥Î¤á±±¨î¹ï Web ªA°Èªº³X°Ý¡C
¦b¬° RPSService ²K¥[¥N½X¤§«e¡A§Ún°µªº²Ä¤@¥ó¨Æ¬O¦b¦Û¤vªº¶µ¥Ø¤¤²K¥[¹ï Microsoft.Web.Services µ{§Ç®wªº¤Þ¥Î¡C¦pªG±zªºpºâÉó¤W¦w¸Ëªº¬O WSE 1.0¡A¨º¤\²K¥[¤Þ¥Î®Éª`·N¿ï¾Ü 2.0 ª©ªºµ{§Ç®w«Ü«n¡C©¯¹Bªº¬O¡Aµ{§Ç¶°ªºª©¥»¸¹´N¦C¦bµ{§Ç¶°¦WºÙ¤§¦Z¡A¦]¦¹¥i¥H»´ªQ¦a¿ï¾Ü¥¿Ú̪ºµ{§Ç¶°¡C¹Ï 2 Åã¥Üªº¬O¿ï©w¤F WSE 2.0 µ{§Ç®wªº Add Reference¡]²K¥[¤Þ¥Î¡^¹ï¸Ü®Ø¡C½Ðª`·N¡A1.0 ª©¥»ªºµ{§Ç®w´N¦b¿ï©wªºµ{§Ç®w¤§«e¡C
¹Ï 2¡R±N¤Þ¥Î²K¥[¨ì WSE 2.0 µ{§Ç¶°
¤U±ªº¥N½Xºt¥Ü¦p¦ó³q¹L½sµ{ªº¤è¦¡±N Kerberos ¥OµP²K¥[¨ì¥OµP®ø®§¶°¦X¡C¥¦¬O¤@¤è¨p¤U¦V¥t¤@¤èµo°e¨ä°Ê§@®É©Ò¨Ï¥Îªº¥N½X¡C¸Ó¥N½X¨Ï¥Î WSE 2.0 ªºÉݨB TCP ®ø®§¥\¯à¡]ÀH¦Z±N¸Ô²Ó»¡©ú¡^¡A¦ý¥Î¤_²K¥[¥OµP©M¥[±Kªº¥N½XÃþ¦ü¤_ WSE 1.0 ¤¤¥Î¤_¨ä¥LÃþ«¬¥OµPªº¥N½X¡C
using Microsoft.Web.Services.Security.Kerberos;
a€|
KerberosToken peerToken;
a€|
peerToken = new KerberosToken("host/" + OpponentUri.Host);
a€|
envelope.Context.Security.Tokens.Add(peerToken);
envelope.Context.Security.Elements.Add(new EncryptedData(peerToken));
½Ðª`·N¡A¥OµP¬O³q¹L¶Ç»¼³s±µ¥DÉ󪺦WºÙ³Ð«Øªº¡C¥Î¤_³Ð«Ø¸Ó¥OµPªº Kerberos ¼Ðñ¤¹³\·í«e¥Î¤áÉO«ü¥Üªº¥DÉó¶i¦æ³q«H¡C¨ãÊ^¨Ó»¡¡A¸Ó¥OµP±N¥Î¤_¥[±Knµo°eªº®ø®§¡A¥H«K¥u¦³¸Ó»·µ{¥DÉó¤~¥i¥HŪ¨ú³o¨Ç®ø®§¡C
ÉO¨ä¥LÃþ«¬¥OµP¤£¦P¡AKerberos ¥OµP¨Ï¥Î·í«eªº Windows ¥Î¤á¦w¥þ¤W¤U¤å³Ð«Ø¸Ó¥OµP¡C¦pªG±z¬d¸ß¤w³Ð«Øªº¥OµP¡A±z±N·|§ä¨ì¤@Ó Principal ¦¨ûÄݩʡA¥¦«ü¥Ü³Ð«Ø¸Ó¥OµPªº¥Î¤á¡C§Ú̱q±µ¦¬®ø®§¡]±a¦³ Kerberos ¥OµP¡^ªº¥N½Xªº¥DÊ^¤¤Àò¨ú¥Î¤á¦W¡C¤U±ªº opponent Åܶq¬O¤@Ó KerberosToken ¹ï¶H¡A¸Ó¹ï¶H¬O±q¶Ç¤J®ø®§ªº Tokens ¶°¦X¤¤Àò±oªº¡C¥i¥H¹³¤U±Àò¨ú¦WºÙ¨º¼Ë¨ÓÀò¨úÃö¤_¥OµP³Ð«ØªÌªº«H®§¡A¦ý¤]¥i¥H½Õ¥Î IsInRole() ¤èªk¨Ó³q¹L½sµ{ªº¤è¦¡ÚÌ©w Active Directory ²Õ¦¨û¡C
this.opposingNameLabel.Text
= "Playing: " + opponent.Principal.Identity.Name;
ª`·N¡R¦pªG¦b Windows XP ¤W¹B¦æ Web ªA°È¡A«h¨Ï¥Î Kerberos ¥OµP¸Õ¹Ï³s±µ¨ì Web ªA°È®É¡A±z¥i¯à·|¹J¨ì¥H¤U¿ù»~¡R
Microsoft.Web.Services.Security.SecurityFault: An invalid security token
was provided ---¡Ö System.Security.SecurityException: Unable to validate
incoming Kerberos ST. LsaLogonUser failed with the following message: A
required privilege is not held by the client. Substatus is 0.
¥X²{¸Ó¿ù»~¬O¥Ñ¤_½Õ¥Î¦W¬° LogonUser ªº¦w¥þ API ®É¡AASPNET ±b¤áµLªkÅçµý Kerberos ¥OµP¡C½Õ¥Î LogonUser API ªº¥Î¤á±b¸¹n¨D¨ã¦³¡§§@¬°¾Þ§@¨t²Îªº¤@³¡¤À¨Ó¾Þ§@¡¨¯SÅv¡C¦bÀq»{±¡ªp¤U¡AASPNET ±b¤á¡]§Y¹B¦æ ASP.NET ¥N½Xªº±b¤á¡^¤£¨ã¦³¸Ó¯SÅv¡C«ØÄ³±z¦b¦XÓ쪺ªA°È¾¹¥¥x¦p Windows Server 2003 ¤W¹B¦æ¤w³]¸m Kerberos ¦w¥þªº Web ªA°È¡C¦b Windows Server 2003 ¤W¡A½Õ¥Î LogonUser ®É¤£»Ýn¡§§@¬°¾Þ§@¨t²Îªº¤@³¡¤À¨Ó¾Þ§@¡¨¯SÅv¡C¦b Windows XP ¤W¡A¥i¥H¨Ï¥Î Local Security Policy ºÞ²zÀ³¥Îµ{§Ç¨Ó°t¸m¾Ö¦³¡§§@¬°¾Þ§@¨t²Îªº¤@³¡¤À¨Ó¾Þ§@¡¨¯SÅvªº±b¤á¡A¥]¬A ASPNET ±b¤á¡A¦ýÀ³¸Óª`·N³o·|³y¦¨ ASP.NET À³¥Îµ{§Çªº¦w¥þ©Ê¤£°÷ÄY±K¡C
¦w¥þµ¦²¤
ÁöµM¥H¤W°Q½×ªº¥N½XÉO WSE 1.0 ¤¤ªº¥N½X«D±`¬Û¦ü¡A¦ý¥¦¨ã¦³¤@ÓɬÂI¡R±N Principal ¹ï¶HÉO¤@Ó¥OµPÃöÁp¡A¥i¥H¥Î¨Ó¬d§ä¬YÓ¨ãÊ^¦w¥þ¥OµPªº¯S©wÄݩʡC³oÏú¤èªk¦s¦bªº°ÝÃD¦b¤_¤´n½s¼g¥N½X¨ÓÚÌ©wÀ³Äݤ_ºÞ²z¥ô°Èªº³X°Ý¥\¯à¡C¬°¦¹¡AWSE 2.0 ´£¨Ñ¤F³Ð«Øµ¦²¤¤å¥ó¤ä«ù¡C
¥»¤º®e¦@
3¶,·í«e¦b²Ä
1¶
1 2 3