0

私が欲しいのは簡単ですが、明確な答えは見つかりませんでした。GRAPH APIにアクセスしてログインしなくてもすべてのユーザーを取得するにはどうすればよいですか?

私は単純なコンソールアプリケーションを持っています。私がしたいのは、新しいGRAPH APIを使用して私のAzure ADのすべてのユーザーを取得することだけです。私が持っているすべての例では、プログラムのログインが必要です(OAuth?)。私はそれを望んでいない。コードをuser/pwに渡して、メソッドを呼び出すだけでよいのです。

+0

をしても、あなたは、ユーザー/ passwdファイルを持っている、Azureではまだログインが必要です'UserCredential userCred = new UserCredential(User、Password);' –

+0

Azureにも「アプリを作成する」必要がありますか? – punkouter

+0

いいえ、単にユーザーの資格情報を使用してください –

答えて

0

ここに私が書いたPowerShellスクリプトがあります。

# Adding the AD library to your PowerShell Session. 
Add-Type -Path 'C:\Program Files\Microsoft Azure Active Directory Connect\Microsoft.IdentityModel.Clients.ActiveDirectory.dll' 

# This is the tenant id of you Azure AD. You can use tenant name instead if you want. 
$tenantID = "<the tenant id of Azure AD>" 
$authString = "https://login.microsoftonline.com/$tenantID" 

# Here, the username must be MFA disabled user Admin at least, and must not be a live id. 
$username = "<the username of the AD's Admin>" 
$password = "<the password of the above user>" 

# The resource URI for your token. 
$resource = "https://graph.windows.net/" 

# This is the common client id. 
$client_id = "1950a258-227b-4e31-a9cf-717495945fc2" 

# Create a client credential with the above common client id, username and password. 
$creds = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.UserCredential" ` 
        -ArgumentList $username,$password 

# Create a authentication context with the above authentication string. 
$authContext = New-Object "Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext" ` 
        -ArgumentList $authString 

# Acquire access token from server. 
$authenticationResult = $authContext.AcquireToken($resource,$client_id,$creds) 

# Use the access token to setup headers for your http request. 
$authHeader = $authenticationResult.AccessTokenType + " " + $authenticationResult.AccessToken 
$headers = @{"Authorization"=$authHeader; "Content-Type"="application/json"} 

# Get the users. 
Invoke-RestMethod -Method GET -Uri "https://graph.windows.net/$tenantID/users?api-version=1.6" 

C#を使用している場合は、実際にはスクリプトがC#コードから変換されるため、実際には似ています。他のプログラミング言語については、対応するAzure SDKに類似のAPIがあります。そうでない場合は、OAuth2の使用を検討することもできます。

+0

だから私はAzureでまだ 'アプリを作成'していますか?私はadminユーザー/ pwを使用するだけではありませんか?私は古いことに慣れているので、これらのトークン/ Oauthの概念はすべて新しいものです。私には両方が必要なように見えます。アプリを作成して、紺色でもログインしても許可してください。悪いことにこれを試してみてください – punkouter

+1

このソリューションは管理者のユーザー名とパスワードをスクリプトに保存します。 –

+0

私はちょうどコード(dll)で鉱山を持つでしょう。しかし、それは非常に深刻な製品ではありません。ちょうどそれが働くことが必要です。 – punkouter

1

物理的にデバイスに座っているユーザーがいる場合は、完全なサインインフローを呼び出すことをお勧めします。管理者の資格情報が公開されないようにするだけでなく、必要に応じてパスワードを変更したり、マルチファクタ認証などを呼び出すこともできます。

ただし、完全監視されていないサービスを実行する完全に安全で信頼できるマシンです。 (OAuth 2.0では「機密クライアント」と呼ばれています)。これは、認証のみを使用するOAuth 2.0クライアント資格認可フローで実現できます。これはService to Service Calls Using Client Credentialsに示されています。

ADALを使用すると、AuthenticationContext.AcquireToken(String, ClientCredential)(資格情報がパスワード資格情報 - 文字列の場合)またはAuthenticationContext.AcquireToken(String, ClientAssertionCertificate)(資格証明がアサーションに署名するために使用する証明書の場合)のいずれかを使用してこのフローが呼び出されます。 PowerShellと証明書認証を使用して

が、それはこのようになります:

Azure AD samples for daemon applications上のこれらのそれぞれのための.NET(C#の)サンプルがあります

あなたのアプリケーションがAzure ADに登録されていることを確認する必要があります。あなたがやろうとしていることのためのアクセス許可(それ以上ではなく、アプリケーションの資格情報が侵害された場合の露出を制限するため)。お使いのアプリケーションのみ(メールアドレスでユーザーを検索するなど)ディレクトリデータを読み取る必要がある場合たとえば、あなたがこのようなアクセス権を設定します:

App-only permissions to read directory data

+0

私の場合、ユーザーは外部プログラムにあり、ボタンを押すとコードが発生します。ボタンを押すと、Graph APIを使用してEメールを送信し、AADユーザーと電子メールを照合します。私はそれが意味をなさないと思うか、これが起こる前にユーザーがOffice365のログインをしていても働くとは思わない。彼らは権限を持っていないので(あるいはAzureのアプリで権限を設定している?何か – punkouter

+0

本当に必要なものによって決まります。 @PhilippeSignoretのコードでは、証明書を使用してADアプリケーションを作成し、適切な権限を設定し、顧客に証明書をインストールする必要があります。そして、それはあなたのADに新しいアプリケーションを作成することができなくなります。新しいユーザーを作成することもできません(b2cを使用している場合はそうではありません)。これは、ADアプリケーションと証明書の許可を完全に制御できるため、より安全です。 –

+0

@punkouter Azure AD Graph APIをアプリ専用のコンテキストで呼びたいシナリオがあります。そのため、クライアントクレデンシャルフローが存在します。そして、はい、あなたがアプリを設定するとき、あなたはアプリが持っている必要がある権限を選択します(私は答えにスクリーンショットを追加しました)。 –