【发布时间】:2020-04-24 08:48:03
【问题描述】:
我有一个 Powershell 脚本,它应该自动运行(守护程序),它需要对 Azure AD 进行身份验证。 我有一个“工作”脚本正在获取正确的访问令牌,但这需要我手动输入用户名/密码。如何通过配置用户名/密码来执行脚本
做了什么:
- 在 Azure 中创建了一个用户并分配了 Office 许可证(此 是我必须为其输入用户名/密码的用户)
- 已完成应用程序注册($clientid 和 $clientsecret 在 代码如下)
- 使用 MSAL.PS v4.10.0.2
$redirecturi = "<redirect url>"
$redirecturi
$scope = '<scope>'
$sec = ConvertTo-SecureString $clientsecret -AsPlainText -Force
$app = New-MsalClientApplication -ClientId $clientid -ClientSecret $sec -RedirectUri $redirecturi -TenantId $tenantid
$az_access_token = $app | get-msaltoken -Scope $scope -LoginHint $loginhint | select -expand accesstoken
【问题讨论】:
-
请创建 2 个变量来存储客户端 ID 和客户端密码。在运行脚本时,从 Json 或任何配置文件中读取秘密,然后将这些值作为参数传递。注意:您需要首先将秘密存储在 Json 文件中的安全位置。如果您不熟悉 Json,请使用任何类型的配置文件。
-
嗨,问题不在于如何提供客户端 ID/客户端密码。问题是如何向 -LogonHint 参数中指示的用户提供用户凭据。如果我在 Azure AD 中提供了一个指向有效用户的值,我会看到一个要求输入密码的登录对话框。如果我省略 -LogonHint 参数,我会得到一个访问令牌,但这仅适用于应用程序注册,而不适用于用户。我希望能够在脚本中的 -LogonHint 中提供用户的用户名和密码,因为这将作为守护进程运行
-
根据客户端凭据流程,不会有任何关联的用户。因此,您需要在 Azure 门户中设置应用程序权限。您需要修改 API 应用程序的清单文件以在其中添加角色。您可以在 python 脚本的范围数组中传递该角色。如果您想知道如何设置应用程序权限,请告诉我。
-
例如,user.read 是委托权限,而 user.read.all 是应用程序权限。要设置应用程序权限,您可能需要获得租户的 Azure 广告管理员的同意。