How to use Mobile-ID in Python Anton Keks, 24 Nov 2011

Mobile-ID (Mobiil-ID) is a personal mobile identity in Estonia and Lithuania, provided by an additional application on a SIM card.

The good thing is that it is backed by government and provides the same level of security for authentication and digital signatures as a national ID card without the need of having a smart card reader.

So, while thinking on adding Mobile-ID authentication to our era.ee free domain service, I have came up with this Python code, which is incredibly simple. Replace +372xxxxxx with your own phone number for testing and register it at https://demo.sk.ee/MIDCertsReg/ before running the code.

from sys import exit
from suds.client import Client
import time
import logging
logging.basicConfig(level=logging.INFO)


url = 'https://tsp.demo.sk.ee/?wsdl' # test env
client = Client(url)


mid = client.service.MobileAuthenticate('', '', '+372xxxxxx', 'EST', 'Testimine', 'era.ee login', '12345678901234567890', 'asynchClientServer', 0, False, False)
if mid.Status != 'OK':
    print mid.Status
    exit(1)


print 'Challenge: ' + mid.ChallengeID


status = 'OUTSTANDING_TRANSACTION'
while status == 'OUTSTANDING_TRANSACTION':
    time.sleep(2)
    status = client.service.GetMobileAuthenticateStatus(mid.Sesscode, False).Status


if status != 'USER_AUTHENTICATED':
    print status
    exit(2)


print 'Authenticated: ' + mid.UserGivenname + ' ' + mid.UserSurname + ', ' + mid.UserIDCode

Don't forget to install the SUDS Python library that does the magic of creating SOAP requests (apt-get install python-suds on Debian & Ubuntu)

Archived comments

ornyx 2012-03-07T20:17:07.200Z

In real environment sadly this script does not work for me also customer has agreement with sk.ee - returns 101 server fault. What is the real URL and request? Is everything the same?