Rootoken WEBãœãªã¥ãŒã·ã§ã³ã¯ãGOST R 34-10.2001ã«æºæ ããé»å眲åã䜿çšããŠWebãªãœãŒã¹ã®åŒ·åãªèªèšŒãå¯èœã«ããŸãã ãã®èšäºã§ã¢ã«ãŽãªãºã ã®è©³çŽ°ãèªãããšãã§ããŸãã ããã§ã¯ãAsp.netãå®è¡ããŠãããµã€ãã§Rutoken WEBã䜿çšããçŸåšã®ããŒãžã§ã³ãã©ã®ããã«äœæããããã瀺ããã¢ã»ã³ããªæé ãæäŸããŸãã
ãã¹ãŠãæ©èœãããã®ã¯æ¬åœã«ç°¡åã§ãã
Rootoken WEBãœãªã¥ãŒã·ã§ã³ã¯ã次ã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã
- USBããŒã¯ã³Rootoken WEBïŒãã©ã€ããŒã®ã€ã³ã¹ããŒã«ã¯äžèŠïŒ
- ã¯ã©ã€ã¢ã³ãã¯ãã¹ãã©ãããã©ãŒã ãã«ããã©ãŠã¶ãã©ã°ã€ã³
- ãã©ã°ã€ã³ãæäœããããã®ã¯ã©ã€ã¢ã³ãã¹ã¯ãªãã
- ãµãŒããŒã³ã³ããŒãã³ã
ãã©ãŠã¶ãã©ã°ã€ã³ã¯ããããããŠã³ããŒãã§ããŸã ã ãµãŒããŒã³ã³ããŒãã³ããã¯ã©ã€ã¢ã³ãjavascriptãäœæããããããã¹ãŠãæ¥ç¶ããŸãã
èªèšŒã¢ã«ãŽãªãºã
ãã©ãããã©ãŒã ã«é¢ä¿ãªãããŠãŒã¶ãŒã®èªèšŒã«ã¯ããµããžã§ã¯ãã®ç¹å®ã®èå¥åã®æ瀺ãèå¥åã®æ€èšŒãããã³ã¢ã¯ã»ã¹ã«é¢ãã決å®ãå«ãŸããŸãã ããšãã°ããã¹ã¯ãŒãã䜿çšããŠãã°ã€ã³ãæ瀺ããããŒã¿ããŒã¹ã®ããŒã¿ã確èªããæåããå Žåã¯èªèšŒCookieãèšå®ããŸãã
ãã®å Žåãèå¥åã¯ã¯ã©ã€ã¢ã³ãã§çæãããEDSã«ãªããŸãã ããŒã¿çœ²åã®æ£ç¢ºæ§ãæ€èšŒããŸãã æ€èšŒã«æåãããšãèªèšŒã¯æåãããšèŠãªãããŸãã äžè¬ã«ãå€å žçãªãã³ãã·ã§ã€ã¯ã䜿çšããŸãã
ã¢ã«ãŽãªãºã ã®å®è£
æºåã
ãµãŒããŒã眲åãæ€èšŒããã«ã¯ãã¯ã©ã€ã¢ã³ãã®å ¬ééµãç¥ãå¿ èŠããããŸãã
ãããã£ãŠããŸããã¯ã©ã€ã¢ã³ãã®ããŒãã¢ãå«ãã³ã³ãããRootoken WEBããã€ã¹ã«äœæããå ¬éããŒãšRootoken WEBããã€ã¹ã®äžæã®èå¥åããµãŒããŒã«è»¢éããŸãã ç§å¯éµã¯ååŸã§ããªããããããã€ã¹ããé¢ããŸããã
ãŸããã³ã³ããããšã«ããåŒã³åºãã®ã§ã¯ãªããã¹ããŒã {login}ïŒïŒ ïŒ{sitename} {port}ã«åŸã£ãŠããŸãã ããšãã°ãyandex @ gmail.comïŒïŒ ïŒdotnet.rutokenweb.ru:80ã ãã®ååã¯ãããŒã¯ã³äžã®ãã°ã€ã³ã®ãªã¹ãã衚瀺ãããšãã«å°æ¥äœ¿çšãããŸãã
ãµãŒããŒã§ãå ¬éããŒãšããŒã¯ã³ã®IDãååŸããæ¢åã®ã¯ã©ã€ã¢ã³ãã«ãã€ã³ãããŸãã 誰ãã¢ã¯ã»ã¹ããããšããããç¥ãå¿ èŠããããŸãã
æºåãã§ãŒãºãå®äºãã顧客ãèªèšŒã§ããŸãã
èªèšŒ
- ã¯ã©ã€ã¢ã³ãã¯ãèªèšŒãå¿ èŠãªèå¥åãšãµã€ã³ãå«ããªã¯ãšã¹ãããµãŒããŒã«éä¿¡ããŸãã
- ãµãŒããŒã¯ãæååãªã©ã®ã©ã³ãã ããŒã¿ãçæããŸãã ããŒã¿ãããã·ã¥ããã»ãã·ã§ã³ã§èšæ¶ããã¯ã©ã€ã¢ã³ãã«éä¿¡ããŸãã ãã®ããŒã¿ãs1ãšåŒã³ãŸãã
- ã¯ã©ã€ã¢ã³ãã¯ããŒã¿ã®ããã·ã¥ãåãåãããã®ã©ã³ãã ããŒã¿ïŒs2ïŒãçæããè¡ã®åèšã®ããã·ã¥ãçæãããã®ããã·ã¥ã«çœ²åããŸãïŒããžã¿ã«çœ²åãååŸããŸãïŒã 次ã«ãã¯ã©ã€ã¢ã³ãã¯ãçæããããŒã¿ïŒs2ïŒãšè¡ã®åèšã®ããžã¿ã«çœ²åããµãŒããŒã«éä¿¡ããŸãã
- ãµãŒããŒã¯ãã©ã³ãã ã¯ã©ã€ã¢ã³ãããŒã¿ïŒs2ïŒãšEDSãåä¿¡ããåæ§ã«ã©ã³ãã ã¯ã©ã€ã¢ã³ãããŒã¿ïŒs2ïŒãšãµãŒããŒã«ãã£ãŠæåã«çæãããããŒã¿ïŒs1ïŒã®åèšã®ããã·ã¥ãçæããŸãã
- ãã®çµæããµãŒããŒã«ã¯ããŒã¿ïŒããã·ã¥s1 + s2ïŒãšãã®ããŒã¿ã®çœ²åããããŸãã 眲åãæ£ããããšã確èªããããã ãã«æ®ããŸãã
CïŒå®è£ äŸ
ç§ã®å ŽåãRootoken WEBã®èªèšŒã¯3ã€ã®ãµã€ãã«ãã蟌ãŸããªããã°ãªããŸããã§ããã ãã®ãã¡2ã€ã¯ãã©ãŒã èªèšŒã䜿çšãããã1ã€ã¯Windows Identity Foundationã§åäœããèªèšŒã«STSãµãŒãã¹ã䜿çšããŸãã 3ã€ã®ãµã€ãã¯ãã¹ãŠWebFormsã䜿çšããŠããŸãã
å¿ èŠãªæ©èœãå®éã«ã¯2ã€ã®ã³ã³ãããŒã«ãåããWebControlãäœæããŸãããã 1ã€ã¯èªèšŒã«äœ¿çšããããã1ã€ã¯Rootoken WEBãã€ã³ãã£ã³ã°ã®ç®¡çã«äœ¿çšãããŸãïŒããšãã°ãå人ã¢ã«ãŠã³ãã§ïŒã
ãµãŒããŒãªã¯ãšã¹ãã¯ãã¹ãŠãå®å šãªãã¹ãããã¯ãªãã®ajaxãªã¯ãšã¹ãã«ãªããŸãã ãããã£ãŠãå¿ èŠãªèŠçŽ ãšJavaScriptãããŒãžã«è¡šç€ºããã«ã¯ãæŠããŠã³ã³ãããŒã«ãå¿ èŠã§ãããhttpHandlerãajaxãªã¯ãšã¹ãã®åŠçãåŠçããŸãã 圌ã¯ã¯ã©ã€ã¢ã³ãã«ããŒã«ã©ã€ãºãããjavascriptãæäŸããŸãã
ãããŠæåŸã«ãã³ã³ãããŒã«ãšãã³ãã©ãŒã¯ã ITokenProcessorã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãããªããžã§ã¯ãã䜿çšããŠãµã€ãã®æ®ãã®éšåãšå¯Ÿè©±ããŸããITokenProcessorã€ã³ã¿ãŒãã§ã€ã¹ã§ã¯ããœãªã¥ãŒã·ã§ã³ã«å¿ èŠãªç¹å®ã®åãµã€ãã«åºæã®ã¡ãœããã宣èšãããŸãã ããšãã°ãå ¬ééµã®ååŸããŠãŒã¶ãŒåã®ååŸãªã©ã
æŠç¥çã«ã¯ããã¹ãŠæ¬¡ã®ããã«ãªããŸãã
ãã§ã«è¿°ã¹ãããã«ãèªèšŒã®æºåã¯ããã©ã€ããŒãããã³ãããªãã¯ããŒã䜿çšããRutokenã§ã®WEBã³ã³ããã®åœ¢æãšããŠãŒã¶ãŒã¢ã«ãŠã³ããžã®ããŒã¿ãã€ã³ãã£ã³ã°ã䜿çšããå ¬éããŒãšããŒã¯ã³ã®IDã®ãµãŒããŒãžã®è»¢éã«éå®ãããŸãã ãã®æäœã¯èªèšŒããããŠãŒã¶ãŒãå©çšã§ããå¿ èŠããããæ©èœãåããã³ã³ãããŒã«èªäœã¯ãããšãã°å人ã¢ã«ãŠã³ãã«é 眮ã§ããŸãã 管çãšããçããååã®ã³ã³ãããŒã«ããããåŠçãããã°ã€ã³ãšããååã®ã³ã³ãããŒã«ãèªèšŒããã»ã¹ãåŠçããŸãã
HttpHandlerã®å®è£
ãã³ãã©ãŒã®ã¿ã¹ã¯ïŒ
1. Rutoken WEBã§ajaxã¯ã©ã€ã¢ã³ããªã¯ãšã¹ããåŠçããŸãã
ãã³ãã©ãŒã¯ãæ¢ç¥ã®ããããŒïŒ 'X-Requested-With'ã 'XhrRutoken'ïŒãæã€ajaxãªã¯ãšã¹ãã®ã¿ãåŠçããŸãã
ãªã¯ãšã¹ãã解æããããã®ã¯ã©ã¹ïŒCMessageRequestïŒãšã¬ã¹ãã³ã¹ãçæããããã®ã¯ã©ã¹ïŒCMessageResponseïŒãäœæããŸãããã ãªã¯ãšã¹ãã«å¿ããŠãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠãªã¯ãšã¹ãã解æãããã³ãã©ã®ã¡ã³ããŒã«å²ãåœãŠãŸãã æ§æ解æã¯ã³ã³ã¹ãã©ã¯ã¿ãŒã§è¡ãããŸãã
_mRequest = new CMessageRequest(context);
ãªã¯ãšã¹ãã§ã¯ãã¡ãœããã®ååãéä¿¡ãããèŠã€ãã£ãå Žåã¯ãªãã¬ã¯ã·ã§ã³ã«ãã£ãŠèµ·åãããŸãã
GetType().InvokeMember(_mRequest.act, BindingFlags.InvokeMethod, null, this, new object[] {});
ã¡ãœããã§ã¯ããªã¯ãšã¹ããåŠçããããã®çµæãã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãšã¬ã¹ãã³ã¹ãäœæãããŸãã æåŸã«ãå¿çã¯jsonã§ã·ãªã¢ã«åãããResponseã«æž¡ãããŸãã
2.ããŒã«ã©ã€ãºãããJavaScriptãããŒãžã«æž¡ããŸãã
ãã®ããã«ããŒãžã«Javascriptãè¿œå ãããŸã-
<script src=" /RutokenWebSTS/rutokenweb/ajax.rtw?getRutokenJavaLocal=1" type="text/javascript"></script>
ããŒã¯ã¢ããã¯å¶åŸ¡ãæäŸããŸãïŒè©³çŽ°ã¯ä»¥äžãåç §ïŒã getRutokenJavaLocal = 1ã®ãªã¯ãšã¹ãã®å Žåãåã³ãã³ãã©ãŒã䜿çšããä»åã¯javascriptãè¿ããŸãã
ãã¹ãŠã®JavaScriptã¯ãåã蟌ã¿ãªãœãŒã¹ãšããŠã¢ã»ã³ããªã«è¿œå ãããŸãã ãªãœãŒã¹ãè¿œå ããã ãã«å¶éãããå ŽåããããŸãã æåã¯ããã ã£ãã ãããããã®åŸã顧客ããã¯ã€ãã¢ã©ãã¢ããçŸããããŒã«ã©ã€ãºã®å¯èœæ§ãæã¿ãŸããã ãã®ããã次ã®ããã«ãåçŽã§ã¯ãªãããŽãŒã«ãã®ããŒã«ã©ã€ãºããŒãžã§ã³ãè¿œå ããŸãã
private void SendLocalizeScript() { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( "RutokenWebPlugin.javascript.tokenadmin.js")) { if (stream != null) { var reader = new StreamReader(stream); HttpContext.Current.Response.Write(Utils.LocalizeScript(reader.ReadToEnd())); } } }
LocalizeScriptã¯ããã§ã«ããŒã«ã©ã€ãºãããããŒãžã§ã³ã®ã¹ã¯ãªãããè¿ããŸãããã®ããŒãžã§ã³ã§ã¯ãã¹ã¯ãªããã解æããŠå¿ èŠãªè¡ãè¿ãããã¹ãŠã®LOCALIZEãšã³ããªïŒresource_keyïŒãRutokenLocalText.resxãªãœãŒã¹ãã¡ã€ã«ã®è¡ã«çœ®ãæããŸãã
private static Regex REGEX = new Regex(@"LOCALIZE\(([^\))]*)\)", RegexOptions.Singleline | RegexOptions.Compiled); ⊠public static string LocalizeScript(string text) { var matches = REGEX.Matches(text); foreach (Match match in matches) { string strResourceStringID = match.Groups[1].Value; string str = (string)HttpContext.GetGlobalResourceObject("RutokenLocalText", strResourceStringID) ?? strResourceStringID; text = str != strResourceStringID ? text.Replace(match.Value, MakeValidString(str)) : text.Replace(match.Value, string.Format("'LOCALIZE.{0}'", str)); } return text; }
ãªãœãŒã¹ã¯äŸã®ãœãŒã¹ã³ãŒãã«ãããŸãã
ITokenController
ã³ã³ãããŒã«ãšãã³ãã©ãŒã¯ãITokenControllerã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãµã€ã/ã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã¯ãœãŒã¹ã³ãŒãã§è©³ãã説æãããŠããŸãã ãµã€ãåºæã®æ©èœãå®è£ ããŸãã ããšãã°ãããŒã®ååŸ/ä¿åããŠãŒã¶ãŒåã®ååŸãªã©ã
ãã¹ãŠãæ©èœããã«ã¯ããã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£ ãããªããžã§ã¯ããå¶åŸ¡ã¡ãœããã«æž¡ãå¿ èŠããããŸãã次ã«äŸã瀺ããŸãã
class CustomTokenProcessor : ITokenProcessor ... // tokenLogin - tokenlogin.SetRequired(new CustomTokenProcessor(), returnurl);
ã¡ãœããã¯å®éã«ã»ãã·ã§ã³ã«ãªããžã§ã¯ããé 眮ããŸã
public void SetRequired(ITokenProcessor processor, string successurl) { var session = HttpContext.Current.Session; if (session != null) { if (session["TokenProcessor"] == null) { session["TokenProcessor"] = processor; } session["SuccessUrl"] = successurl; } }
ãããŠããªããžã§ã¯ãã¯ãã³ãã©ãŒã§å©çšå¯èœã«ãªããŸãã
ãã³ãã©ãŒã¯ãèªèšŒãæåãããšããªã¬ãŒãããOnSuccessAuthã€ãã³ãã䜿çšããŸãã ããã«ãã€ãã³ãã¯ããã³ãã©ãŒã§ã¯ãªããã³ã³ãããŒã«ã§ãµãã¹ã¯ã©ã€ãã§ããŸãã ããã¯ãã€ãã³ãã«è¿œå ãããã¡ãœããã§ã»ãã·ã§ã³ã«ã¢ã¯ã»ã¹ã§ããããã«ããããã«è¡ãããŸãã ãã®å Žåãã»ãã·ã§ã³ãªããžã§ã¯ãã¯ã¡ãœããã«æž¡ãããŸã
if ((OnSuccessAuth = (EventHandler) _mContext.Session["OnSuccessAuth"]) != null) { OnSuccessAuth(_mContext.Session, new EventArgs()); _mContext.Session["OnSuccessAuth"] = null; }
ãããŠã¡ãœããã§ã¯ããã®ãããªã»ãã·ã§ã³ãååŸããŸã
private void tokenlogin_OnSuccessAuth(object sender, EventArgs e) { HttpSessionState session = (HttpSessionState) sender; if (session != null) { // session["dssVerify"] = true; } }
ã³ã³ãããŒã«ã®å®è£ ã
æåã«ãäž¡æ¹ã®ã³ã³ãããŒã«ã®èŠªãäœæããŸãã äž»ãªã¿ã¹ã¯ã¯æ¬¡ã®ãšããã§ãã
1.ãã³ãã¬ãŒããèšå®ããæ©èœãæäŸãã
ãããã
[TemplateContainer(typeof (AdministrationData)), TemplateInstance(TemplateInstance.Single)] public virtual ITemplate Template { get; set; }
2. Rutoken WEBãæäœããããã®ãªããžã§ã¯ããããŒãžã«è¿œå ãã
ãã©ãŠã¶ãŒãã©ã°ã€ã³ã®æäœã¯ãç¹å¥ã«å®£èšããããªããžã§ã¯ãã§ã¡ãœãããåŒã³åºãããšã«ãªããŸãã 次ã®åœ¢åŒã§å®£èšãããŸãã
<object id="cryptoPlugin" type="application/x-rutoken" width="0" height="0"></object>
onLoadã³ã³ãããŒã«ã§ãããè¡ãã«ã¯
private void EnsureRutokenPlugin() { var rtObject = new HtmlGenericControl("object") {ClientIDMode = ClientIDMode.Static, ID = JStokenObjectID}; rtObject.Attributes.Add("type", "application/x-rutoken"); rtObject.Attributes.Add("width", "0"); rtObject.Attributes.Add("height", "0"); var rtParam = new HtmlGenericControl("param") {TagName = "onload"}; rtParam.Attributes.Add("value", "pluginit"); rtObject.Controls.Add(rtParam); // bool bControlAdded = false; if (Page.Form == null) { throw new Exception("define 'Form' tag on page!"); } foreach (PlaceHolder control in Page.Form.Controls.OfType<PlaceHolder>()) { (control).Controls.Add(rtObject); bControlAdded = true; break; } if (!bControlAdded) { throw new Exception("define an empty 'PlaceHolder' tag after the tag 'Form'"); } // Utils.IdToJavaScript(rtObject, JScontrolVar, "token", Page); // Page.ClientScript.RegisterStartupScript(typeof(Control), "settings", string.Format("{0}.settings = {{}}; {0}.settings.mainurl = '{1}/rutokenweb/ajax.rtw';", JScontrolVar, HttpContext.Current.Request.ApplicationPath) , true); }
ããã«ã¯1ã€ã®æ©èœããããŸãã ãã©ã°ã€ã³ãªããžã§ã¯ãã¯ãdisplayïŒnone;ã®é ãèŠçŽ ã«å ¥ããªãã§ãã ããã ããšãã°ããã®åŸãä»äºãæåŠããŸãã ãããŠãPlaceHolderã«æçš¿ããŸããããã¯ãã³ã³ãããŒã«ãšå ±ã«ã¡ã€ã³ããŒãžã§å ·äœçã«çºè¡šããŸãã ãã¹ã¿ãŒããŒãžã䜿çšãããŠããå Žåã¯ããã®äžã§ãFormã¿ã°ã®çŽåŸã«ã
<form id="form1" runat="server"> <asp:PlaceHolder ID="tokenPlaceHolder" runat="server"></asp:PlaceHolder>
ããã«ãããé衚瀺ããŒãžèŠçŽ å ã®ããŒã¯ã³ãªããžã§ã¯ãã®æå³ããªãããããåé¿ã§ããŸãã
ä»ãç§ãã¡ã¯ã³ã³ãããŒã«ã®å®è£ ã«åŸäºããŸã-çžç¶äººã 1ã€ã¯ããŒã¯ã³ç®¡ççšããã1ã€ã¯ã¯ã©ã€ã¢ã³ãèªèšŒçšã§ãã ã³ã³ãããŒã«ã¯ãã³ãã¬ãŒãåãããŠãããããããŒãžã«ããŒã¯ã¢ãããèšå®ããå¿ èŠããããç¹å®ã®ååãæã€ç¹å®ã®ããŒã¯ã¢ããèŠçŽ ããã³ãã¬ãŒãã«ååšããå¿ èŠããããŸãã ãã¿ã³ãã©ãã«ãªã© å¯çšæ§ã¯ã³ãŒãã§ãã§ãã¯ãããŸãã
äž¡æ¹ã®ã³ã³ãããŒã«ã§ãCreateChildControlsããªãŒããŒã©ã€ãããŸãã
protected override void CreateChildControls() { if (Template != null) // { Controls.Clear(); administrationData = new AdministrationData(); Template.InstantiateIn(administrationData); ...
ããã«ã¡ãœããã§ã¯ããã¿ã³ãããŒãã«ãªã©ãèŠã€ããå¿ èŠã«å¿ããŠãããã®ããããã£ãå ¬éããŸãã ããšãã°ãããŒã¯ã³ãã€ã³ããã¿ã³ïŒ
var rtwConnect = (Button)administrationData.FindControl("rtwConnect");
ãŸããããŒãžã«å€æ°ãè¿œå ããŸã-ã°ããŒãã«JavaScriptå€æ°$ grd_ctrlsã®ããããã£ãšããŠããããã®domãªããžã§ã¯ããžã®ãã€ã³ã¿ãŒ
IdToJavaScript(rtwConnect, JScontrolVar, "rtwConnect", Page); public static void IdToJavaScript(Control ctrl, string jsvar, string field, Page page) { page.ClientScript.RegisterStartupScript(typeof (Control), field, jsvar + "." + field + " = rtwGID('" + ctrl.ClientID + "'); ", true); }
åèšãããšãå¿ èŠãªããŒã¯ã¢ãããšãããã®ããŒã¯ã¢ããèŠçŽ ãžã®ãªã³ã¯ã$ grd_ctrlsã®ããããã£ãšããŠçšæãããŸãã
å¶åŸ¡ãã¿ãŒã³ãèæ ®ããŠãã ããã
éå¶
ãã®ã³ã³ãããŒã«ã®ããŒã¯ã¢ããã¯ããªãé¢åã§ãã ãããããã¹ãŠã®ããŒã¿ã¯ããã«ãããŸãã
<token:Administration ID="backoffice" runat="server" Port="12345"> <template> <label> :</label> <asp:GridView runat="server" ID="rtwEnable" CssClass="OrdersGr" AutoGenerateColumns="False" GridLines="None" ShowHeaderWhenEmpty="False"> <EmptyDataTemplate> </EmptyDataTemplate> <Columns> <asp:TemplateField HeaderText="Token Id"> <ItemTemplate> <%# ((uint)Container.DataItem) %> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Label ID="rtwEnabledToken" runat="server"></asp:Label> </ItemTemplate> </asp:TemplateField> <asp:TemplateField HeaderText=""> <ItemTemplate> <asp:Button runat="server" ID="rtwEnableSwitch" OnClientClick="return false;"/> <asp:Button ID="rtwRemove" runat="server" Text=" " OnClientClick="return false;" ClientIDMode="Predictable"/> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <br /> <label> Web:</label> <asp:Button ID="rtwConnect" runat="server" Text=" "/> <br /> <asp:Image ID="rtwAjaxImg" runat="server" ImageUrl="~/ajax_loader.gif" /> <br /> <asp:Label ID="rtwErrorMessage" runat="server" CssClass="errLabel" /> <asp:Label ID="rtwMessage" runat="server" CssClass="status ok" /> </template> </token:Administration>
ååãšããŠãããã§ã¯ãããŒã¯ã³ããã€ã³ããã¢ã³ã¿ã€ã€ã³ã°ãããã³ããŒã¯ã³ã®åãæ¿ãã®ããã®ãã¿ã³ãããã³æ å ±ã¡ãã»ãŒãžãšãšã©ãŒã¡ãã»ãŒãžçšã®2ââã€ã®ã¹ãã³ãæã€ããŒãã«ã®ã¿ã§ãã
ããŒã¯ã³ããŒãã«ã®ããŒã¿ã¯ãITokenController GetUserTokensã€ã³ã¿ãŒãã§ã€ã¹ã¡ãœããã«ãã£ãŠæäŸãããŸã
// List<uint> GetUserTokens(string login); rtwEnable.DataSource = m_tokenProcessor.GetUserTokens(m_tokenProcessor.GetUserName()); rtwEnable.DataBind();
ãã°ã€ã³ãèšæ¶
èªèšŒãŸãã¯ã¢ã¯ã»ã¹å埩ã®å¶åŸ¡ã ããŒã¯ã³ã䜿çšããã«åŸ©æ§ããããšãã§ããŸããRootokenWEBã«ãŒãã«èšèŒãããŠãããã°ã€ã³ããã³åŸ©æ§ã³ãŒããå ¥åããå¿ èŠããããŸãïŒããŒã¯ã³ãä»å±ïŒ
ãã°ã€ã³ããŒã¯ã¢ããã®äŸïŒ
<aktivlogin:Login ID="tokenlogin" runat="server" LoginType="Login"> <Template> <asp:Literal ID="rtwUsers" runat="server" /> <asp:Label ID="rtwErrorMessage" runat="server" CssClass="rutoken error" style="display: block; color: #c00;" /> <asp:Label ID="rtwMessage" runat="server" CssClass="rutoken message" style="display: block; color: green;" /> <asp:Button ID="rtwLogin" runat="server" OnClientClick="return false;" Text="" style="margin-top:12px;" /> <asp:Image ID="rtwAjaxImg" runat="server" ImageUrl="~/ajax_loader.gif" /> </Template> </aktivlogin:Login>
Literalã®ãããªã³ã³ãããŒã«ããããçµæãšããŠselectãçæããŸãã DropDownListã䜿çšããããšãã§ããŸãããjavascriptã®ããŒã¯ã³ã«ãã°ã€ã³ã®ãªã¹ããè¿œå ãããã¹ãããã¯ãããå ŽåãããŒãžã®EventValidationãèªããŸãã ãªãã«ããªãããã«ãèªåã§éžæããŠæç»ããŸãã
rtwUsers.Text = "<select id=\"rtwUsers\"></select>";
ã¢ã¯ã»ã¹ãªã«ããªããŒãã£ã·ã§ã³ã®äŸïŒ
<aktivlogin:Login ID="tokenlogin" runat="server" LoginType="Remember"> <Template> : <asp:TextBox ID="rtwRepairUser" runat="server" /><br /> : <asp:TextBox ID="rtwRepair" runat="server" /><br /> <asp:Label ID="rtwErrorMessage" runat="server" style="display: block; color: #c00;" /> <asp:Label ID="rtwMessage" runat="server" style="display: block; color: green;" /> <asp:Button ID="rtwRepairBtn" runat="server" OnClientClick="return false;" Text="" style="margin-top:12px;" /> <asp:Image ID="rtwAjaxImg" runat="server" ImageUrl="/ajax_loader.gif" /> </Template> </aktivlogin:Login>
ã芧ã®ãšãããLoginType = LoginãŸãã¯Rememberã瀺ãããšã§ç°ãªããŸãã
Javascript
ã¡ã€ã³ã®javascriptã¯tokenadmin.jsã«ããããã³ãã©ãŒã«ãã£ãŠåŠçãããŸãã ã¹ã¯ãªããã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ããã©ã°ã€ã³ããµãŒããŒãæ¥ç¶ããŸãã
ã€ã³ã¿ãŒãã§ã€ã¹èŠçŽ ã¯ãã°ããŒãã«å€æ°$ grd_ctrlsã®ããããã£ã«ãã€ã³ããããŠããŸããã³ã³ãããŒã«ã³ãŒãã§ãã€ã³ãããpage.ClientScript.RegisterStartupScriptã䜿çšããŠããŒãžã«å€æ°ãé 眮ããŸãã ãã©ã°ã€ã³ãªããžã§ã¯ãã¯$ grd_ctrls.tokenã§ãã
Tokenadminã 次ã«ãã³ãŒã«ããã¯ã䜿çšããŠãŠãŒã¶ãŒãªã¯ãšã¹ãã®åŠçãè¡ããŸãã ããšãã°ãèªèšŒäžã«ãã¹ã¯ãªããã¯æåã«ããŒã¯ã³äžã®ãã¹ãŠã®ãã°ã€ã³ãèªã¿åããããããéžæïŒrtwUsersïŒã«è¿œå ããŸãã
var containerCount = g.token.rtwGetNumberOfContainers(); for (i = 0; i < containerCount; i++) { var contName = g.token.rtwGetContainerName(i); g.rtwUsers.options[i] = new Option(contName.replace("#%#", " - "), contName); }
ãŠãŒã¶ãŒã¯ç®çã®ãã°ã€ã³ãéžæããããã°ã€ã³ããã¿ã³ãæŒããŸãã
rndã³ãã³ããšããŒã¯ã³IDã䜿çšããŠãµãŒããŒã«ãªã¯ãšã¹ããéä¿¡ããŸãã ãã¹ãŠãæ£åžžã§ããã°ã次ã®åœ¢åŒã®jsonãååŸããŸãã
{ãããã¹ããïŒã94156e9a6642d42a47fc94c6f4b1b8c000dab4bfd24f321f5976e4d3a5a4e994ãããã¿ã€ããïŒãéç¥ã}
ããã¯ãµãŒããŒã§çæãããã·ãŒã±ã³ã¹ã§ãããã¢ã«ãŽãªãºã ã«åŸã£ãŠãã©ã³ãã ããŒã¿ãè¿œå ããå¿ èŠããããŸãã ã³ãŒã«ããã¯é¢æ°ã¯ãã®ããŒã¿ãçæãããµãŒããŒãéä¿¡ãããã®ãšé£çµãããã©ãŠã¶ãŒãã©ã°ã€ã³ã®ããã·ã¥ãšãµã€ã³ãèæ ®ããŸãã ããŒã¿ã®çœ²åã«ã¯PINã³ãŒãå ¥åãå¿ èŠã§ãã ãŠãŒã¶ãŒããã³ãå ¥åããŸãã ãã¹ãŠãæ£åžžã§ããã³ãæ£ããå Žåã眲åãšã©ã³ãã ããŒã¿ããµãŒããŒã«éä¿¡ããŸãã ãµãŒããŒã¯æååãé£çµãã眲åãæ€èšŒããŸãã 眲åãæ£ããå ŽåãçããåŸãããŸãã
{ãããã¹ããïŒãTrueãããã¿ã€ããïŒãéç¥ãããURLãïŒã\ / RutokenWebSTS \ / Admin \ /ã}
èªèšŒCookieãåçãšå ±ã«æäŸããããããéä¿¡ãããURLã«ãŠãŒã¶ãŒããªãã€ã¬ã¯ãããŸãã èªèšŒã«åæ ŒããŸããã
眲åæ€èšŒ
ç§ã¯ãã¹ãŠã®æå·åãå¥åã®dllã§åãåºããŸããã 3ã€ã®æ¹æ³ã¯å€èŠã§ãã
- ã©ã³ãã ããã·ã¥çæ
- æååããã·ã¥èšç®
- 眲åã®æ€èšŒ
ãã®ã¢ã»ã³ããªã®ã¿ã䜿çšããŠãèªèšŒã¢ã«ãŽãªãºã ã®å®è£ ãäœæã§ããŸãã
ãããŠæåŸã«ãçãã¢ã»ã³ããªåœä»€ã
ïŒ.net 4.0ãiis 7.5ã§ãã¹ãæžã¿ïŒ
1. RutokenWebPlugin.dllããã³Rutoken.dllã¢ã»ã³ããªããããžã§ã¯ãã«è¿œå ããŸã
2. Web.configã«httpHandlerãè¿œå ããŸã
<system.webServer> <handlers> <add name="AjaxHandler" path="/RutokenWebSTS/rutokenweb/ajax.rtw" verb="*" type="RutokenWebPlugin.TokenAjaxHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" /> </handlers> </system.webServer>
ãã¹ã¯ã/rutokenweb/ajax.rtwãã§çµããå¿ èŠããããŸãã äžèšã®äŸã®ããã«ããµã€ã/ã¢ããªã±ãŒã·ã§ã³ãä»®æ³ãã£ã¬ã¯ããªã«ã€ã³ã¹ããŒã«ãããŠããå Žåã¯ãããããã¹ã«å«ããŸãã
å¿ èŠã«å¿ããŠããã¹ãŠã®ãŠãŒã¶ãŒããã³ãã©ãŒãå©çšã§ããããã«ããå¿ èŠããããŸã
<location path="rutokenweb"> <system.web> <authorization> <allow users="*" /> </authorization> </system.web> </location>
3. ITokenProcessorã€ã³ã¿ãŒãã§ãŒã¹ãå®è£ ããŸã
public class CustomTokenProcessor : ITokenProcessor { âŠ..
æãéèŠãªç¬éãã³ã¡ã³ãä»ãã®å®è£ äŸã¯ãœãŒã¹ã«ãããŸã
4.ããŒã¯ã³ç®¡çïŒå人ã¢ã«ãŠã³ãïŒã®å¶åŸ¡ãè¿œå ããŸã
<%@ Register TagPrefix="token" Namespace="RutokenWebPlugin" Assembly="RutokenWebPlugin" %>
ã³ã³ãããŒã«ãã³ãã¬ãŒãïŒãã³ãã¬ãŒãã®äŸã¯èšäºã«ãããŸããïŒ
<token:Administration ID="backoffice" runat="server" Port="12345" > <Template> âŠ..
ã¢ããªã±ãŒã·ã§ã³ãããŒã80ã§åäœããªãå ŽåãããŒãã瀺ããŸãã
5.管çã³ã³ãããŒã«ã®åé¢ã³ãŒãã§ãITokenProcessorãå®è£ ãããªããžã§ã¯ããè¿œå ããŸã
protected override void OnInit(EventArgs e) { base.OnInit(e); // CustomTokenProcessor : ITokenProcessor var processor = new CustomTokenProcessor(); // backoffice.TokenProcessor = processor; // backoffice.SetRequired(processor, "/"); }
6.èªèšŒã®å¶åŸ¡ããã°ã€ã³ããŒãžã«è¿œå ãã
<%@ Register TagPrefix="aktivlogin" Namespace="RutokenWebPlugin" Assembly="RutokenWebPlugin" %>
ããã³ãã®ãã³ãã¬ãŒã
<aktivlogin:Login ID="tokenlogin" runat="server" SuccessUrl="http://localhost/Secured/" LoginType="Login"> <Template> âŠâŠ.
8.ãã°ã€ã³ã®ããåé¢ã³ãŒãã³ã³ãããŒã«ã§ãITokenProcessorãå®è£ ãããªããžã§ã¯ããè¿œå ããŸã
protected override void OnInit(EventArgs e) { base.OnInit(e); // returnurl , tokenlogin.SetRequired(new CustomTokenProcessor(), returnurl); }
ãã®åŸãããŒã¯ã³ã«ãããã°ã€ã³ãèªèšŒããŒãžã«è¡šç€ºãããå人ã¢ã«ãŠã³ãã§ããŒã¯ã³ã管çããæ©äŒããããŸã-ã¢ã«ãŠã³ãã«ãã€ã³ãããã¢ã¯ãã£ããã£ãåãæ¿ããŸãã äœãããå¿ èŠããã£ããã
äžããããäŸã¯ããªãã®ããŒãºã«åãããŠå€æŽããããšã¯é£ãããããŸããããããã¯ã眲åæ€èšŒã§ã©ã€ãã©ãªã䜿çšããæåãããã¹ãŠãè¡ãããšãã§ããŸãã
ãã¹ããµã€ããšããŒã¿ããŒã¹ã®ã¹ã¯ãªãããå«ããµã³ãã«ã®ãœãŒã¹ã¯ã ããããããŠã³ããŒãã§ããŸãã