将PowerShell与OAuth令牌结合使用以实现HTTP Azure功能

7rfyedvj  于 2023-01-14  发布在  Shell
关注(0)|答案(1)|浏览(147)

我有一个Azure功能,该功能已启用身份验证并设置为需要身份提供程序:
应用程序服务身份验证:已启用限制访问:需要身份验证未经身份验证的请求:返回HTTP 401未经授权的令牌存储:启用
身份提供程序-应用程序(客户端)ID(已删除的应用程序的名称):客户端ID已删除客户端密码设置名称:Microsoft提供程序身份验证密码

当我使用Power Automate POST到HTTP函数时,它可以工作。这告诉我安全性已经设置好,并且按预期工作。当我尝试使用桌面直接从PowerShell POST到函数时,我得到了401未授权。这是一个GCCH环境。
这是PowerShell代码,我在这里获得了一个誓言令牌,并试图使用它来POST到HTTP函数。我尝试使用带有和不带有“code=”的HTTP URL,但都不起作用。

#These URLs are used to access get the token; scope has not been required is uses the app ID 
    $loginURL   = "https://login.microsoftonline.us"
    $resource   = "https://graph.microsoft.us"
    $Tenant      = "mytenant.onmicrosoft.us"
    $ClientID = "removed"
    $Secret="removed"
    $fcnKey = "removed"
    $fcnURL = "https://removed?"   #Azure function url without the code at the end

    $AuthBody = @{
        grant_type="client_credentials";
        resource=$resource;
        client_id=$ClientID;
        client_secret=$Secret}

    $Oauth = Invoke-RestMethod -Method POST -Uri $loginURL/$Tenant/oauth2/token?api-version=1.0 -Body
    $AuthBody -ContentType "application/x-www-form-urlencoded"
    $AuthToken = @{
        'Authorization'="$($Oauth.token_type) $($Oauth.access_token)";
        'Content-Type' = "application/json";
        'x-functions-key' = $fcnkey;}

    #This returns a 401 unauthorized
    Invoke-RestMethod -Headers $AuthToken -Uri $fcnURL -Method POST

    #This also returns a 401 unauthorized
    $AuthToken = @{
        'Authorization'="$($Oauth.token_type) $($Oauth.access_token)";
        'Content-Type' = "application/json";}

    $FullURL = "https://removed?code=removed"
    Invoke-RestMethod -Headers $AuthToken -Uri $fullURL -Method POST
bfnvny8b

bfnvny8b1#

正如@jdweng 建议的那样,请检查此MS Doc Azure AD身份验证流中的身份验证类型和授权过程。

检查以下步骤是否有助于解决问题

  • 确保在“允许的令牌访问群体”框中输入了“应用程序ID URI”。
  • 应使用相同的应用程序ID URI来获取令牌。
  • 请参阅在Azure功能应用程序上启用应用程序服务身份验证时注册401未经授权错误的类似问题解决方案,例如MSQ&A 337577、SO问题6795735355226143

相关问题