に公開された後、HttpContext.Sessionが空になります。アプリケーションはOAuth2 flow
を使用して、ユーザーのO365アカウントにログインし、返されたアクセストークンをセッション変数に格納します。次のコードは、トークンを格納するために使用されます。アプリケーションがサービスファブリッククラスタ
var authResult = await authContext.AcquireTokenByAuthorizationCodeAsync(
Request.Query["code"],
loginRedirectUri,
new ClientCredential(ConfigSettings.ClientId, ConfigSettings.ClientSecret),
ConfigSettings.O365UnifiedAPIResource);
var authResultEWS = await authContext.AcquireTokenByAuthorizationCodeAsync(
Request.Query["code"],
loginRedirectUri,
new ClientCredential(ConfigSettings.ClientId, ConfigSettings.ClientSecret),
ConfigSettings.EWSAPIResource);
HttpContext.Session.SetString(SessionKeys.Login.AccessToken, authResult.AccessToken);
HttpContext.Session.SetString(SessionKeys.Login.EWSAccessToken, authResultEWS.AccessToken);
そしてここでは、我々のコントローラにトークンを取り戻す方法です:
private string GetSessionValue(string key)
{
byte[] buffer = new byte[2048];
HttpContext.Session.TryGetValue(key, out buffer);
return System.Text.Encoding.UTF8.GetString(buffer);
}
このsolutonは地元の5つのノードのクラスタ上で動作しますが、一度に公表しますAzure 3ノードクラスタの場合、Session
は機能していないようです。
私はリモートデバッグを使用しましたが、アクセストークンは正しく追加されましたが、GetSessionValue
と呼ばれるとHttpContext.Session
に0キーが含まれています。
HttpContext.Session
を使用する場合、SFなどの分散アーキテクチャにとっては悪い考えですが、どのような代替ソリューションが適していますか?