从用户ID创建原则/ httpcontextbase.User

时间:2014-01-10 11:09:30

标签: asp.net asp.net-mvc-4 c#-4.0 authorization asp.net-membership

我使用cors和asp.net会员来管理API的安全性。但是在某些情况下,服务器可能需要代表客户端与我们的api通话。如在UI mvc项目代码背后> API。

因为服务器,而不是授权客户端会进行此调用,所以asp.net cookie不会被唤醒或拾取。

我重载了AuthorizeCore以检查是否有令牌:

if(httpContext.Request.Headers["x-access-token"] != null)
        {
            // this authorization is from token, rather than cookie
            var accessToken = httpContext.Request.Headers["x-access-token"];
            var security = new Security();
            var decrypted = JsonConvert.DeserializeObject<TokenModel>(security.Decrypt(accessToken));

            var clientip = GetClientIp(httpContext.Request);

            if(httpContext.Request.Headers["x-client-ip"] == null)
            {
                return false;
            }

            if (httpContext.Request.Headers["x-client-ip"] != decrypted.Ip)
            {
                return false;
            }

            if (!IsSecretValid(decrypted))
            {
                return false;
            }


            MembershipUser u = Membership.GetUser(decrypted.UserId);

        }

我要问的是,如何将成员资格转换为原则,以便让角色的其余代码等工作。

IPrincipal user = httpContext.User;

if (!user.Identity.IsAuthenticated)
        {
            return false;
        }

        if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase))
        {
            return false;
        }

        if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
        {
            return false;
        }

这是否可能,如果是这样的话。

1 个答案:

答案 0 :(得分:0)

抱歉,通过深思熟虑找到了一条路:

httpContext.User = new GenericPrincipal(new GenericIdentity(u.UserName), System.Web.Security.Roles.GetRolesForUser(u.UserName));

然后,如果需要,这应该使我的控制器操作能够获取用户ID等。