Beispiel #1
0
        public string Encode(JwtToken token)
        {
            // 基于(提供给客户端的)基础信息编码
            string header  = EncodingExt.ToBase64Url(SerializeExt.ToJson(token.Header));
            string payload = EncodingExt.ToBase64Url(SerializeExt.ToJson(token.Payload));

            // 生成签名
            string signature = EncodingExt.ToBase64Url(ComputeHash(header, payload, token.Salt));

            return($"{header}.{payload}.{signature}");
        }
Beispiel #2
0
        /// <summary>
        /// 处理请求
        /// </summary>
        private Response Handle(string serviceName, string methodName, string httpType)
        {
            // 缓存请求头
            _httpHeaders = new Dictionary <string, string>
            {
                { "Authorization", Request.GetHeader("Authorization") ?? "" }
            };

#if DEBUG
            _log.Debug(Request.Url);
#endif

            Type interfaceType;
            var  service = Ioc.ResolveAppService(serviceName, out interfaceType);
            if (service == null)
            {
                return("Invalid Service");
            }

            var methodInfo = interfaceType.GetMethod(methodName, BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.Public);

            try
            {
                // 校验
                CheckRequest(methodInfo, httpType);

                // 若校验通过,则更新Token,防止重复请求
                UpdateToken();

                var res = InvokeMethod(methodInfo, service);

#if DEBUG
                _log.Debug(">>" + SerializeExt.ToJson(res, false));
#endif

                return(Response.AsJson(ApiResponse.SuccessResponse(res)));
            }
            catch (BusinessException ex)
            {
                _log.Info(ex, "业务异常");
                return(Response.AsJson(ApiResponse.FailResponse(ex.Message)));
            }
            catch (AuthException ex)
            {
                _log.Warning(ex, "身份验证异常");
                return(Response.AsJson(ApiResponse.FailResponse(ex.Message), HttpStatusCode.Unauthorized));
            }
            catch (Exception ex)
            {
                _log.Error(ex, "请求发生异常");
                return(Response.AsJson(ApiResponse.FailResponse("系统异常"), HttpStatusCode.InternalServerError));
            }
        }