在Service Fabric

时间:2016-12-03 16:05:38

标签: authentication cookies asp.net-core azure-service-fabric

我在Service Fabric上运行了一个ASP.NET核心应用程序(3个节点),要求用户通过microsoft对自己进行身份验证,以获得对O365环境的访问权限。验证成功后,它们会被重定向到我的应用程序,用户的信息将存储到包含特定角色的cookie中(如管理员):

        var claims = new List<Claim> {
            new Claim(ClaimTypes.GivenName, authResult.UserInfo.GivenName, ClaimValueTypes.String),
            new Claim(ClaimTypes.Name, authResult.UserInfo.FamilyName, ClaimValueTypes.String),
            new Claim(ClaimTypes.Email, authResult.UserInfo.DisplayableId, ClaimValueTypes.String),
            new Claim("aud", userId, ClaimValueTypes.String),
            new Claim(ClaimTypes.Role, "Office365Admin", ClaimValueTypes.String)
        };

以下是我设置cookie中间件的方法:

        await HttpContext.Authentication.SignInAsync("MyCookieMiddlewareInstance", userPrincipal,
            new AuthenticationProperties
            {
                ExpiresUtc = DateTime.UtcNow.AddMinutes(20),
                IsPersistent = true,
                AllowRefresh = true
            });

然后我在我的其他控制器方法上使用典型的授权,以确保请求此方法的用户是正确的角色:

        [Authorize(Roles = "Office365Admin")]

这在我的本地环境(1到5个节点)上工作得很好但是一旦我进入我的3节点azure群集,用户就会被随机重定向到我的LoginPath(这意味着传入请求的cookie不包含正确的角色,或者至少服务器无法识别它。这似乎是随机发生的,我可以在没有发生这种情况的情况下发出4-5个请求,或者对于发送10秒的所有请求都可能发生这种情况。我认为这可能是一些负载问题,因为禁用3个节点中的2个似乎正在解决问题,但这不是一个可靠的解决方案。

0 个答案:

没有答案