gpt4 book ai didi

azure - 如何访问 GRAPH API 来获取所有用户而无需登录?

转载 作者:行者123 更新时间:2023-12-02 23:10:20 28 4
gpt4 key购买 nike

我想要的很简单,但我还没有找到明确的答案。

我有一个简单的控制台应用程序,我想要做的就是使用新的 GRAPH API 获取 Azure AD 中的所有用户。我的所有示例都需要程序登录(OAuth?)。我不想那样。我想将代码提供给用户/密码,然后开始调用方法。

最佳答案

每当用户实际坐在设备前时,到目前为止,最好的选择就是调用完整的登录流程。不仅可以防止管理员的凭据被泄露,还允许用户根据需要更改密码、调用多重身份验证等。

但是,在某些情况下,您希望在完全安全且可信的计算机上运行完全不受监督的服务。 (在 OAuth 2.0 中称为“ secret 客户端”。)这可以通过 OAuth 2.0 客户端凭据授予流程来实现,该流程仅使用应用程序的凭据进行身份验证。 Service to Service Calls Using Client Credentials 中对此进行了说明。 .

使用 ADAL,可以使用 AuthenticationContext.AcquireToken(String, ClientCredential) 调用此流程(其中您的凭据是密码凭据 - 字符串),或 AuthenticationContext.AcquireToken(String, ClientAssertionCertificate) (其中您的凭据是用于签署断言的证书)。 Azure AD samples for daemon applications 上每个都有一个 .NET (C#) 示例。 :

使用 PowerShell 和证书身份验证,它看起来像这样:

$appId          = "<app client ID>"
$resource = "https://graph.windows.net" # (or other resource URI)
$tenantId = "<domain name or ID>"
$certThumbprint = "<certificate thumbprint>"

# Get locally-installed cert by thumbprint
$x509cert = Get-ChildItem "Cert:\LocalMachine\My" | ? { $_.Thumbprint -eq $certThumbprint } | Select-Object -First 1

# Get access token using ClientAssertionCertificate
$authority = "https://login.microsoftonline.com/$tenantId"
$creds = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.ClientAssertionCertificate $appId, $x509cert
$authContext = New-Object Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext $authority
$authResult = $authContext.AcquireToken($resource, $creds)

# Make Graph API request to list all users
$header = @{
"Authorization" = "Bearer $($authResult.AccessToken)"
"Content-Type" = "application/json"
}
$result = Invoke-RestMethod -Method Get -Headers $header -Uri "https://graph.windows.net/$tenantId/users?api-version=1.6"
($result.Content | ConvertFrom-Json).value

您需要确保您的应用程序已在 Azure AD 中注册,并且拥有您尝试执行的操作所需的最低应用程序权限(但不能超过此权限,以在应用程序的凭据遭到泄露时限制您的暴露) )。例如,如果您的应用程序只需要读取目录数据(例如通过电子邮件地址查找用户),您可以像这样设置权限:

App-only permissions to read directory data

关于azure - 如何访问 GRAPH API 来获取所有用户而无需登录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37013975/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com