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

标签 powershell azure azure-ad-graph-api

*更新 - 今天下午进行黑客攻击,我发现我正在尝试使用 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/

相关文章:

powershell - curl 无法在命令提示符下导入证书文件 client.crt,Powershell 在 gitbash 上工作正常

powershell - Powershell-选择字符串-导出多行

node.js - 访问 Node.js 中的 Azure ServiceConfiguration 设置

django - Angular MSAL 库请求的 Azure AD 用户访问 token 以及使用 django_auth_adfs 通过 WEB API 进行的验证

azure - Office 365 API ErrorAccessDenied 发送电子邮件时访问被拒绝

powershell - 将透明png转换为jpg powershell

powershell - -command 的退出代码与脚本的退出代码不同

architecture - 我可以构建一个 Web 应用程序,以便将其部署到云或专用服务器/VPS 上吗?如何?

具有自定义域的用户的 Azure AD B2B 身份验证错误 - AADSTS65005 : Using application 'My Application' is currently not supported

asp.net-web-api - 通过 Postman 将承载 token 发送到 Web API