【问题标题】:Getting access token from Azure using MSAL.PS使用 MSAL.PS 从 Azure 获取访问令牌
【发布时间】: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 广告管理员的同意。

标签: azure daemon msal


【解决方案1】:

Application credentials 最适合像您这样的守护程序应用程序。如果您仍需要以用户身份进行身份验证,则可以选择不推荐的ROPC flow

恐怕您将不得不使用 MSAL.PS 手动输入凭据,以便它们可以被缓存并在以后静默使用,因此除非您替换或使用自定义工具,否则这里的自动化程度并不高。

【讨论】:

  • 很好的答案!即使不推荐使用 ROPC 流程,这也是我在这种情况下采取的路线。非常感谢你指引我正确的方向:-)
  • @KjetilBustnes 随时:)
  • @KjetilBustnes 你能分享一下提示输入用户名和密码的powershell脚本吗?我有一个和你非常相似的用例,我需要脚本。谢谢!
猜你喜欢
  • 2018-06-18
  • 2019-05-15
  • 1970-01-01
  • 2020-10-26
  • 2018-02-17
  • 2020-07-27
  • 2020-03-17
  • 2017-12-07
  • 2020-04-25
相关资源
最近更新 更多