2017-11-03 1 views
0

나는 하늘에서 app 서비스로 호스팅되는 asp.net 핵심 웹 응용 프로그램을 보유하고 있습니다. Azure AD와 OpenId Connect를 사용하도록 애플리케이션을 구성했습니다. 응용 프로그램 내에서 인증이 발생합니다 (인증을 처리하기 위해 응용 프로그램 서비스 자체를 구성하지 않습니다).인증 서비스와 함께 작동하는 App Service CDN을 얻을 수 없습니다.

앱 서비스를 직접 방문하거나 (또는 ​​맞춤 도메인 이름을 사용하는 경우에도) 모든 것이 잘 작동합니다.

나는 앱 서비스 내에서 CDN 서비스를 사용하도록 설정했습니다. 초기 전파가 끝나면 브라우저를 열고 CDN 주소 ([name] .azureedge.net)로 이동합니다.

Azure AD로 리디렉션되지만 인증 프로세스가 완료되면 오류가 발생합니다.

Azure AD 로의 리다이렉트가 CDN에서 돌아 왔을 때, 앱 서비스의 URL은 return_url으로 설정되었습니다. Azure AD가 나를 리디렉션했을 때, 나는 더 이상 CDN을 치지 않았습니다. Azure AD로 리디렉션되면 브라우저에 쿠키가 있습니다. 나는 내 사이트가 그 쿠키를 찾고 있다고 의심하지만 브라우저는 다른 도메인에 의해 설정 되었기 때문에 그것을 보내지 않았다.

OpenIdConnectOptions의 전체 경로 (스키마, 호스트, 도메인 등)에 CallbackPath를 구성하려고했지만 응용 프로그램이 초기화 될 때 경로가 '/'로 시작해야한다는 오류가 발생합니다 아마도 그것은 요청에서 도메인의 루트로부터의 경로를 기대하고 있습니다).

바라건대 다른 누군가가이 문제를 발견하고 내가 잘못하고있는 것을 말해 줄 수 있기를 바랍니다.

"AzureAd": { 
    "AADInstance": "https://login.microsoftonline.com/", 
    "ClientSecret": "REDACTED", 
    "CallbackPath": "/signin-oidc", 
    "ClientId": "REDACTED",  
    "TenantId": "REDACTED",  
    "Scopes": [ 
    "openid", 
    "profile", 
    "offline_access" 
    ] 
} 

adSettings.Authority이 같은 POCO에 정의되어 있습니다 :

var openIdOptions = new OpenIdConnectOptions 
{ 
    ClientId = adSettings.ClientId, 
    ClientSecret = adSettings.ClientSecret, 
    Authority = adSettings.Authority, 
    CallbackPath = adSettings.CallbackPath, 
    ResponseType = OpenIdConnectResponseType.CodeIdToken,     
    Events = new OpenIdConnectEvents { OnTicketReceived = AddApplicationRolesToUserClaimsAsync, OnAuthorizationCodeReceived = RedeemCodeAsync } 
}; 

foreach (var scope in adSettings.Scopes.Concat(settings.MicrosoftGraph.Scopes)) 
    openIdOptions.Scope.Add(scope); 

application.UseOpenIdConnectAuthentication(openIdOptions); 

adSettings는 다음 appsettings.json에서 수화하는 POCO입니다 :

의 요청에 따라

, 여기 내 OIDC 구성입니다

public string Authority => $"{AADInstance}{TenantId}/v2.0"; 
+0

그래, 콜백 경로 구성이 작동하지 않습니다. 눈치 챘을 때 상대 URL입니다. 나는이 정확한 시나리오를 직접 해보려고하지 않았습니다. 어떻게 AAD에서 리디렉션 URL을 구성 했습니까? OIDC 구성 중 일부를 보여줄 수 있습니까? – juunas

+0

새로운 [수렴형 응용 프로그램] (https://apps.dev.microsoft.com)을 사용하고 있습니다. 앱 서비스 URL 만 구성되었습니다 (/ signin-oidc가 추가됨). 제대로 작동하려면 CDN 엔드 포인트를 추가해야 할 필요가 있습니다. 그러나 아직 어떤 문제가 발생하고있는 시점이 아닙니다. –

+0

글쎄, 그 URL로 다시 리디렉션하지 않을까요? CDN URL을 추가해보십시오.:) – juunas

답변

0

조금 뒤져서 대답을 찾았습니다.

OpenIdConnectOptions.Events 속성을 사용하면 인증 수명주기 동안 발생하는 다양한 이벤트에 연결할 수 있습니다. 하나의 콜백은 OnRedirectToIdentityProvider입니다. RedirectContext을 제공합니다. 이 객체에서 ProtocolMessage.RedirectUri이라는 속성을 읽고 쓸 수 있습니다. 이 속성을 사용하면 사용자가 AAD로 전달 될 때 return_url으로 사용되는 전체 URL을 지정할 수 있습니다.

Nuget의 Microsoft.AspNetCore.Authorization.OpenIdConnect 꾸러미를 사용하고 있습니다. options 객체에 전체 URL을 설정할 수있는 유사한 기능을 제공하는 다른 패키지도 있습니다.

관련 문제