Example #1
0
        /// <summary>
        /// 静默授权
        /// </summary>
        /// <returns></returns>
        public ResultContent <LoginResponse> SilentAuth()
        {
            var redis = UnityConfig.Container.Resolve <IRedisConnector>();

            var sessionId = RedisSession.SessionId;

            var isSetApiKey = redis.HashExists(sessionId, Resources.AppResource.ApiKeyHeader);
            var isSetToken  = redis.HashExists(sessionId, Resources.AppResource.TokenHeader);
            var isSetExpire = redis.HashExists(sessionId, Resources.AppResource.ExpireHeader);

            if (isSetApiKey && isSetToken && isSetExpire)
            {
                var expire      = Convert.ToDateTime(redis.HashGetStr(sessionId, Resources.AppResource.ExpireHeader), Resources.AppResource.Culture);
                var tokenString = redis.HashGetStr(sessionId, Resources.AppResource.TokenHeader);
                var hash        = UnityConfig.Container.Resolve <IHash>();
                if (expire > DateTime.Now)
                {
                    var result = ResponseUtility.InitResult <LoginResponse>(MessageCode.Success);

                    var response = new LoginResponse
                    {
                        Token  = hash.ComputeHash(tokenString),
                        Expire = expire
                    };

                    result.Data = response;

                    return(result);
                }
            }

            return(ResponseUtility.InitResult <LoginResponse>(MessageCode.SilentAuthFail));
        }
Example #2
0
        /// <summary>执行异步异常筛选器。</summary>
        /// <returns>异步异常筛选器。</returns>
        /// <param name="actionExecutedContext">操作执行的上下文。</param>
        /// <param name="cancellationToken">取消标记。</param>
        public Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
        {
            return(Task.Run(() =>
            {
                var log = UnityConfig.Container.Resolve <ILogWapper>(Resources.AppResource.WebApiExceptionLogName);
                log.Error(actionExecutedContext.Exception, actionExecutedContext.Request.RequestUri.LocalPath);

                var apiException = ResponseUtility.InitResult <object>(MessageCode.ApiInterfaceException);
                apiException.Data = actionExecutedContext.Exception.Message;

                actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(HttpStatusCode.InternalServerError, apiException);
            }, cancellationToken));
        }
Example #3
0
        protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.Headers.Contains(Resources.AppResource.ApiKeyHeader))
            {
                var token = request.Headers.GetValues(Resources.AppResource.ApiKeyHeader).First();

                if (Validate(token))
                {
                    return(await base.SendAsync(request, cancellationToken));
                }
            }

            var response = await base.SendAsync(request, cancellationToken);

            var errorkey = ResponseUtility.InitResult <object>(MessageCode.ApiKeyValiFail);

            response.Content = new ObjectContent(errorkey.GetType(), errorkey, new JsonMediaTypeFormatter());

            return(response);
        }
Example #4
0
        /// <summary>异步执行筛选器操作。</summary>
        /// <returns>为此操作新建的任务。</returns>
        /// <param name="actionContext">操作上下文。</param>
        /// <param name="cancellationToken">为此任务分配的取消标记。</param>
        /// <param name="continuation">在调用操作方法之后,委托函数将继续。</param>
        public Task <HttpResponseMessage> ExecuteActionFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func <Task <HttpResponseMessage> > continuation)
        {
            if (actionContext.Request.Headers.Contains(Resources.AppResource.TokenHeader))
            {
                var token = actionContext.Request.Headers.GetValues(Resources.AppResource.TokenHeader).First();

                if (TokenAuth(token))
                {
                    return(continuation.Invoke());
                }
            }

            var errorToken = ResponseUtility.InitResult <object>(MessageCode.TokenAuthFail);

            var errorTokenMessage = new HttpResponseMessage
            {
                Content = new ObjectContent(errorToken.GetType(), errorToken, new JsonMediaTypeFormatter())
            };

            return(Task.FromResult(errorTokenMessage));
        }
Example #5
0
        /// <summary>
        /// 用户登陆
        /// </summary>
        /// <param name="request">登陆请求</param>
        /// <returns>登陆结果</returns>
        public ResultContent <LoginResponse> Login([FromBody] LoginRequest request)
        {
            // todo Check UserName And PassWord

            if (string.Equals(request.UserName, @"super") && string.Equals(request.PassWord, @"123456"))
            {
                var result = ResponseUtility.InitResult <LoginResponse>(MessageCode.Success);

                var expire = DateTime.Now.AddDays(1);

                var token = new Token
                {
                    Id       = 1,
                    UserName = "******",
                    Expire   = expire,
                    Type     = Resources.AppResource.AccessToken
                };

                var crypt = UnityConfig.Container.Resolve <ICrypt>();

                var hash = UnityConfig.Container.Resolve <IHash>();

                var tokenString = crypt.Encrypt(JsonConvert.SerializeObject(token, Formatting.None));

                var response = new LoginResponse
                {
                    Token  = hash.ComputeHash(tokenString),
                    Expire = expire
                };

                result.Data = response;

                RedisSession[Resources.AppResource.TokenHeader]  = tokenString;
                RedisSession[Resources.AppResource.ExpireHeader] = expire.ToString(Resources.AppResource.Culture);

                return(result);
            }

            return(ResponseUtility.InitResult <LoginResponse>(MessageCode.UserNameOrPassWordError));
        }