Unohtuneen salasanan resetointi itsepalveluna – MIM 2016 ja PowerShell

Unohtuneen salasanan resetointi itsepalveluna – MIM 2016 ja PowerShell

Jos organisaatiolla on Microsoft Identity Manager (MIM) 2016, käyttäjät voivat sen avulla resetoida unohtuneet salasanansa itse (Self-Service Password Reset, SSPR).

Vaihtoehdot salasanan resetointiin

MIM 2016 tarjoaa useita vaihtoehtoja unohtuneen salasanan resetointiin itsepalveluna.

Vaihtoehtoja ovat:

  • Kertakäyttökoodi sähköpostilla (Email). Jos käyttäjälle on rekisteröity sähköpostiosoite, jota hän pääsee lukemaan silloinkin, kun normaali salasana on unohtunut, hän voi pyytää MIM-palvelimelta koodin tähän sähköpostiin. Koodin syöttämällä käyttäjä pääsee vapauttamaan käyttäjätunnuksensa (unlock) tai resetoimaan salasanansa.
  • Kertakäyttökoodi tekstiviestillä (SMS). Jos käyttäjälle on rekisteröity kännykkänumero, hän voi pyytää MIM-palvelimelta koodin tekstiviestillä. Koodin syöttämällä käyttäjä pääsee vapauttamaan käyttäjätunnuksensa (unlock) tai resetoimaan salasanansa. Tämä vaihtoehto vaatii lisäpalvelun konfiguroinnin, jotta tekstiviestien lähettäminen onnistuu.
  • Kertakäyttökoodi puhelinsoitolla (Phone). Jos Azure Multi-Factor Authentication (MFA) on käytössä organisaatiolla, se voi konfiguroida MIM-palvelimen käyttämään Azure MFA:ta. Tällöin käyttäjälle tulee puhelinsoitto, jossa hän saa kertakäyttökoodin. Koodin syöttämällä käyttäjä pääsee vapauttamaan käyttäjätunnuksensa (unlock) tai resetoimaan salasanansa.
  • Kysymykset ja vastaukset (QA). MIM-palvelimeen voidaan tallentaa joukko kysymyksiä, kuten lempielokuva tai ensimmäisen ulkomaanmatkan kohde. Kun käyttäjä syöttää näihin etukäteen omat vastauksensa, hän voi sitten salasanan unohdettuaan resetoida sen tietämällä nämä vastaukset.

Käyttäjä suorittaa mallivastausten rekisteröinnin ja salasanan resetoinnin joko MIM-palvelimen tarjoamissa portaaleissa tai jälkimmäisen myös suoraan Windowsin logon-ruudun kautta. Windows-vaihtoehto vaatii, että työasemaan on asennettu MIM-asiakasohjelmisto.

Kun käyttäjä on MIM-palvelimen portaalissa todistanut kuka hän on, hän voi vapauttaa käyttäjätunnuksensa tai resetoida unohtuneen salasanansa.[/caption]

Salasanojen resetointi itsepalveluna voidaan toteuttaa myös ilman MIM-palvelinta käyttämällä Azuren SSPR-toimintoa. Jos käyttäjä resetoi siellä salasanansa, uusi voidaan kirjoittaa takaisin organisaation paikalliseen Active Directory -hakemistoon Password Writeback -toiminnolla.

Mallivastausten syöttäminen PowerShellillä kaikille käyttäjille

Edellä mainitun QA-vaihtoehdon mallivastausten syöttämisestä on käyttäjille oma riesansa, ja sopivien kysymyksien miettinen voi olla vaikeaa. Lempielokuvaa tai lempiravintolaa ei kenties ole, tai omaa vastausta on vaikea muistaa enää vuoden päästä. Tätä tosin helpottaa, jos kysymyksiä tarjotaan käyttäjälle enemmän kuin mihin hänen tarvitsee vastata.

Vaihtoehtona on, että mallivastaukset syötetään kaikille käyttäjille automaattisesti joidenkin HR-tietojen perusteella. Alla oleva PowerShell-skripti ensin lukee käyttäjän tietoja MIM-metaversestä ja sitten kirjoittaa ne hänen mallivastauksikseen.

MIM-metaverseä ei saa periaatteessa käyttää suoraan tietokantatasolla, mutta puhdas tietojen lukeminen kyseisestä SQL-taulusta on turvallista.

MIM-hallintaportaalin Workflow-osiossa on Password Reset AuthN Workflow, jonka toiminnoissa tarvitaan QA Gate. Siinä kerrotaan seuraavien kuvien mukaisesti kysymysten lukumäärä ja itse kysymykset.

MIM Workflow:n tiedoissa kerrotaan, montako kysymystä on olemassa ja moneenko käyttäjän täytyy tietää vastaus, että salasanan resetointi on mahdollista.
Step 2:ssa määrätään ne kysymystekstit, jotka käyttäjälle näytetään.

