1

Azure AD에 의해 보호되는 dotnet core 1.1 웹 API가 있습니다. 내 Angular SPA는 adal을 사용하여 사용자를 인증합니다. 또한 백그라운드 작업을 수행하는 데몬 응용 프로그램이 있으며 웹 API를 사용하여 기능을 호출하거나 데이터를 검색합니다.SPA 및 데몬 응용 프로그램에 대한 jwt 토큰의 다른 사용자

주로 Microsoft에서 제공 한 샘플을 기반으로하며 here을 찾을 수 있습니다.

큰 차이점은 내가 다른 미들웨어를 사용하고 있다는 것입니다. API는 JwtBearerAuthentication를 사용

  .UseJwtBearerAuthentication(new JwtBearerOptions 
      { 
       TokenValidationParameters = tokenValParam, 
       AutomaticAuthenticate = true, 
       AutomaticChallenge = false, 
       Authority = String.Format(Configuration["AzureAd:AadInstance"], Configuration["AzureAD:Tenant"]), 
       Audience = Configuration["AzureAd:Audience"], 
      }) 

토큰 다음 코드에 의해 생성되는 데몬 응용 프로그램에서 :

var authContext = new AuthenticationContext("https://login.microsoftonline.com/##adId##); 
    var clientCredential = new ClientCredential("##serviceCredenitalKey##", "##serviceCredentialSecret##"); 
    var result = await authContext.AcquireTokenAsync(##webApiUri##, clientCredential); 

내가 직면하고있어 문제는 SPA에 대한 ADAL를 통해 AD에 의해 생성 된 토큰을 가지고있다 잠재 고객으로 클라이언트 응용 프로그램의 clientId. 데몬 응용 프로그램 용으로 생성 된 토큰에는 클라이언트 ID가 아니라 웹 API의 URI가 있습니다. 미들웨어에 여러 유효한 잠재 고객을 지정할 방법이 없습니다. 내 밸리데이터를 사용해야할까요?이 문제를 해결하기 위해 정비공이 내장되어 있습니까? 아니면 요점을 완전히 놓치고 있습니까?

답변

0

내가 생각할 수있는 가장 간단한 방법은 모든 클라이언트 앱이 동일한 하나 (잠재 고객), 클라이언트 ID 또는 API URL을 사용하도록 설정하는 것입니다. 데몬 응용 프로그램에서 웹 API에 대한 토큰을 얻을 때 클라이언트 ID를 자원으로 사용할 수 있으며 웹 API는 유효성이 검사 된 클라이언트 ID로 클라이언트 ID를 허용합니다. 웹 API에서 다중 대상을 지원하려면 고유 한 유효성 검사기를 작성해야합니다.