c# - 如何通过交互式提供凭据从 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-MsolService
cmdlet,而是以交互方式从用户那里收集它,以便它也可以与启用 MFA 的帐户一起使用。
注意:用户将与部署在 Web 服务器上的网站进行交互,而不会直接登录服务器。嵌入在 C# 中的 Powershell 代码也将在 Web 服务器上运行。
到目前为止,我的互联网搜索没有产生任何我可以使用的东西。有没有办法让这个工作?请分享任何提示、想法和解决方案。
解决方案
您的代码在 Web 服务器上运行(作为 Web 应用程序)而不是在使用它的客户端上 - 将尝试在服务器上打开弹出窗口 - 因此出现错误!
既然您提到您将无法通过凭据。
您可以使用访问令牌进行身份验证的另一个选项。
Connect-Msolservice -MsGraphAcessToken <Token>
您正在使用 C#,因此您可以使用 MSAL(Microsoft 身份验证库)来执行交互式登录并获取令牌。您可以参考这篇文章了解更多信息。
随后可以将获取的令牌传递给 powershell commandlet 以执行必要的操作。
推荐阅读
- javascript - 基于校验数组过滤数组
- php - 从 shell_exec (PHP) 运行 PM2 命令不起作用
- icons - Jetpack Compose Icon 的颜色在真机切换
- typescript - 现在让导入的路径别名在 nuxt.config.ts 中可见?
- javascript - 在 AWS Cognito 中按用户名搜索用户
- html - 网格内容与网格布局不匹配
- python - 如何安装 scikit-image 0.14 版本?
- ios - 如何将 json 解码为键中有空格的结构/类对象?
- r - 如何在 R Highcharter 中将完整数据导出为 CSV
- mysql - flask/mysql 应用程序部署在 heroku 中。cleardb 已激活。我现在如何让烧瓶创建数据库?