Выполнение команд PowerShell в Exchange Online в ASP.NET / IIS - PullRequest
0 голосов
/ 30 мая 2019

Использование System.Management.Automation (v. 10.0.10586) Я могу успешно выполнить команду Exchange Online PowerShell из приложения Windows, но мне нужно сделать это из приложения ASP.NET. Я получаю сообщение об ошибке «Доступ запрещен», когда я пытаюсь открыть пространство выполнения в веб-приложении, если я не позволю пулу приложений веб-приложения работать под учетной записью, такой как локальная служба. Есть ли способ сделать это, не предоставляя веб-приложению такие широкие разрешения?

Microsoft предлагает добавить пользователя Exchange в роль администратора, но это не моя проблема, поскольку я могу выполнять команды PowerShell с помощью приложения Windows и тех же учетных данных Exchange (https://support.microsoft.com/en-za/help/2905767/access-is-denied-error-when-you-connect-to-exchange-online-by-using-re).

Я также пытался предложить Microsoft выдавать себя за конкретного пользователя в коде, но это, похоже, не работает (https://support.microsoft.com/en-us/help/306158/how-to-implement-impersonation-in-an-asp-net-application).

        Dim userName As String = ConfigurationManager.AppSettings("ExchangeUserName")
        Dim password As String = ConfigurationManager.AppSettings("ExchangePassword")
        Dim securePassword As System.Security.SecureString = New System.Security.SecureString()
        For Each c As Char In password
            securePassword.AppendChar(c)
        Next
        Dim credentials As PSCredential = New PSCredential(userName, securePassword)
        Dim connection As WSManConnectionInfo = New WSManConnectionInfo(New Uri("https://outlook.office365.com/powershell-liveid"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credentials) With {
                .AuthenticationMechanism = AuthenticationMechanism.Basic,
                .SkipCACheck = True,
                .SkipCNCheck = True,
                .SkipRevocationCheck = True,
                .NoEncryption = False,
                .MaximumConnectionRedirectionCount = 4
            }
        Using runSpace As Runspace = RunspaceFactory.CreateRunspace(connection)
            runSpace.Open()
        End Using

Сбой процедуры в runSpace.Open () со следующей ошибкой:

System.Management.Automation.Remoting.PSRemotingTransportException: не удалось подключиться к удаленному серверу exchangeserver.admin.com со следующим сообщением об ошибке: Доступ запрещен. Для получения дополнительной информации см. Раздел справки about_Remote_Trou Troubleshooting.

...