2016-04-19 33 views
1

私はこのテンプレートを使用してASP.NET MVCとWebAPIでアプリケーションを構築しています:Azure AD B2C WebApp/WepAPI。私はAzure B2C ADをweb.configファイルで設定しました。「サインイン」をクリックすると、アイデンティティプロバイダが表示されます。ログインはこれまでのところ動作しています(私は右上にユーザー名が表示されています)、 "To-Do List"アクションを実行できます。Azure B2C - トークンをサイレントに取得できませんでした

しかし、すぐにデバッガを停止し、F5キーを押してアプリケーションを再起動すると、「To-Do List」を再度クリックするとエラーになります。

トークンを静かに取得できませんでした。呼び出し方法AcquireTokenテキスト - これが起こる>Code

は、原因となるユーザーがまだ認証されているが、NaiveSessionCacheは、アプリケーションが再起動した後に空です。可能な解決策は、OnAuthorizationCodeReceivedハンドラにトークンを保存するために、だろう、しかし、私は私の中にさらなる使用のためAuthenticationContextクラスを使用してベアラ・トークンを取得する修正するにはどうすればよい

private async Task OnAuthorizationCodeReceived(AuthorizationCodeReceivedNotification notification) 
    { 
     string userObjectID = notification.AuthenticationTicket.Identity.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 
     string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant, string.Empty, string.Empty); 
     ClientCredential credential = new ClientCredential(clientId, clientSecret); 

     string mostRecentPolicy = notification.AuthenticationTicket.Identity.FindFirst(Startup.AcrClaimType).Value; 
     AuthenticationContext authContext = new AuthenticationContext(authority); 

     AuthenticationResult result = await authContext.AcquireTokenByAuthorizationCodeAsync(notification.Code, new Uri(redirectUri), credential, new string[] { clientId }, mostRecentPolicy); 

     // Store token in ClaimsIdentity 
     notification.AuthenticationTicket.Identity.AddClaim(new System.Security.Claims.Claim("Token", result.Token)); 
    } 

答えて

2

キャッシュは、どこにも保持されていないため空です。チェックアウト:http://www.cloudidentity.com/blog/2014/07/09/the-new-token-cache-in-adal-v2/ EFADALTokenCacheを検索すると、キャッシュを一部のストレージに保存するのに役立つ実装が見つかります。

Azure B2Cは、https://www.nuget.org/packages/Microsoft.Identity.Clientで入手可能なMSALという新しいライブラリでのみサポートされます。このライブラリはまだプレビュー中です。

+0

あなたが役に立った場合、その回答を受け入れることができます。他の人にも役立ちます。 –

+0

NaiveSessionCacheは、セッション全体のセッション中に利用可能と思われるセッション状態のトークンを保持します。これはサンプルで使用されています。セッションではなくDBに格納するほうが好きなのはなぜですか?関連する質問があります[Azure-Samples Azure Active Directory OpenId ConnectのNaiveSessionCacheを使用することはできますか?](// stackoverflow.com/q/41864737) –

関連する問題