Пример #1
0
        /// <summary>
        /// 生成用户的公钥,返回加密UserId的加密串
        /// </summary>
        /// <param name="uid"></param>
        /// <param name="userType"></param>
        /// <returns></returns>
        public string CreatePublicKey(int uid, AuthUserType userType)
        {
            var encryptStr = Execute(db =>
            {
                var authKey = db.AuthKeys.FirstOrDefault(u => u.UserId == uid && u.UserType == (int)userType);
                if (authKey != null)
                {
                    return(RSAHelper.EncryptString(uid.ToString(), authKey.PublicKey));
                }
                var keyPair = RSAHelper.GetRASKey();
                authKey     = new AuthKeys
                {
                    UserId     = uid,
                    PublicKey  = keyPair.PublicKey,
                    PrivateKey = keyPair.PrivateKey,
                    UserType   = (int)userType,
                    CreateTime = DateTime.Now
                };
                db.AuthKeys.Add(authKey);
                db.SaveChanges();
                return(RSAHelper.EncryptString(uid.ToString(), authKey.PublicKey));
            });

            CreateCache <AuthKeys>();
            return(encryptStr);
        }
Пример #2
0
        public AuthKeys GetAuthKeys(int uid, AuthUserType userType)
        {
            AuthKeys authKeys;

            CheckKey(uid, userType, out authKeys);
            return(authKeys ?? new AuthKeys());
        }
Пример #3
0
        public override void OnActionExecuting(HttpActionContext filterContext)
        {
            var headers    = filterContext.Request.Headers;
            var result     = new ResponsePackage <object>();
            var extionData = new ResponseExtensionData
            {
                ModelValidateErrors = new List <ModelValidateError>(),
                CallResult          = CallResult.Unauthorized,
                RetMsg = LanguageUtil.Translate("api_Filters_AuthCodeAttribute_CheckAppLoginAttribute_OnActionExecuting_RetMsg")
            };

            if (!headers.Contains("uid"))
            {
                result.Data            = null;
                result.ExtensionData   = extionData;
                filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
                return;
            }
            var uid = Convert.ToInt32(headers.GetValues("uid").First());

            if (headers.Contains("token") && uid > 0)
            {
                const AuthUserType userType = (AuthUserType)2;
                var tokenEncryptStr         = headers.GetValues("token").First();
                var authKeys = ((IContainer)HttpRuntime.Cache["containerKey"]).Resolve <IAuthKeysBusiness>().GetAuthKeys(uid, userType);
                if (string.IsNullOrEmpty(tokenEncryptStr) || authKeys == null || authKeys.PrivateKey == null)
                {
                    result.Data            = null;
                    result.ExtensionData   = extionData;
                    filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
                    return;
                }
                var tokenDecryptStr = RSAHelper.DecryptString(tokenEncryptStr, authKeys.PrivateKey);
                if (string.IsNullOrWhiteSpace(tokenDecryptStr) || !string.Equals(tokenDecryptStr, uid.ToString()))
                {
                    result.Data            = null;
                    result.ExtensionData   = extionData;
                    filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
                    return;
                }
            }
            else
            {
                result.Data            = null;
                result.ExtensionData   = extionData;
                filterContext.Response = filterContext.Request.CreateResponse(HttpStatusCode.OK, result);
                return;
            }
            base.OnActionExecuting(filterContext);
        }
Пример #4
0
        private void CheckKey(int uid, AuthUserType userType, out AuthKeys authKeys)
        {
            var condtions = new List <Condtion>
            {
                new Condtion
                {
                    FiledName       = "UserId",
                    FiledValue      = uid,
                    ExpressionLogic = ExpressionLogic.And,
                    ExpressionType  = ExpressionType.Equal
                },
                new Condtion
                {
                    FiledName       = "UserType",
                    FiledValue      = (int)userType,
                    ExpressionLogic = ExpressionLogic.And,
                    ExpressionType  = ExpressionType.Equal
                }
            };

            authKeys = _authKeysRepository.GetEntity(condtions);
        }
Пример #5
0
 public Result GetAuthKeys(int uid, AuthUserType userType)
 {
     return(CommonResult(() => _iAuthKeysBusiness.GetAuthKeys(uid, userType), r => Console.WriteLine(r.ToJSON())));
 }
Пример #6
0
 public string CreatePublicKey(int uid, AuthUserType userType)
 {
     return(_authKeysRepository.CreatePublicKey(uid, userType));
 }