Přihlašování bez hesla (Password-less sign-in)

Jen si zde odložím screenshoty k aktivaci a používání nedávno oznámeného přihlašování bez hesla od Microsoftu.

Podstatné je mít na mysli:

  • Tento způsob přihlašování je výchozí, a přebíjí tedy např. přihlašování přes ADFS (!)
  • Uživatelé musí mít možnost registrovat zařízení a musí používat MFA
  • Autenticator může být registrová pouze do jednoho tenantu 🙁
  • Funkce je prozatím v preview, nefunguje vždy úplně spolehlivě

1/ Aktivace na úrovni tenantu: 

New-AzureADPolicy -Type AuthenticatorAppSignInPolicy -Definition ‚{„AuthenticatorAppSignInPolicy“:{„Enabled“:true}}‘ -isOrganizationDefault $true -DisplayName AuthenticatorAppSignIn

 

2/ Stažení a registrace aplikace Microsoft Authenticator 

3/ Přídání účtu (pokud čistě náhodou už nemáme…).

4/ Pro účet povolíme přihlašování telefonem. U účtu se objeví nový indikátor

4/ Hotovo, a testujeme přihlášení, např. na https://portal.office.com

Klasika, zadáme email.

5/ Místo požadavku na zadání hesla vyskočí číslo, které si chvíli musíme pamatovat 🙂

Dobrá zpráva je, že pro případ nouze můžeme stále zadat heslo (třeba když máme telefon v ložnici nebo jiném nedosažitelném místě).

6/ Kdo používá Apple Watch, tak zjistí, že má smůlu. Snad Microsoft vyrobí samostatnou aplikaci pro hodinky.

7/ V telefonu už to vypadá lépe, potvrdíme číslo z přihlašovacího dialogu:

8/ Následuje potvrzení biometrikou

9/ A jsme přihlášeni!

 

Prozatím odpozorováno:

  • Prozatím proces ověřování ne vždy spadne do režimu bez hesla, občas se prostě objeví standardní dialog
  • Občas v přihlašovacím dialogu chybí číslo a nelze se přihlásit jinak než heslem, případně učinit druhý pokus
  • Občas dorazí oznámení bez čísla, takže ho stačí jen potvrdit. Jen člověk neví, co potvrzuje
  • Přihlášení heslem a MFA je vlastně trochu rychlejší a pohodlnější, obzvláště se správcem hesel (ale nám jde o bezpečnost)
  • Standardní MFA (kódy) může mít člověk na dvou telefonech, jedné aplikaci a hodinkách. Password-less potřebuje jedno jediné zařízení.

Pro další testování mám připraven Yubi a další tři U2F hračky. Těším se na dostupnost ověřování s U2F, dám vědět jak to ne/chodí!

Linky:

První informace:

https://techcommunity.microsoft.com/t5/Azure-Active-Directory-Identity/Announcing-password-less-login-identity-governance-and-more-for/ba-p/262472

Postup aktivace a známé problémy:

https://docs.microsoft.com/en-us/azure/active-directory/authentication/howto-authentication-phone-sign-in

Atribut “adminDescription” v AADConnectu

Tohle jsem netušil, a přitom je to prima:

Populating the “adminDescription” attribute with the value “User_NoO365Sync” or “Group_NoO365Sync” (depending on the object type) will allow you to easily filter these objects.

Office 365 – The (Previously) Undocumented AAD Connect Filter


https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnectsync-understanding-default-configuration/

Aktualizace O365/Azure PS modulů

PowerShell 5 umí instalovat moduly přímo z https://www.powershellgallery.com, což se hodí.

