4

https://github.com/Azure-Samples/active-directory-dotnet-graphapi-console/tree/master/GraphConsoleAppV3からグラフコードを試しました。私のローカルシステムで動作しました。ローカルマシンでは、ウィンドウをポップアップしてログインを要求します。しかし、私がazure Web Portalにアプリケーションをデプロイすると、Itenentを表すトークンを取得する時点で失敗しました。Azure ADグラフapiはローカルでは動作しますが、デプロイ時に失敗します

[COMExceptionは(0x80004005が)。:エラーHRESULT E_FAILがCOMコンポーネントへの呼び出しから返されました] "エラーHRESULT E_FAILがCOMコンポーネントへの呼び出しから返されました"

私はこのことを考えますローカルシステムからトークンを検索しています。トークン検索オプションは、ウィンドウやWebに関連していますか?コードの変更に関する提案。

このアプリケーションを展開すると、どのように動作するのですか。私はITenantDetail tenantDetail = GetTenantDetailsS​​ync(クライアント、UserModeConstants.TenantId)を変更できると思います。ユーザーから情報を取得するコードに変換します。これはウェブ上でも動作します。コードサンプルで使用して

private static ActiveDirectoryClient client; 
client = AuthenticationHelper.GetActiveDirectoryClientAsUser(); 
ITenantDetail tenantDetail = GetTenantDetailsSync(client, UserModeConstants.TenantId); 



public static ITenantDetail GetTenantDetailsSync(IActiveDirectoryClient client, string tenantId) 
    { 
     ITenantDetail tenant = null; 
     try 
     { 
      IPagedCollection<ITenantDetail> tenantsCollection = client.TenantDetails 
       .Where(tenantDetail => tenantDetail.ObjectId.Equals(tenantId)).ExecuteAsync().Result; 

      List<ITenantDetail> tenantsList = tenantsCollection.CurrentPage.ToList(); 

      if (tenantsList.Count > 0) 
      { 
       tenant = tenantsList.First(); 
      } 
     } 
     catch (Exception ex) 
     { 
     } 

     if (tenant == null) 
     { 
      return null; 
     } 
     else 
     { 
      TenantDetail tenantDetail = (TenantDetail)tenant; 
      return tenantDetail; 
     } 
    } 



public static ActiveDirectoryClient GetActiveDirectoryClientAsUser() 
     { 
      Uri servicePointUri = new Uri(GlobalConstants.ResourceUrl); 
      Uri serviceRoot = new Uri(servicePointUri, UserModeConstants.TenantId); 
      ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, 
       async() => await AcquireTokenAsyncForUser()); 
      return activeDirectoryClient; 
     } 

public static async Task<string> AcquireTokenAsyncForUser() 
     { 
      return await GetTokenForUser(); 
     } 

public static async Task<string> GetTokenForUser() 
     { 
      if (TokenForUser == null) 
      { 
       var redirectUri = new Uri("https://localhost"); 
       AuthenticationContext authenticationContext = new AuthenticationContext(UserModeConstants.AuthString, false); 
       AuthenticationResult userAuthnResult = await authenticationContext.AcquireTokenAsync(GlobalConstants.ResourceUrl, 
        UserModeConstants.ClientId, redirectUri, new PlatformParameters(PromptBehavior.RefreshSession)); 
       TokenForUser = userAuthnResult.AccessToken; 
      } 
      return TokenForUser; 
     } 
+0

「Azure Webポータルにデプロイする」とはどういう意味ですか?サンプルはコンソールアプリケーションですか? – RasmusW

+0

コンソールアプリケーションをWebアプリケーションに更新して公開しました。 – Kurkula

+1

その場合、COM例外は、ログイン・ダイアログを表示するためにIEインスタンスを開始しようとしているコードに起因すると思います。おそらくWebアプリケーションサンプルの1つを出発点として使用するべきです([Fei Xueの答え](http://stackoverflow.com/a/42643452)など))。 – RasmusW

答えて

5

Active Directory Authentication Libraryは、Windowsデスクトップ、Windowsストア、Xamarin iOSとAndroidのXamarinなど、さまざまなプラットフォーム上であなたの.NETクライアントの認証機能を使用する ヘルプの開発者です。

ウェブアプリケーションを開発している場合は、コードサンプルactive-directory-dotnet-webapp-openidconnectを参照してください。また、WebアプリケーションでAzure ADグラフAPIを使用する場合は、コードサンプルactive-directory-dotnet-graphapi-webを参照することができます。

Microsoftはまた、アズールで開発したサンプルの多くを提供し、あなたは下のリンクからそれらを見つけることができます。

Azure Samples

2

あなたのログインのポップアップがローカルホスト上で正常に動作しますが、展開されたときにポップアップしていない意味ですか?ソリューションのこのリンクを参照してくださいazure login popup not working

私はあなたの質問に誤解された場合、私はlogin.correct私のためにpowershellを使用する必要があります。

関連する問題