使用用户名/密码从Powershell调用Azure广告保护的API

时间:2019-06-18 08:56:20

标签: azure powershell asp.net-web-api azure-active-directory

我有一个受Azure AD保护的Web api。 我的javascript发送了一个回调URL,其中用户访问令牌被发送到了

https://login.microsoftonline.com/{my_tenant}/oauth2/v2.0/token/?redirect_uri={my_url}&...

现在,我想使用Powershell访问我的api,因此,我希望仅将令牌作为响应。我已经使用下面的代码尝试过此resource owner password credential-flow,但它只是说用户名或密码不正确...(我使用相同的手动登录名)

   $creds =  @{
        client_id = $clientId
        username = $username
        password = $password
        grant_type = "password"
        scope="User.Read" 
    }

$headers = @{        
    "Content-Type"="application/x-www-form-urlencoded"
}
Invoke-RestMethod $authUrl -Method Post -Body $creds -Headers $headers;  

因此,简而言之,我想使用Powershell使用用户名和密码登录,可以吗?

1 个答案:

答案 0 :(得分:1)

我无法重现您的问题,请仔细检查您的用户名和密码。

或者您可以尝试我的工作示例,并且如果您想从自己的api获取脚趾,则scope应该是{Application ID URI or Application ID}/User.Read,如果您使用scope="User.Read",则它表示默认情况下为MS Graph API。

示例

 $authUrl = "https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/token/"

 $clientId = "xxxxxxxxxxxxxxxxxxx"
 $username = "xxxxxx@xxx.onmicrosoft.com"
 $password = "xxxxxx"

   $creds =  @{
        client_id = $clientId
        username = $username
        password = $password
        grant_type = "password"
        scope="{Application ID URI or Application ID}/User.Read" 
    }

$headers = @{        
    "Content-Type"="application/x-www-form-urlencoded"
}
Invoke-RestMethod $authUrl -Method Post -Body $creds -Headers $headers

enter image description here

更新

使用资源所有者密码凭据流时,请注意以下重要事项。

enter image description here