@@ -6,6 +6,9 @@ function Invoke-ExecJITAdmin {
66 Entrypoint
77 . ROLE
88 Identity.Role.ReadWrite
9+
10+ . DESCRIPTION
11+ Just-in-time admin management API endpoint. This function can list JIT admins, create users, add roles, remove roles, delete, or disable a user.
912 #>
1013 [CmdletBinding ()]
1114 param ($Request , $TriggerMetadata )
@@ -16,6 +19,7 @@ function Invoke-ExecJITAdmin {
1619 Write-LogMessage - Headers $User - API $APIName - message ' Accessed this API' - Sev ' Debug'
1720
1821 if ($Request.Query.Action -eq ' List' ) {
22+ # TODO: The list functionality should be moved to a separate function. ListJITAdmin or similar.
1923 $Schema = Get-CIPPSchemaExtensions | Where-Object { $_.id -match ' _cippUser' } | Select-Object - First 1
2024 if ($Request.Query.TenantFilter -ne ' AllTenants' ) {
2125 # Single tenant logic
@@ -48,6 +52,7 @@ function Invoke-ExecJITAdmin {
4852 accountEnabled = $_.accountEnabled
4953 jitAdminEnabled = $_ .($Schema.id ).jitAdminEnabled
5054 jitAdminExpiration = $_ .($Schema.id ).jitAdminExpiration
55+ jitAdminReason = $_ .($Schema.id ).jitAdminReason
5156 memberOf = $MemberOf
5257 }
5358 }
@@ -115,6 +120,7 @@ function Invoke-ExecJITAdmin {
115120 accountEnabled = $UserObject.accountEnabled
116121 jitAdminEnabled = $UserObject.jitAdminEnabled
117122 jitAdminExpiration = $UserObject.jitAdminExpiration
123+ jitAdminReason = $UserObject.jitAdminReason
118124 memberOf = $UserObject.memberOf
119125 }
120126 )
@@ -130,29 +136,29 @@ function Invoke-ExecJITAdmin {
130136 if ($Request.Body.existingUser.value -match ' ^[a-f0-9]{8}-([a-f0-9]{4}-){3}[a-f0-9]{12}$' ) {
131137 $Username = (New-GraphGetRequest - uri " https://graph.microsoft.com/v1.0/users/$ ( $Request.Body.existingUser.value ) " - tenantid $TenantFilter ).userPrincipalName
132138 }
133- Write-LogMessage - Headers $User - API $APIName - message " Executing JIT Admin for $Username " - tenant $TenantFilter - Sev ' Info'
134139
135140 $Start = ([System.DateTimeOffset ]::FromUnixTimeSeconds($Request.Body.StartDate )).DateTime.ToLocalTime()
136141 $Expiration = ([System.DateTimeOffset ]::FromUnixTimeSeconds($Request.Body.EndDate )).DateTime.ToLocalTime()
137142 $Results = [System.Collections.Generic.List [string ]]::new()
138143
139- if ($Request.Body.useraction -eq ' Create' ) {
140- Write-LogMessage - Headers $User - API $APIName - tenant $TenantFilter - message " Creating JIT Admin user $ ( $Request.Body.Username ) " - Sev ' Info'
141- Write-Information " Creating JIT Admin user $ ( $Request.Body.username ) "
144+ if ($Request.Body.userAction -eq ' create' ) {
142145 $Domain = $Request.Body.Domain.value ? $Request.Body.Domain.value : $Request.Body.Domain
146+ $Username = " $ ( $Request.Body.Username ) @$ ( $Domain ) "
147+ Write-Information " Creating JIT Admin user: $ ( $Request.Body.username ) "
143148
144149 $JITAdmin = @ {
145150 User = @ {
146151 ' FirstName' = $Request.Body.FirstName
147152 ' LastName' = $Request.Body.LastName
148- ' UserPrincipalName' = " $ ( $Request .Body. Username) @ $ ( $Domain ) "
153+ ' UserPrincipalName' = $ Username
149154 }
150155 Expiration = $Expiration
156+ Reason = $Request.Body.reason
151157 Action = ' Create'
152158 TenantFilter = $TenantFilter
153159 }
154160 $CreateResult = Set-CIPPUserJITAdmin @JITAdmin
155- $Username = " $ ( $Request.Body.Username ) @ $ ( $Domain ) "
161+ Write-LogMessage - Headers $User - API $APIName - tenant $TenantFilter - message " Created JIT Admin user: $Username . Reason: $ ( $Request.Body.reason ) . Roles: $ ( $Request .Body.adminRoles.label -join ' , ' ) " - Sev ' Info ' - LogData $JITAdmin
156162 $Results.Add (" Created User: $Username " )
157163 if (! $Request.Body.UseTAP ) {
158164 $Results.Add (" Password: $ ( $CreateResult.password ) " )
@@ -212,6 +218,7 @@ function Invoke-ExecJITAdmin {
212218 }
213219 Roles = $Request.Body.AdminRoles.value
214220 Action = ' AddRoles'
221+ Reason = $Request.Body.Reason
215222 Expiration = $Expiration
216223 }
217224 if ($Start -gt (Get-Date )) {
@@ -231,13 +238,15 @@ function Invoke-ExecJITAdmin {
231238 }
232239 }
233240 Add-CIPPScheduledTask - Task $TaskBody - hidden $false
234- if ($Request.Body.useraction -ne ' Create ' ) {
235- Set-CIPPUserJITAdminProperties - TenantFilter $TenantFilter - UserId $Request.Body.existingUser.value - Expiration $Expiration
241+ if ($Request.Body.userAction -ne ' create ' ) {
242+ Set-CIPPUserJITAdminProperties - TenantFilter $TenantFilter - UserId $Request.Body.existingUser.value - Expiration $Expiration - Reason $Request .Body.Reason
236243 }
237244 $Results.Add (" Scheduling JIT Admin enable task for $Username " )
245+ Write-LogMessage - Headers $User - API $APIName - message " Scheduling JIT Admin for existing user: $Username . Reason: $ ( $Request.Body.reason ) . Roles: $ ( $Request.Body.adminRoles.label -join ' , ' ) " - tenant $TenantFilter - Sev ' Info'
238246 } else {
239247 $Results.Add (" Executing JIT Admin enable task for $Username " )
240248 Set-CIPPUserJITAdmin @Parameters
249+ Write-LogMessage - Headers $User - API $APIName - message " Executing JIT Admin for existing user: $Username . Reason: $ ( $Request.Body.reason ) . Roles: $ ( $Request.Body.adminRoles.label -join ' , ' ) " - tenant $TenantFilter - Sev ' Info'
241250 }
242251
243252 $DisableTaskBody = [pscustomobject ]@ {
@@ -253,6 +262,7 @@ function Invoke-ExecJITAdmin {
253262 ' UserPrincipalName' = $Username
254263 }
255264 Roles = $Request.Body.AdminRoles.value
265+ Reason = $Request.Body.Reason
256266 Action = $Request.Body.ExpireAction.value
257267 }
258268 PostExecution = @ {
0 commit comments