首页 > 解决方案 > 如何通过交互式提供凭据从 asp.net Web 表单应用程序连接到 Azure Active Directory?

问题描述

我想为任何用户提供通过我的网站连接到 powershell Azure Active Directory 模块并在其 Microsoft 租户中执行一些管理操作的能力。我正在使用的代码是:

InitialSessionState iss = InitialSessionState.CreateDefault2();

iss.ImportPSModule(new[] { "MSOnline" });

var shell = PowerShell.Create(iss);

var connectCmd = new Command("Connect-MsolService");

shell.Commands.AddCommand(connectCmd);

var results = shell.Invoke();

但之后我收到以下错误Invoke

当应用程序未在 UserInteractive 模式下运行时显示模式对话框或表单不是有效操作。指定 ServiceNotification 或 DefaultDesktopOnly 样式以显示来自服务应用程序的通知

当我在 PowerShell ISE 中运行 PowerShell 代码时,情况并非如此:

Import-Module MSOnline

Connect-MsolService

相反,我会收到一个登录对话框,我可以在其中提供登录凭据。

我希望他们获得登录对话框的网站用户获得相同的体验。

在 C# 代码中,我不想将凭据作为参数传递给Connect-MsolServicecmdlet,而是以交互方式从用户那里收集它,以便它也可以与启用 MFA 的帐户一起使用。

注意:用户将与部署在 Web 服务器上的网站进行交互,而不会直接登录服务器。嵌入在 C# 中的 Powershell 代码也将在 Web 服务器上运行。

到目前为止,我的互联网搜索没有产生任何我可以使用的东西。有没有办法让这个工作?请分享任何提示、想法和解决方案。

标签: c#azurepowershellauthenticationmulti-factor-authentication

解决方案


您的代码在 Web 服务器上运行(作为 Web 应用程序)而不是在使用它的客户端上 - 将尝试在服务器上打开弹出窗口 - 因此出现错误!

既然您提到您将无法通过凭据。

您可以使用访问令牌进行身份验证的另一个选项。

 Connect-Msolservice -MsGraphAcessToken <Token>

您正在使用 C#,因此您可以使用 MSAL(Microsoft 身份验证库)来执行交互式登录并获取令牌。您可以参考这篇文章了解更多信息。

随后可以将获取的令牌传递给 powershell commandlet 以执行必要的操作。


推荐阅读