2017-04-08 4 views
2

Ich möchte Passwort Ablaufdatum des angemeldeten Benutzers in C# mit Graph API oder Adal bekommen.Wie Passwortrichtlinie für Azure Active Directory eingeloggt Benutzer

Mit dieser Frage, ich weiß, wie die Kennwortrichtlinie zu bekommen und auch das Ablaufdatum Powershell verwenden, aber noch nicht sicher, mit C#

Get Azure Active Directory password expiry date in PowerShell

In C# Entweder ich PasswordExpiry Datum oder als erhalten möchten Alternatives LastPasswordChangedDate.

Verwenden von AD Graph API

Antwort

2

Um diese Eigenschaft von Azure Active Directory-Benutzer zu erhalten mit C#, können wir die Powershell-Befehle direkt aufrufen. Sie können das Codebeispiel siehe unten das Ziel zu erreichen:

private static void GetPasswordExpiredDate() 
{ 
    try 
    { 
     var userName = ""; 
     var password = ""; 
     var securePassword = new SecureString(); 
     var domainName = ""; 
     foreach (char c in password) 
     { 
      securePassword.AppendChar(c); 
     } 

     Collection<PSObject> user = null; 
     Collection<PSObject> passwordPolicy = null; 
     // Create Initial Session State for runspace. 
     InitialSessionState initialSession = InitialSessionState.CreateDefault(); 
     initialSession.ImportPSModule(new[] { "MSOnline" }); 
     // Create credential object. 
     PSCredential credential = new PSCredential(userName, securePassword); 
     // Create command to connect office 365. 
     Command connectCommand = new Command("Connect-MsolService"); 
     connectCommand.Parameters.Add((new CommandParameter("Credential", credential))); 
     // Create command to get office 365 users. 
     Command getPasswordPolicy = new Command("Get-MsolPasswordPolicy"); 
     getPasswordPolicy.Parameters.Add(new CommandParameter("DomainName", domainName)); 
     //Command getUserCommand = new Command("$UserPrincipal=Get-MsolUser -UserPrincipalName '[email protected]'"); 
     Command getUserCommand = new Command("Get-MsolUser"); 
     getUserCommand.Parameters.Add(new CommandParameter("UserPrincipalName", "[email protected]")); 
     //Command getPasswordExpiredDate = new Command("$UserPrincipal.LastPasswordChangeTimestamp.AddDays($PasswordPolicy.ValidityPeriod)"); 

     using (Runspace psRunSpace = RunspaceFactory.CreateRunspace(initialSession)) 
     { 
      // Open runspace. 
      psRunSpace.Open(); 
      //Iterate through each command and executes it. 
      foreach (var com in new Command[] { connectCommand, getUserCommand, getPasswordPolicy }) 
      { 
       var pipe = psRunSpace.CreatePipeline(); 
       pipe.Commands.Add(com); 
       if (com.Equals(getUserCommand)) 
        user = pipe.Invoke(); 
       else if (com.Equals(getPasswordPolicy)) 
        passwordPolicy = pipe.Invoke(); 
       else 
        pipe.Invoke(); 
      } 
      DateTime date =(DateTime) user[0].Properties["LastPasswordChangeTimestamp"].Value; 
      UInt32 ValidityPeriod = (UInt32)passwordPolicy[0].Properties["ValidityPeriod"].Value; 
      Console.WriteLine($"The password will be expired at {date.AddDays(ValidityPeriod)}"); 
      // Close the runspace. 
      psRunSpace.Close(); 
     } 
    } 
    catch (Exception) 
    { 
     throw; 
    } 
} 
+1

Hallo, danke für die Antwort, um Passwort Ablauf zu erhalten von „LastPasswordChangeTImeStamp“ Ich brauche MSOL Passwort policy.however Benutzer erhalten hat „Global sein Admin ", um eine Passwort-Richtlinie abzurufen, die nicht realistisch ist. Wie kann ich das umgehen? –

+0

Um dieses Problem zu umgehen, können Sie einen Dienst mit dem Administratorkonto als Proxy erstellen. Und Sie können die Authentifizierung/Autorisierung für den Service basierend auf Ihren eigenen Anforderungen hinzufügen. –

+0

@MandarJogalekar Bitte zögern Sie nicht mich zu informieren, wenn Sie immer noch das Problem zu diesem Problem haben. –

Verwandte Themen