1

私は2つのAzureアクティブディレクトリアプリケーションを設定しています。Azureアクティブディレクトリ単一テナント別webapiアプリケーションへのアクセス

簡潔さのために、App-AおよびApp-B

Aはwebappであり、Bsomedomain.azurewebsites.netに公開されており、webapiを公開しています。

の両方が持つ設定されている:今

app.UseCookieAuthentication(new CookieAuthenticationOptions(){ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true 
}); 

app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions{ 
    AutomaticAuthenticate = true, 
    AutomaticChallenge = true, 
    ClientId = Configuration["Authentication:AzureAd:ClientId"], 
    Authority = Configuration["Authentication:AzureAd:AADInstance"] + Configuration["Authentication:AzureAd:TenantId"], 
    CallbackPath = Configuration["Authentication:AzureAd:CallbackPath"],     
    TokenValidationParameters = new TokenValidationParameters{      
     SaveSigninToken = true, 
    }, 
    Events = new OpenIdConnectEvents{ 
     OnAuthenticationFailed = OnAuthenticationFailed, 
     OnAuthorizationCodeReceived = OnAuthorizationCodeReceived, 
     OnMessageReceived = OnMessageReceived, 
     OnTicketReceived = OnTicketRecieved, 
     OnTokenValidated = OnTokenValidated, 
     OnUserInformationReceived = OnUserInformationReceived, 
     OnTokenResponseReceived = OnTokenResponseRecieved, 
     OnRemoteFailure = OnRemoteFailure 
    } 
}); 

App-BApp-Aに委任権限を可能にし、その逆。私はまた、「

App-A[Authorize]アクセスしようとするとhttp://localhost:5000/signin-oidcApp-Bへの返信URL」彼らはサインインする必要がありますし、MicrosoftからのサインインページにルーティングされているDコントローラをApp-Aを追加しました。今すぐこのログインページで、最初のログイン時にApp-B web-apiにすぐにアクセスできますか?最初のハンドシェイク/ログインから何らかの形でアクセストークンを送信することができますか、または以下のようなトークンを収集するために別の往復を行う適切な方法ですか?

もう一度往復する必要がある場合は、最新のどこかにサンプルコードブ​​ロックがありますか?コードを動作させるようなことはできません。私が見つけてる

すべての例は次のようなものです:

private Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedContext context){ 
    var code = context.Code; 
    ClientCredential credential = new ClientCredential(clientId, appKey); 
    string tenantID = context.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value; 
    string signedInUserID = context.AuthenticationTicket.Identity.FindFirst(ClaimTypes.NameIdentifier).Value; 
    AuthenticationContext authContext = new AuthenticationContext(string.Format("https://login.windows.net/{0}", tenantID), new EFADALTokenCache(signedInUserID)); 
    AuthenticationResult result = authContext.AcquireTokenByAuthorizationCode(code, new Uri(HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Path)), credential, graphResourceID); 

しかし、私はしても、コンテキストのプロパティであることcodeが表示されませんか? 私は現在、最新バージョンのnetcoreを使用しています。

私の主な目標は、初期の署名から何とか取得したトークンでApp-BエンドポイントへHttpClient電話をかけることです

答えて

0

コンテキストオブジェクトが変更されています。

context.ProtocolMessage.Code 

コードフローます自動的にアクセストークンをキャッシュに保存します。これは、次に検索することができます。

authContext.AcquireTokenSilentAsync 

example usi ngの最新.netcore:authContext.AcquireTokenByAuthorizationCodeを:あなたは、コードの流れが自動的にキャッシュにアクセストークンを保存すると言うとき

https://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-openidconnect-aspnetcore/tree/master/WebApp-WebAPI-OpenIdConnect-DotNet

+0

、手動で上記ブロック内の行を呼び出すことによって取得して意味ですか?私がそのビットを除外しようとしたときにauthContext.AcquireTokenSilentAsyncを使用すると、トークンがキャッシュにないというエラーが発生したためです。 – cjsmith

+0

トークンキャッシング実装を認証コンテキストに渡してコードを使用していない場合、このインスタンスで後続のリクエストでAcquireTokenSilentAsyncを使用することはできません。 – davidcarr

+0

そして、私が自動で意味するとき、私はキャッシュからの意味です。 – davidcarr

関連する問題