使用PowerShell对Microsoft Graph api进行身份验证

时间:2018-05-28 19:58:48

标签: powershell azure azure-ad-graph-api

*更新 - 今天下午黑客攻击,我发现当我使用ADAL authentication时,我正在尝试使用MSAL进行身份验证。我改变了使用MSAL的方法,并且已经成功,但这个问题仍然代表ADAL auth。

我一直很难用PowerShell对图API进行身份验证。我的最终目标是能够查询我的一些OneNote页面,并且我能够使用graph explorer使用我的个人Microsoft帐户进行身份验证。

我一直关注this blogmore 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类的.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"

1 个答案:

答案 0 :(得分:1)

我相信对于ADAL,除了clientID,我的应用程序'之外,您还会将new AttendPageMaster(new AttendanceViewModel()){ Title = " " }; 中的值传递到[Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]方法。重定向URI和资源ID" https://graph.microsoft.com"。此代码提示我输入凭据,但因为我没有使用Azure AD,所以我无法通过这一点。

AcquireTokenASync

对于MSAL,我找到了MSAL.PS模块的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" 函数,该函数提示我并返回了我可以使用的有效令牌。

Get-MSALToken