PS C:\> Connect-MsolService
WARNING: There is a newer version of the Microsoft Online Services Module.  Your current version
will still work as expected, however the latest version can be downloaded at
https://portal.microsoftonline.com.
PS C:\>  Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable,...
Manifest   1.0        MSOnline                            {Add-MsolForeignGroupToRole, Add-MsolG...
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, G...
Script     1.0.0.1    PowerShellGet                       {Find-DscResource, Find-Module, Find-S...
Script     1.1        PSReadline                          {Get-PSReadlineKeyHandler, Get-PSReadl...

PS C:\> Install-Module msonline -Force
PS C:\> Get-Module

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable,...
Manifest   1.0        MSOnline                            {Add-MsolForeignGroupToRole, Add-MsolG...
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, G...
Script     1.0.0.1    PowerShellGet                       {Find-DscResource, Find-Module, Find-S...
Script     1.1        PSReadline                          {Get-PSReadlineKeyHandler, Get-PSReadl...

Update 1: Tak je to špatně. Když se totiž pomocí

(get-item C:\Windows\System32\WindowsPowerShell\v1.0\Modules\MSOnline\Microsoft.Online.Administration.Automation.PSModule.dll).VersionInfo.FileVersion

podíváme na verzi, tak ten update tam prostě tu nejnovější nedá. Upozornění se sice již nezobrazuje, ale podle http://social.technet.microsoft.com/wiki/contents/articles/28552.microsoft-azure-active-directory-powershell-module-version-release-history.aspx jsou k dispozici dokonce dvě novější verze. Bez té se nedá zapnout například DuplicateUPNResiliency nebo DuplicateProxyAddressResiliency (viz. https://azure.microsoft.com/en-us/documentation/articles/active-directory-aadconnectsyncservice-duplicate-attribute-resiliency/).

Zjištění volného místa v lokální databázi AADConnect serveru

Tohle jsem nenašel nikde popsáno, takže poznačit:
1/ Zjistíme název instance z registru "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server Local DB\Shared Instances\ADSync\InstanceName"   
    -- > (např. "LOCALDB#SHF818A2") 

2/ CMD.EXE 

C:\>cd C:\Program Files\Microsoft SQL Server\110\Tools\Binn 

C:\Program Files\Microsoft SQL Server\110\Tools\Binn>sqlcmd -S "np:\\.\pipe\LOCALDB#SHF818A2\tsql\query" 

1> select * from sysdatabases 

2> go  

…..blablabla  
ADSync        100 C:\Program Files\Microsoft Azure AD Sync\Data\ADSync.mdf
 ….blablabla

1> use adsync 

2> go 

Changed database context to 'ADSync'. 

1> sp_spaceused 

2> go 

database_name  database_size      unallocated space 
------------------ ------------------ ------------------ ------------------ 
ADSync                     8973.75 MB         404.98 MB 
reserved           data               index_size         unused
 ------------------ ------------------ ------------------ ------------------ 
8609744 KB         7487144 KB         1094992 KB         27608 KB 

1>exit
Zbývá zhruba 1,4 GB místa do limitu 10 GB, takže je nejvyšší čas přesunout databázi na plnohodnotný SQL server.
Aktualizace:
Novější verze AAD Connectu již obsahují cmdlet „Get-ADSyncDatabaseConfiguration“:
PS C:\> Get-ADSyncDatabaseConfiguration

IsLocalDBInstalled    : True
LocalDBUsedSpaceInMb  : 69.69
SqlServerName         : (localdb)
SqlServerInstanceName : .\ADSync
SqlServerDBName       : ADSync

PS C:\>

CSR pro Domain Controller certifikát (offline request)

Poslední dobou často vystavujeme základní certifikáty pro doménové řadiče na certifikačních autoritách které jsou v jiných AD forestech. Možná se někomu bude hodit PowerShell skript, který celý proces generování výrazně usnadní. Výsledná žádost neobsahuje GUID, nicméně to ve většině případů ani moc nevadí 🙂

####################################################################################################
######## This script generates CSR for DC certificate (signed by external CA).
######## Version 1.2 (2016-04-19)
######## Jan Zak (www.jan-zak.cz)
####################################################################################################

#Define variables

$ComputerName=(Get-WmiObject win32_computersystem).DNSHostName
$ComputerDomain=(Get-WmiObject win32_computersystem).Domain
$ComputerFQDN=(Get-WmiObject win32_computersystem).DNSHostName+"."+(Get-WmiObject win32_computersystem).Domain
$DomainNetBIOSName=(Get-ADDomain).NetBIOSName
#$WorkDir=(Get-Location).Path 
$WorkDir=$Env:USERPROFILE + "\Desktop"
$CSRFilePath = $WorkDir + "\" + $ComputerName + ".csr"
$DCRequestINFFileName = $WorkDir + "\" + $ComputerName + ".inf"

Clear-Host

#Verify permissions for access to private keys
$myIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
$wp = New-Object Security.Principal.WindowsPrincipal($myIdentity)
if (-not $wp.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)) {
 Write-Host "This script requires administrative privileges, please re-launch with elevated credentials." -ForegroundColor Red -BackgroundColor Yellow
 Start-Sleep 20
 Exit
}


Write-Host "Collecting data for CSR:" -ForegroundColor Green

$CN=if(($result = Read-Host "Press enter to accept $ComputerFQDN as CN or specify a value: ") -eq '') {$ComputerFQDN} else {$result}
$SAN1=if(($result = Read-Host "Press enter to accept $CN as SAN1 or specify a value: ") -eq '') {$CN} else {$result}
$SAN2=if(($result = Read-Host "Press enter to accept $ComputerDomain as SAN2 or specify a value: ") -eq '') {$ComputerDomain} else {$result}
$SAN3=if(($result = Read-Host "Press enter to accept $DomainNetBIOSName as SAN3 or specify a value: ") -eq '') {$DomainNetBIOSName} else {$result}
Write-Host
Write-Host Values to build CSR: -ForegroundColor Green
Write-Host ==================== -ForegroundColor Green
Write-Host CN=$CN
Write-Host DNS=$SAN1
Write-Host DNS=$SAN2
Write-Host DNS=$SAN3
Write-Host
Write-Host Files are going to be stored in $WorkDir\ folder.

write-host -nonewline "Continue? (Y/N) " -ForegroundColor Yellow
$response = read-host
if ( $response -ne "Y" ) { exit }


# Build CSR file

Write-Host "Preparing Server Certificate Request File (CertReq.inf) for $ComputerName `r "

$DCRequestINFFileContent =
@"
[Version]

Signature="$Windows NT$"

[NewRequest]

Subject = "CN=$CN" ; Remove to use an empty Subject name.
;Because SSL/TLS does not require a Subject name when a SAN extension is included, the certificate Subject name can be empty.
;If you are using another protocol, verify the certificate requirements.
;EncipherOnly = FALSE ; Only for Windows Server 2003 and Windows XP. Remove for all other client operating system versions.
Exportable = TRUE ; TRUE = Private key is exportable
KeyLength = 2048 ; Valid key sizes: 1024, 2048, 4096, 8192, 16384
KeySpec = 1 ; Key Exchange – Required for encryption
KeyUsage = 0xA0 ; Digital Signature, Key Encipherment
MachineKeySet = True
ProviderName = "Microsoft RSA SChannel Cryptographic Provider"
RequestType = PKCS10 ; or CMC.

[EnhancedKeyUsageExtension]
; If you are using an enterprise CA the EnhancedKeyUsageExtension section can be omitted
OID=1.3.6.1.5.5.7.3.1 ; Server Authentication
OID=1.3.6.1.5.5.7.3.2 ; Client Authentication
OID=1.3.6.1.5.2.3.5 ; KDC Authentication
OID=1.3.6.1.4.1.311.20.2.2 ; Smart Card Logon


[Extensions]
; If your client operating system is Windows Server 2008, Windows Server 2008 R2, Windows Vista, or Windows 7
; SANs can be included in the Extensions section by using the following text format. Note 2.5.29.17 is the OID for a SAN extension.
2.5.29.17 = "{text}"
_continue_ = "dns=$SAN1&"
_continue_ = "dns=$SAN2&"
_continue_ = "dns=$SAN3&"


; If your client operating system is Windows Server 2003, Windows Server 2003 R2, or Windows XP
; SANs can be included in the Extensions section only by adding Base64-encoded text containing the alternative names in ASN.1 format.
; Use the provided script MakeSanExt.vbs to generate a SAN extension in this format.
; RMILNE – the below line is remmed out else we get an error since there are duplicate sections for OID 2.5.29.17
; 2.5.29.17=MCaCEnd3dzAxLmZhYnJpa2FtLmNvbYIQd3d3LmZhYnJpa2FtLmNvbQ

[RequestAttributes]
; If your client operating system is Windows Server 2003, Windows Server 2003 R2, or Windows XP
; and you are using a standalone CA, SANs can be included in the RequestAttributes
; section by using the following text format.
;”SAN="dns=not.server2008r2.com&dns=stillnot.server2008r2.com&dns=meh.2003server.com"
; Multiple alternative names must be separated by an ampersand (&).

;CertificateTemplate = WebServer ; Modify for your environment by using the LDAP common name of the template.

;Required only for enterprise CAs.
"@

Write-Host "Generating Certificate Request file... `r " -ForegroundColor DarkYellow
$DCRequestINFFileContent | out-file -filepath $DCRequestINFFileName -force
certreq -new $DCRequestINFFileName $CSRFilePath
Remove-Item $DCRequestINFFileName -Force

Write-Host "CSR fle created as $CSRFilePath. Use this file to request the DC's server certificate `r " -ForegroundColor Green
Start-Sleep 20
exit