【发布时间】:2020-02-03 14:01:34
【问题描述】:
我在 Azure 中创建了一个启用了 Azure 身份验证的 WebApp。这在使用用户进行身份验证时按预期工作。但是 WebApp 有一个特定的端点,除了发布 JSON 数据之外,它可以被解析并表示为图表。 我想做的是发布由众多 Powershell 脚本收集的这些数据。如果我在用户帐户的上下文中运行 Powershell 脚本,我可以这样做,但我想使用 SPN 进行身份验证(因此使用应用程序 ID 和已设置的密钥)。这甚至可能吗? 我试过下面的代码,它实际上确实获得了一个访问令牌,但是在发布请求的标头中发送它时,我得到一个
“您无权查看此目录或页面。”
错误信息。
$RequestAccessTokenUri = "https://login.microsoftonline.com/tenantID/oauth2/token"
$ClientId = "Application Id"
$ClientSecret = "Client Secret"
$Resource = "URL of the WebApp"
$body = "grant_type=client_credentials&client_id=$ClientId&client_secret=$ClientSecret&resource=$Resource"
$Token = Invoke-RestMethod -Method Post -Uri $RequestAccessTokenUri -Body $body -ContentType 'application/x-www-form-urlencoded'
$Headers = @{}
$Headers.Add("Authorization","$($Token.token_type) $($Token.access_token)")
$AppUri = $Resource + "/upload/post"
$json = <This will contain the actual JSON objects that will be posted>
invoke-RestMethod -Uri $AppUri -Method Post -Headers $Headers -body $json
是否甚至可以通过使用 SPN 进行身份验证从 Powershell 访问 Azure WebApp?任何帮助将不胜感激。
【问题讨论】:
-
尝试将 Authorization 标头的值替换为:“Bearer ey....”,其中 ey 是您的令牌
-
授权令牌的值实际上是用'Bearer ey....'正确设置的,但仍然无法访问。令牌有效(使用 jwt.ms 检查)
-
根据您的脚本,您不会在标头中获取令牌,您应该将 $Token 放在 $Headers 之前。
-
嗨托尼,你完全正确!我的脚本的顺序确实正确,但在这篇文章中,我手动输入了命令,而且显然顺序错误,我的错。我将编辑我的帖子。
标签: azure powershell authentication web-applications