MitID automatisk login


Vi er en del småbørnsforældre som hiver data ud af Aula til brug i Home Assistant. Jeg får f.eks. notifikationer når mine børn bliver hentet, så jeg på den måde ved at jeg ikke behøver hente den dag – noget vi tit ringede sammen om når vi var på vej hjem fra hver vores arbejde. Dette kan lade sig gøre via følgende projekt.

Det er også med inspiration fra dette, at jeg har lavet et script til at hente billeder fra Aula, og lægge dem i et Google Photos album, som vises på tv’et.

Alt dette lader sig gøre, fordi det i øjeblikket er muligt at logge ind i Aula vha. Unilogin, som består af brugernavn + kodeord. Dette automatiseres vha. Python bibliotekerne “requests” og “BeautifulSoup”.

Når Unilogin om lidt går væk fra login med brugernavn og kodeord, går de i stedet over til login med MitID. Det bliver formentlig stadig via deres broker/idp, men man slipper ikke uden om MitID, som jo kræver godkendelse via telefon eller nøgleviser, og ikke kan automatiseres.

Et alternativ kunne være at snuppe logincookies fra browseren efter login, og bruge dem i ens program/script i stedet (PHPSESSID og Csrfp-Token)
Disse vil udløbe før eller siden, og kræver derfor udskiftning.

Tanken er derfor at der via en switch i HA, trigges et automatiseret login i MitID, som efter få sekunder kan godkendes i MitID-appen – efter endt login, gemmes cookies, og bruges i fremtidige kald til Aulas API. Om dette er holdbart, afhænger af hvornår cookies udløber. Hvis det kaldes hvert 5./10. minut, er det måske tilstrækkeligt.

Et kig på loginflowet i MitID

Når man er logget på eksempelvis netbank med MitID, og går til borger.dk, skal man logge på igen. De genbruger derfor ikke sessionen, hvilket er godt! Man ved derfor altid hvad der gives adgang til, når man swiper i appen.
Der er flere ting i MitID som jeg mener er problematisk/uhensigtsmæssigt, en af dem er at det åbenbart ikke er alle sider der kræver 2-faktor login, Aula værende en af dem, hvilket derimod er godt nyt for vores scripts!

Hvis man logger på borger.dk med 2-faktor login, og derefter går til Aula, kommer man på uden at skulle taste hverken kode eller bruge app.

Så med mindre det er et sammenfald af tilfældigheder, er det altså muligt at genbruge sessionen, hvis den pågældende tjeneste ikke kræver 2-faktor. Det kan vi udnytte til at lave automatiseringen, uden swipe i appen.

input-id’et er ikke det samme hver gang – den skifter mellem 0-9, både i brugernavn og næste-knap, som her:

Hvad meningen skulle være med dette, andet end at gøre livet surt for mig, ved jegi kke.. men ikke noget lidt for-loops ikke kan klare..

for i in range (10):
	element = driver.find_element(By.NAME, "username"+str(i))
	try:
		element.send_keys("ditbrugernavntilmitid")
	except:
		pass

for i in range (10):
	try:
		link = driver.find_element(By.XPATH, "//*[@id='loginBtn"+str(i)+"']")
		link.click()
	except:
		pass

So far so good… jeg har noget der næsten virker, men er afhængig af Selenium, som åbner et browservindue mens den kører, hvilket så forudsætter at den kører på en maskine med desktop – jeg har prøvet headless, men det virker ikke. Nogen hints? Jeg er ret sikker på det ikke kan gøres med requests, da det meste ser ud til at blive genereret med Javascript.

Hvis du stadig læser med, og er lidt nørdet omkring emnet som jeg, vil du sikkert også finde denne tråd på reddit interessant. Min egen er selv blevet spærret nogen gange da jeg testede, så der skal ikke meget til. Kender du en vens (fjendes) brugernavn, kan du i princippet gøre det umuligt for dem at logge ind.

Hverken indfasningen af MitID eller udfasningen af NemID er færdig, og der er allerede flere flaws ved løsningen. Hvor mange du kender, har f.eks. MitID nøgleviseren? Du ved, den du skal bruge når din telefon er røget i dammen?

Når man opretter MitID får man valgmuligheden mellem app eller nøgleviser – hvem helvede gider vente 3 uger på et posten måske kommer med den? Man vælger selvfølgelig App, for derefter at gøre ingenting. Det burde være obligatorisk at få tilsendt nøgleviseren, præcis som det var med papkortet.


Leave a Reply

Your email address will not be published. Required fields are marked *