Mallivastausten syöttäminen toisen puolesta täytyy erikseen sallia luomalla Management Policy Rule, MPR. Tämä tapahtuu MIM-hallintaportaalin vastaavassa osiossa, jossa luodaan MPR seuraavilla tiedoilla:

  • Name: Create and Delete Gate Registration Objects
  • Type: Request
  • Requestors: Administrators (voisi luoda myös setin tähän tarkoitukseen)
  • Operation: Create resource ja Delete resource
  • Permissions: Grants permission (rasti ruutuun)
  • Target Resource Definition Before Request: All Gate Registration
  • Target Resource Definition After Request: All Gate Registration
  • All Attributes: (valintanappi tähän kohtaan)
  • Policy Workflows: ei mitään

Tämän jälkeen voidaan suorittaa alla oleva skripti. Se lukee käyttäjän tiedot MIM-metaversestä ja kirjoittaa mallivastaukset. Esimerkissä nämä ovat Employee ID ja Department. Ne eivät sinänsä ole kovin salaisia, eli sellaisia tietoja pitäisi käyttää, joita väärät henkilöt eivät tiedä.

Skripti on alla kahteen kertaan, ensin kuvana värien vuoksi ja sitten tekstinä, jotta se on kopioitavissa ja haulla löydettävissä.

Skriptin alkuosassa kytkeydytään MIM-metaverse-tietokantaan SQL-komennoilla ja haetaan sieltä käyttäjätiedot.

Skriptin loppuosassa käydään käyttäjät läpi ja kirjoitetaan kullekin mallivastaukset.

# Sakari Kouti
# 8.2.2019

# Muodostetaan SQL-kysely, jossa haetaan halutut tiedot MIM-metaversestä
$SqlCommand = ”SELECT accountName,displayName,employeeID,department ” +
”FROM mms_metaverse WHERE object_type LIKE ’person’”

# Kerrotaan mihin kytkeydytään, SERVER-nimisen palvelimen MIM-Sync-tietokanta
$ConnectionString = ”Data Source=SERVER; ” +
”Integrated Security=SSPI; ” +
”Initial Catalog=FIMSynchronizationService”

# Avataan yhteys SQL-tietokantapalvelimeen
$Connection = New-Object System.Data.SqlClient.SQLConnection($ConnectionString)
$Command = New-Object System.Data.SqlClient.SqlCommand($SqlCommand,$Connection)
$Connection.Open()

# Luetaan tulokset SQL-tietokannasta (eli MIM-metaversestä)
$Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Command
$DataSet = New-Object System.Data.DataSet
$Adapter.Fill($DataSet) | Out-Null
$Connection.Close()

$AuthWFName = ”Password Reset AuthN Workflow” # portaalin Workflow:n nimi
Add-PSSnapin FIMAutomation # tarvitaan MIM Snapin

# Käydään läpi kukin rivi eli kukin käyttäjä
foreach ($Row in $DataSet.Tables.Rows) {
$AccountName = $Row.accountName

# JennyG on testikäyttäjä, kaikki muut ohitetaan tekemättä mitään
if ($AccountName -ne ”JennyG”) {continue}
# Testin jälkeen tämä if-lause voidaan poistaa

# Näytetään ketä käyttäjää juuri prosessoidaan
Write-Host ”Prosessoidaan käyttäjä $($Row.displayName), $($AccountName)”

$UserName = ”LITWARE\$AccountName”
$EmployeeID = $Row.employeeID
$Department = $Row.department

# Ei rekisteröidä vastauksia, jos yksikin niistä on (lähes) olematon
if ($EmployeeID.Length -lt 4) {continue}
if ($Department.Length -lt 4) {continue}

$Template = Get-AuthenticationWorkflowRegistrationTemplate `
-AuthenticationWorkflowName $AuthWFName
$UserTemplate = $Template.Clone()

# Jos Workflow:ssa on usea QA Gate, ensimmäinen on indeksi 0 ja
# toinen indeksi 1. Tässä niitä on kaksi. Jälkimmäisessä on kaksi
# mallivastausta, arvot [0] ja [1].
$UserTemplate.GateRegistrationTemplates[0].Data[0].Value = ”1234”
$UserTemplate.GateRegistrationTemplates[1].Data[0].Value = $EmployeeID
$UserTemplate.GateRegistrationTemplates[1].Data[1].Value = $Department

# Kirjoitetaan käyttäjälle mallivastaukset
Register-AuthenticationWorkflow -UserName $UserName `
-AuthenticationWorkflowRegistrationTemplate $UserTemplate
# Tuloksena pitäisi näkyä Registration Successful

# Tutkitaan, onko käyttäjällä mallivastaukset, paluuarvo True tai False
Confirm-AuthenticationWorkflowRegistration -UserName $UserName `
-AuthenticationWorkflowName $AuthWFName
}

Tutustu Microsoft Identity Manager koulutukseen

Microsoft Identity Manager (MIM) 2016