4
应用程序使用OAuth2 flow
登录用户的O365帐户并将返回的访问令牌存储在会话变量中。下面的代码是用来保存标记:在服务结构集群上发布应用程序后HttpContext.Session为空
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这样的分布式体系结构来说是一个坏主意,那么什么是一个好的替代解决方案?