*更新 - 今天下午进行黑客攻击,我发现我正在尝试使用 ADAL authentication 进行身份验证当我应该使用MSAL时。我改变了使用 MSAL 的方法,并且取得了成功,但这个问题仍然代表 ADAL 身份验证。
我一直很难使用 powershell 通过图形 API 进行身份验证。我的最终目标是能够查询我的一些 OneNote 页面,并且我能够使用 graph explorer使用我的个人 Microsoft 帐户进行身份验证。
我一直在关注this blog ,还有这个more recent一。
我在 https://apps.dev.microsoft.com 注册了我的应用程序我有一个应用程序 ID,已将其作为 $clientID
插入 PS 脚本中,当我运行脚本时,出现错误:方法调用失败,因为 [Microsoft.IdentityModel.Clients. ActiveDirectory.AuthenticationContext] 不包含名为“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"
最佳答案
我相信对于 ADAL,除了 clientID(我的应用程序)之外,您还可以将 [Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]
中的值传递到 AcquireTokenASync
方法中' 重定向 URI,资源 ID“https://graph.microsoft.com”。此代码提示我输入凭据,但因为我没有使用 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
函数提示我并返回了我可以使用的有效 token 。
Get-MSALToken -Scopes "Notes.Read" -ClientId "00d16af4-d0c7-460a-a9dc-fd350eb4b100" -RedirectUri "urn:ietf:wg:oauth:2.0:oob"
关于powershell - 使用 powershell 对 Microsoft Graph api 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50572810/