使用 powershell 对 Microsoft Graph api 进行身份验证
Authenticate to Microsoft Graph api using powershell
*Update - 今天下午闲逛,我发现我正在尝试使用 ADAL authentication when I should be using MSAL 进行身份验证。我改变了使用 MSAL 的方法,并且取得了成功,但这个问题仍然代表 ADAL 身份验证。
我一直难以使用 powershell 对图形 API 进行身份验证。我的最终目标是能够查询我的一些 OneNote 页面,并且我能够使用 graph explorer 使用我的个人 Microsoft 帐户进行身份验证。
我一直在关注 this blog, and this more recent 一个。
我在 https://apps.dev.microsoft.com 注册了我的应用程序,我有一个应用程序 ID,我已将其作为 $clientID
插入 PS 脚本,当我 运行 脚本我得到一个错误:Method invocation failed because [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext] does not contain a method named 'AcquireToken'.
查看 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext class 的 .net 文档,没有名为 AcquireToken
的方法,但有一些名称相似的方法,虽然我不知道是哪一个我需要使用。理想情况下,我希望我的脚本能够像 AzureRM
模块的 Login-AzureRmAccount
函数那样提示用户输入他们的凭据。如果那不可能,那么我可以使用有关如何修改下面的代码以使用 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireTokenASync
的指导
function Get-AuthToken
{
param
(
[Parameter(Mandatory=$true)]
$TenantName
)
Import-Module Azure
$clientId = "00d16af4-d0c7-460a-a9dc-fd350eb4b100"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"
$resourceAppIdURI = "https://graph.microsoft.com"
$authority = "https://login.microsoftonline.com/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$Credential = Get-Credential
$AADCredential = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" -ArgumentList $credential.UserName,$credential.Password
$authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$AADCredential)
return $authResult
}
Get-AuthToken -TenantName "common"
我相信对于 ADAL,除了 clientID、我的应用程序的重定向 URI 和资源 ID“https://graph.microsoft.com 之外,您还会将 [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]
中的值传递给 AcquireTokenASync
方法”。此代码提示我输入凭据,但因为我没有使用 Azure AD,所以我无法通过这一点。
function Get-AuthToken{
param([Parameter(Mandatory=$true)] $TenantName)
$clientId = "00d16af4-d0c7-460a-a9dc-fd350eb4b100"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"
$resourceAppIdURI = "https://graph.microsoft.com"
$authority = "https://login.microsoftonline.com/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$promptBehaviour = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Auto
$authParam = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList $promptBehaviour
$authenticationTask = $authContext.AcquireTokenASync($resourceAppIdURI, $clientId,$redirectUri,$authParam)
$authenticationTask.Wait()
$authenticationResult = $authenticationTask.Result
return $authResult
}
Get-AuthToken -TenantName "common"
对于 MSAL,我找到了 MSAL.PS 模块的 Get-MSALToken
函数,它提示我并返回了一个我可以使用的有效令牌。
Get-MSALToken -Scopes "Notes.Read" -ClientId "00d16af4-d0c7-460a-a9dc-fd350eb4b100" -RedirectUri "urn:ietf:wg:oauth:2.0:oob"
*Update - 今天下午闲逛,我发现我正在尝试使用 ADAL authentication when I should be using MSAL 进行身份验证。我改变了使用 MSAL 的方法,并且取得了成功,但这个问题仍然代表 ADAL 身份验证。
我一直难以使用 powershell 对图形 API 进行身份验证。我的最终目标是能够查询我的一些 OneNote 页面,并且我能够使用 graph explorer 使用我的个人 Microsoft 帐户进行身份验证。
我一直在关注 this blog, and this more recent 一个。
我在 https://apps.dev.microsoft.com 注册了我的应用程序,我有一个应用程序 ID,我已将其作为 $clientID
插入 PS 脚本,当我 运行 脚本我得到一个错误:Method invocation failed because [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext] does not contain a method named 'AcquireToken'.
查看 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext class 的 .net 文档,没有名为 AcquireToken
的方法,但有一些名称相似的方法,虽然我不知道是哪一个我需要使用。理想情况下,我希望我的脚本能够像 AzureRM
模块的 Login-AzureRmAccount
函数那样提示用户输入他们的凭据。如果那不可能,那么我可以使用有关如何修改下面的代码以使用 Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.AcquireTokenASync
function Get-AuthToken
{
param
(
[Parameter(Mandatory=$true)]
$TenantName
)
Import-Module Azure
$clientId = "00d16af4-d0c7-460a-a9dc-fd350eb4b100"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"
$resourceAppIdURI = "https://graph.microsoft.com"
$authority = "https://login.microsoftonline.com/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$Credential = Get-Credential
$AADCredential = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" -ArgumentList $credential.UserName,$credential.Password
$authResult = $authContext.AcquireToken($resourceAppIdURI, $clientId,$AADCredential)
return $authResult
}
Get-AuthToken -TenantName "common"
我相信对于 ADAL,除了 clientID、我的应用程序的重定向 URI 和资源 ID“https://graph.microsoft.com 之外,您还会将 [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]
中的值传递给 AcquireTokenASync
方法”。此代码提示我输入凭据,但因为我没有使用 Azure AD,所以我无法通过这一点。
function Get-AuthToken{
param([Parameter(Mandatory=$true)] $TenantName)
$clientId = "00d16af4-d0c7-460a-a9dc-fd350eb4b100"
$redirectUri = "urn:ietf:wg:oauth:2.0:oob"
$resourceAppIdURI = "https://graph.microsoft.com"
$authority = "https://login.microsoftonline.com/$TenantName"
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" -ArgumentList $authority
$promptBehaviour = [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Auto
$authParam = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.PlatformParameters" -ArgumentList $promptBehaviour
$authenticationTask = $authContext.AcquireTokenASync($resourceAppIdURI, $clientId,$redirectUri,$authParam)
$authenticationTask.Wait()
$authenticationResult = $authenticationTask.Result
return $authResult
}
Get-AuthToken -TenantName "common"
对于 MSAL,我找到了 MSAL.PS 模块的 Get-MSALToken
函数,它提示我并返回了一个我可以使用的有效令牌。
Get-MSALToken -Scopes "Notes.Read" -ClientId "00d16af4-d0c7-460a-a9dc-fd350eb4b100" -RedirectUri "urn:ietf:wg:oauth:2.0:oob"