【发布时间】:2017-02-25 21:10:26
【问题描述】:
应用程序使用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);
}
此解决方案适用于本地 5 节点集群,但在 Azure 3 节点集群上发布后,Session 似乎不起作用。
我使用了远程调试并正确添加了访问令牌,但是一旦我调用GetSessionValue,HttpContext.Session 包含 0 键。
如果使用HttpContext.Session 对于像 SF 这样的分布式架构来说是个坏主意,那么什么是好的替代解决方案?
【问题讨论】:
标签: azure session caching asp.net-core azure-service-fabric