public async Task<bool> MobileAuthenticateAsync15Continue() { var sw = Stopwatch.StartNew(); var c = new sk.DigiDocServicePortTypeClient(new BasicHttpsBinding(), new EndpointAddress("https://tsp.demo.sk.ee:443")); Console.WriteLine("before GetMobileAuthenticateStatusAsync " + new { sw.ElapsedMilliseconds, MobileAuthenticateAsync15_Sesscode }); var xGetMobileAuthenticateStatusResponseTask = c.GetMobileAuthenticateStatusAsync( new sk.GetMobileAuthenticateStatusRequest { Sesscode = MobileAuthenticateAsync15_Sesscode, WaitSignature = true } ); // are we to show xa.Result.Sesscode // to client. signed? Console.WriteLine("after GetMobileAuthenticateStatusAsync " + new { sw.ElapsedMilliseconds }); // we need to switch to ui and back var xGetMobileAuthenticateStatusResponse = xGetMobileAuthenticateStatusResponseTask.Result; Console.WriteLine("after GetMobileAuthenticateStatusAsync done " + new { sw.ElapsedMilliseconds, xGetMobileAuthenticateStatusResponse.Signature }); //NB! Enne esimese staatuse päringu saatmist on soovitatav oodata vähemalt 15 //sekundit kuna autentimise protsess ei saa tehniliste ja inimlike piirangute tõttu //kiiremini lõppeda. Mobiil-ID toimingud aeguvad hiljemalt 4 minuti jooksul. //invoke MobileAuthenticateAsync { ElapsedMilliseconds = 0 } //after MobileAuthenticateAsync { ElapsedMilliseconds = 715 } //after MobileAuthenticateAsync done { ElapsedMilliseconds = 1527, Sesscode = 622288131 } //after GetMobileAuthenticateStatusAsync { ElapsedMilliseconds = 1531 } //after GetMobileAuthenticateStatusAsync done { ElapsedMilliseconds = 16566, Signature = qxgf var v = new VerifiableString { value = new { MobileAuthenticateAsync15_UserIDCode, //MobileAuthenticateAsync15_Sesscode, xGetMobileAuthenticateStatusResponse.Status }.ToString() // if we can verify it later, we can trust it to be set by the web service. otherwise we cannot trust it. // this would also enable state sharing now. // signed and perhaps encrypted too.. }.Sign(NamedKeyPairs.WebServiceAuthorityPrivateKey.RSAParameters); // sign status // mouse over shows the sig. yay. status.SetAttributeValue("title", Convert.ToBase64String(v.signature)); status.Value = v.value; return true; }
public async Task<bool> MobileAuthenticateAsync() { // Z:\jsc.svn\examples\java\hybrid\JVMCLRWSDLMID\Program.cs // https://tsp.demo.sk.ee/?wsdl //var c = new sk.DigiDocServicePortTypeClient("DigiDocService", "https://tsp.demo.sk.ee:443"); var c = new sk.DigiDocServicePortTypeClient(new BasicHttpsBinding(), new EndpointAddress("https://tsp.demo.sk.ee:443")); var sw = Stopwatch.StartNew(); Console.WriteLine("invoke MobileAuthenticateAsync " + new { sw.ElapsedMilliseconds }); var xa = c.MobileAuthenticateAsync(new sk.MobileAuthenticateRequest { // http://www.id.ee/?id=30340 // http://www.sk.ee/upload/files/DigiDocService_spec_est.pdf // Autenditava isiku isikukood. //Kohustuslik on kas IDCode või PhoneNo, //soovitatav on kasutada mõlemat //sisendparameetrit! Leedu Mobiil-ID kasutajate //puhul on kohustuslikud IDCode ja PhoneNo IDCode = "14212128025", // Isikukoodi välja andnud riik, kasutatakse ISO 3166 // 2 tähelisi riigikoode (näiteks: EE) CountryCode = "EE", // Autenditava isiku telefoninumber koos riigikoodiga //kujul +xxxxxxxxx (näiteks +3706234566). //Kui on määratud nii PhoneNo kui ka IDCode //parameetrid, kontrollitakse telefoninumbri //vastavust isikukoodile ja mittevastavuse korral //tagastatakse SOAP veakood 301. Kohustuslik on //kas IDCode või PhoneNo, soovitatav on kasutada //mõlemat sisendparameetrit! Leedu Mobiil-ID //kasutajate puhul on kohustuslikud IDCode ja //PhoneNo (vt. peatükk 5.2). Kui element “PhoneNo” //on määratud, siis teenuse siseselt lähtutakse //prefiksis määratud riigi tunnusest (sõltumata //elemendi "CountryCode" väärtusest) //PhoneNo = "+37200007" PhoneNo = "37200007", // Telefonile kuvatavate teadete keel. Kasutatakse: 3- // tähelisi koode suurtähtedes.Võimalikud variandid: //(EST, ENG, RUS, LIT). Language = "EST", // Autentimisel telefonil kuvatav teenuse nimetus, //maksimaalne pikkus 20 tähemärki. //Eelnevalt on vajalik kasutatava teenuse nimetuse //kokkuleppimine teenuse pakkujaga ServiceName = "Testimine", //Täiendav tekst, mis autentimise PIN-i küsimise //eelselt lisaks teenuse nimetuse kasutaja telefonile //kuvatakse. Maksimaalne pikkus 40 baiti (ladina //tähtede puhul tähendab see ühtlasi ka 40 sümboli //pikkust teksti, aga näiteks kirillitsa teksti puhul //võidakse tähti kodeerida 2 baidistena ja siis ei saa //saata pikemat kui 20-sümbolilist teksti). MessageToDisplay = "Testimine", //- Rakenduse pakkuja poolt genereeritud juhuslik 10 //baidine tekst, mis on osa (autentimise käigus) //kasutaja poolt signeeritavast sõnumist. //Edastatakse HEX stringina. //NB! Suurema turvalisuse huvides on soovitatav //see väli alati täita, iga kord erineva juhusliku //väärtusega. Kui autentimine õnnestub, on //soovitatav ka kontrollida, et kasutaja poolt //allkirjastatud väärtus tõepoolest ka sisaldab antud //SPChallenge-i väärtust. Täpsem info viimase //verifitseerimise kohta on peatükis //„GetMobileAuthenticateStatus“, „Signature“- //elemendi kirjelduse all. SPChallenge = "03010400000000000000", // Autentimise toimingu vastuse tagastamise viis. //Võimalikud variandid: //- “asynchClientServer” – rakendus teeb pärast //MobileAuthenticate meetodi väljakutsumist //täiendavaid staatuspäringuid (kasutades //meetodit GetMobileAuthenticateStatus). //- “asynchServerServer” – toimingu lõppemisel //või vea tekkimisel saadetakse vastus //kliendirakendusele asünkroonselt (vt. //parameeter AsyncConfiguration). MessagingMode = "asynchClientServer", //AsyncConfiguration = // Määrab asünkroonselt vastuse tagasisaatmise //konfiguratsiooni.Antud parameetri väärtust //kasutatakse ainult juhul kui MessagingMode on //“asynchServerServer”. Konfiguratsioon lepitakse //kokku teenuse kasutaja ja teenuse pakkuja vahel. //Hetkel on toetatud vastuse tagasi saatmine //kasutades Java Message Services(JMS) liidest // Kui väärtus on “TRUE”, tagastatakse vastuses //autenditava isiku sertifikaat. Sertifikaat on vajalik, //kui rakenduse pakkuja soovib talletada ja //iseseisvalt kontrollida signatuuri korrektsust ja //kehtivusinfot. ReturnCertData = true, //Väärtuse “TRUE” korral tagastatakse sertifikaadi //kehtivusinfo vastuses RevocationData väljal. ReturnRevocationData = false }); // poll for status? Console.WriteLine("after MobileAuthenticateAsync " + new { sw.ElapsedMilliseconds }); sk.MobileAuthenticateResponse x = xa.Result; Console.WriteLine("after MobileAuthenticateAsync done " + new { sw.ElapsedMilliseconds, x.Sesscode }); var xGetMobileAuthenticateStatusResponseTask = c.GetMobileAuthenticateStatusAsync( new sk.GetMobileAuthenticateStatusRequest { Sesscode = xa.Result.Sesscode, WaitSignature = true } ); // are we to show xa.Result.Sesscode // to client. signed? Console.WriteLine("after GetMobileAuthenticateStatusAsync " + new { sw.ElapsedMilliseconds }); // we need to switch to ui and back var xGetMobileAuthenticateStatusResponse = xGetMobileAuthenticateStatusResponseTask.Result; Console.WriteLine("after GetMobileAuthenticateStatusAsync done " + new { sw.ElapsedMilliseconds, xGetMobileAuthenticateStatusResponse.Signature }); //NB! Enne esimese staatuse päringu saatmist on soovitatav oodata vähemalt 15 //sekundit kuna autentimise protsess ei saa tehniliste ja inimlike piirangute tõttu //kiiremini lõppeda. Mobiil-ID toimingud aeguvad hiljemalt 4 minuti jooksul. //invoke MobileAuthenticateAsync { ElapsedMilliseconds = 0 } //after MobileAuthenticateAsync { ElapsedMilliseconds = 715 } //after MobileAuthenticateAsync done { ElapsedMilliseconds = 1527, Sesscode = 622288131 } //after GetMobileAuthenticateStatusAsync { ElapsedMilliseconds = 1531 } //after GetMobileAuthenticateStatusAsync done { ElapsedMilliseconds = 16566, Signature = qxgf var v = new VerifiableString { value = new { x.UserIDCode, x.Sesscode, xGetMobileAuthenticateStatusResponse.Status }.ToString() // if we can verify it later, we can trust it to be set by the web service. otherwise we cannot trust it. // this would also enable state sharing now. // signed and perhaps encrypted too.. }.Sign(NamedKeyPairs.WebServiceAuthorityPrivateKey.RSAParameters); // sign status // mouse over shows the sig. yay. status.SetAttributeValue("title", Convert.ToBase64String(v.signature)); status.Value = v.value; return true; }
public async Task<MobileAuthenticateAsync15State> MobileAuthenticateAsync15Continue(MobileAuthenticateAsync15State args) { var sw = Stopwatch.StartNew(); //var c = new sk.DigiDocServicePortTypeClient(new BasicHttpsBinding(), new EndpointAddress("https://tsp.demo.sk.ee:443")); var c = new sk.DigiDocServicePortTypeClient(new BasicHttpsBinding(), new EndpointAddress(serviceuri)); Console.WriteLine("before GetMobileAuthenticateStatusAsync " + new { sw.ElapsedMilliseconds, args.MobileAuthenticateAsync15_Sesscode }); var xGetMobileAuthenticateStatusResponseTask = c.GetMobileAuthenticateStatusAsync( new sk.GetMobileAuthenticateStatusRequest { Sesscode = Convert.ToInt32(args.MobileAuthenticateAsync15_Sesscode.value), WaitSignature = true } ); // are we to show xa.Result.Sesscode // to client. signed? Console.WriteLine("after GetMobileAuthenticateStatusAsync " + new { sw.ElapsedMilliseconds }); // we need to switch to ui and back var xGetMobileAuthenticateStatusResponse = xGetMobileAuthenticateStatusResponseTask.Result; Console.WriteLine("after GetMobileAuthenticateStatusAsync done " + new { sw.ElapsedMilliseconds, xGetMobileAuthenticateStatusResponse.Status, xGetMobileAuthenticateStatusResponse.Signature }); //NB! Enne esimese staatuse päringu saatmist on soovitatav oodata vähemalt 15 //sekundit kuna autentimise protsess ei saa tehniliste ja inimlike piirangute tõttu //kiiremini lõppeda. Mobiil-ID toimingud aeguvad hiljemalt 4 minuti jooksul. // no pin entered? // xGetMobileAuthenticateStatusResponse.Status = "USER_CANCEL" if (xGetMobileAuthenticateStatusResponse.Status == "USER_AUTHENTICATED") { this.identity = new VerifiableString { value = args.MobileAuthenticateAsync15_UserIDCode.value }.Sign(NamedKeyPairs.WebServiceAuthorityPrivateKey.RSAParameters); } return new MobileAuthenticateAsync15State { MobileAuthenticateAsync15Continue_Status = new VerifiableString { value = xGetMobileAuthenticateStatusResponse.Status }.Sign(NamedKeyPairs.WebServiceAuthorityPrivateKey.RSAParameters) }; }