2017-07-29 15 views
0

私は、プログラムのAzure Active Directoryにアプリケーションを登録しようとするには、次のコードを使用しています:azureMicrosoft.Azure.Management.Fluent.AzureのインスタンスであるFluent APIを使用してAzure ADアプリケーションを作成するにはどうすればよいですか?

 var application = azure.ActiveDirectoryApplications.Define(applicationName) 
      .WithSignOnUrl(url) 
      .WithIdentifierUrl(url) 
      .WithAvailableToOtherTenants(false) 
      .DefinePasswordCredential(id) 
       .WithPasswordValue(secret) 
       .Attach() 
      .Create(); 

を。

Azure Active Directoryアプリケーションを作成するために上記を実行すると、メッセージOperation returned an invalid status code 'Forbidden'Microsoft.Azure.Management.Fluent.Azure例外がスローされます。他のAzureリソース(リソースグループやアプリケーションサービスなど)の作成はうまく動作します。例外の詳細を見てみると

、私は次のエンドポイントへの要求がなされていることがわかります。体以来

{"odata.error":{"code":"Authorization_RequestDenied","message":{"lang":"en","value":"Insufficient privileges to complete the operation."}}} 

https://graph.windows.net/{myTenantId}/applications?api-version=1.6

次の応答体であり、 「操作を完了するための権限が不十分だ」と言われていますが、これは単純な権限の問題ですが、Microsoft.Azure.ActiveDirectory APIのために(グローバル管理者としてサインインしている間に)コードを実行しているアプリケーション:

  • アクセス
  • 読むユーザーに署名し、書き込みディレクトリデータ

としてディレクトリは、これらの権限が十分ではありませんか?私は何が欠けていますか?私が言ったように、流暢なAPIを使って他のリソースを作成するだけでも問題ありません。

答えて

1

範囲Directory.AccessAsUser.AllDirectory.ReadWrite.All User.Readは、Azure Active Directoryにアプリケーションを作成するのに十分な権限です。

static void Main(string[] args) 
{ 
    var url = "http://adfei.onmicrosoft.com/appFluent"; 
    var id = "abc"; 
    var secret = "secret"; 
    var applicationName = "appFluent"; 
    var credFile = new AzureCredentials(new UserLoginInformation 
    { 
     ClientId = "{appId of native application}", 
     UserName = "{userName}", 
     Password = "{password}" 
    }, 
     "adfei.onmicrosoft.com", AzureEnvironment.AzureGlobalCloud); 
    IAzure azure = Azure.Authenticate(credFile).WithDefaultSubscription(); 
    var application = azure.ActiveDirectoryApplications.Define(applicationName) 
    .WithSignOnUrl(url) 
    .WithIdentifierUrl(url) 
    .WithAvailableToOtherTenants(false) 
    .DefinePasswordCredential(id) 
     .WithPasswordValue(secret) 
     .Attach() 
    .Create(); 

    Console.Read(); 
} 

をと範囲は、あなたがこの操作の権限を持っていることを確認するために、アクセストークンに含まれていることを確認してください:あなたはazureインスタンスを構築する方法を提供していないので、私が働いて、コードサンプルを提供することになります。トークンを確認するためにFiddler経由でリクエストを取得し、this siteのトークンをデコードして、アクセストークンのscpのクレームをチェックすることができます。

+0

ありがとうございます、あなたのようなIAzureクライアントを構築していただきありがとうございます。以前は、アプリケーションのclientId/clientSecretのみを使用していました(ポータルで手動で許可を与えていました)、おそらくそれが問題でした。 – tremolo

関連する問題