*更新 - 今天下午黑客攻击,我发现当我使用ADAL authentication时,我正在尝试使用MSAL进行身份验证。我改变了使用MSAL的方法,并且已经成功,但这个问题仍然代表ADAL auth。
我一直很难用PowerShell对图API进行身份验证。我的最终目标是能够查询我的一些OneNote页面,并且我能够使用graph explorer使用我的个人Microsoft帐户进行身份验证。
我一直关注this blog和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类的.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"
答案 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