2017-11-03 4 views
0

私はasp.netのコアWebアプリケーションをazureでアプリケーションサービスとしてホストしています。私はOpenId ConnectをAzure ADと併用するようにアプリケーションを設定しました。アプリケーション内で認証が行われます(認証を処理するためにアプリケーションサービス自体を設定していません)。App Service CDNを認証できないようにする

アプリサービスに直接アクセスすると(またはカスタムドメイン名を使用する場合でも)すべてうまく動作します。

私はアプリサービス内でCDNサービスを有効にしました。最初の伝播が終了したら、ブラウザを開いてCDNアドレス([name] .azureedge.net)に移動します。

Azure ADにリダイレクトされますが、認証プロセスが完了するとエラーが発生します。

Azure ADへのリダイレクトがCDNから戻ったときのように、アプリケーションサービスのURLはreturn_urlに設定されていたようです。だからAzure ADが私をリダイレクトしたとき、私はもはやCDNに当たらなかった。 Azure ADへのリダイレクトが起こると、ブラウザにクッキーが置かれます。私は自分のサイトがそのクッキーを探していると思われますが、ブラウザーは別のドメインによって設定されているため、送信しませんでした。

OpenIdConnectOptionsのCallbackPathを完全なURL(スキーマ、ホスト、ドメインなど)に設定しようとしましたが、アプリケーションが初期化され、パスが '/'で始まらなければならないというエラーがスローされますおそらくそれは要求のドメインのルートからのパスを期待している)。

うまくいけば、誰かがこの問題に遭遇し、私が間違っていることを教えてくれることを願っています。

"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プロパティを使用すると、認証のライフサイクル全体で発生するさまざまなイベントにフックできます。 1つのコールバックはOnRedirectToIdentityProviderと呼ばれます。それはRedirectContextを提供します。そのオブジェクトでは、ProtocolMessage.RedirectUriというプロパティに読み書きできます。このプロパティを使用すると、ユーザーがAADに転送されたときにreturn_urlとして使用される完全なURLを指定できます。

NugetのMicrosoft.AspNetCore.Authorization.OpenIdConnectパックを使用しています。オプションオブジェクトに完全なURLを設定できるような機能を提供する他のパッケージもあります。

関連する問題