gpt4 book ai didi

azure - 如何使用客户端 key 通过 Powershell 访问 Azure WebApp

转载 作者:行者123 更新时间:2023-12-04 17:30:40 26 4
gpt4 key购买 nike

我已在 Azure 中创建了一个启用了 Azure 身份验证的 Web 应用程序。当使用用户进行身份验证时,这将按预期工作。但 Web 应用程序有一个特定的端点,除了发布 JSON 数据之外,以便可以对其进行解析并将其表示为图表。我想做的是发布由众多 Powershell 脚本收集的数据。如果我在用户帐户的上下文中运行 Powershell 脚本,我就可以做到这一点,但我想使用 SPN 进行身份验证(因此使用应用程序 ID 和已设置的 key )。这可能吗?我尝试了下面的代码,它实际上确实获得了访问 token ,但是当在发布请求的 header 中发送它时,我得到了一个

"You do not have permission to view this directory or page."

错误消息。

$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 的访问权限?任何帮助将不胜感激。

最佳答案

Is it even possible to gain access from Powershell to an Azure WebApp by authenticating using an SPN?

是的,这是可能的。但是我们需要使用 session token (而不是访问 token )来访问应用程序资源。

使用访问 token 来获取authenticationToken

请求:

POST https://<appname>.azurewebsites.net/.auth/login/aad HTTP/1.1
Content-Type: application/json

{"id_token":"<token>","access_token":"<token>"}

回应:

{
"authenticationToken": "...",
"user": {
"userId": "sid:..."
}
}

获得此 session token 后,您可以通过将 X-ZUMO-AUTH header 添加到 HTTP 请求来访问 protected 应用资源

GET https://<appname>.azurewebsites.net/api/products/1
X-ZUMO-AUTH: <authenticationToken_value>

这是工作的 powershell 脚本。

$RequestAccessTokenUri = "https://login.microsoftonline.com/{tenantId}/oauth2/token"

$ClientId = "{Application Id}"

$ClientSecret = "{client secret}"

$Resource = "{Application Id}"

$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'
#get authentication token url
$RequestAuthenticationTokenUri="https://webapi-productsapp2093.azurewebsites.net/.auth/login/aad"

$bodystr = "{" + '"' + "access_token" + '"' + ":" + '"' + $Token.access_token + '"' + "}"

$authenticationToken=Invoke-RestMethod -Method Post -Uri $RequestAuthenticationTokenUri -Body $bodystr -ContentType 'application/json'

$Headers = @{}
$Headers.Add("X-ZUMO-AUTH",$authenticationToken.authenticationToken)

$website="http://webapi-productsapp2093.azurewebsites.net/api/products/1"
invoke-RestMethod -Uri $website -Method Get -Headers $Headers

引用:

Validate tokens from providers

关于azure - 如何使用客户端 key 通过 Powershell 访问 Azure WebApp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60040787/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com