Exemple #1
0
        /// <summary>
        ///   post一个Api请求
        /// </summary>
        /// <typeparam name="TRes"></typeparam>
        /// <param name="apiRoute"></param>
        /// <param name="req"></param>
        /// <param name="funcFormat"></param>
        /// <returns></returns>
        public static async Task <TRes> PostApi <TRes>(string apiRoute, object req = null,
                                                       Func <HttpResponseMessage, Task <TRes> > funcFormat = null)
            where TRes : ResultMo, new()
        {
            var sysInfo = MemberShiper.AppAuthorize;

            var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource);

            if (!secretKeyRes.IsSuccess())
            {
                return(secretKeyRes.ConvertToResult <TRes>());
            }

            var httpReq = new OsHttpRequest
            {
                HttpMothed = HttpMothed.POST,
                AddressUrl = string.Concat(apiUrlPre, apiRoute),
                CustomBody = JsonConvert.SerializeObject(req),

                RequestSet = r =>
                {
                    r.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json")
                    {
                        CharSet = "UTF-8"
                    };
                    var ticket = MemberShiper.AppAuthorize.ToSignData(secretKeyRes.data);
                    r.Content.Headers.Add("at_id", ticket);
                }
            };

            httpReq.FormParameters.Add(new FormParameter());
            return(await httpReq.RestCommon <TRes>());
        }
Exemple #2
0
        public async Task Invoke(HttpContext context)
        {
            if (MemberShiper.AppAuthorize != null)
            {
                await _next.Invoke(context);

                return;
            }

            SysAuthorizeInfo sysInfo = null;
            //  这里是为了兼容App嵌套h5页面,使用App的授权信息
            string auticketStr = context.Request.Headers[GlobalKeysUtil.AuthorizeTicketName];

            if (!string.IsNullOrEmpty(auticketStr))
            {
                sysInfo = new SysAuthorizeInfo();
                sysInfo.FromSignData(auticketStr);

                var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource);

                if (!secretKeyRes.IsSuccess())
                {
                    await ResponseEnd(context, secretKeyRes);

                    return;
                }
                if (!sysInfo.CheckSign(secretKeyRes.data))
                {
                    await ResponseEnd(context, new ResultMo(ResultTypes.ParaError, "签名验证失败!"));

                    return;
                }
                sysInfo.OriginAppSource = sysInfo.AppSource;
            }

            //  如果不是App访问,添加Web相关系统信息
            if (sysInfo == null)
            {
                sysInfo = new SysAuthorizeInfo
                {
                    Token    = context.Request.Cookies[GlobalKeysUtil.UserCookieName],
                    DeviceId = "WEB"
                };

                // todo appclient
            }

            CompleteAuthInfo(sysInfo, context);
            MemberShiper.SetAppAuthrizeInfo(sysInfo);

            await _next.Invoke(context);
        }
Exemple #3
0
        public static ResultMo <string> AppendToken(string appSource, long id, MemberAuthorizeType authType)
        {
            var secreateKeyRes = ApiSourceKeyUtil.GetAppSecretKey(appSource);

            if (!secreateKeyRes.IsSuccess)
            {
                return(secreateKeyRes.ConvertToResultOnly <string>());
            }

            var tokenCon = string.Concat(id, "|", (int)authType, "|", DateTime.Now.ToUtcSeconds());

            return(new ResultMo <string>(MemberShiper.GetToken(secreateKeyRes.Data, tokenCon)));
        }
Exemple #4
0
        public static ResultMo <(long id, int authType)> GetTokenDetail(string appSource, string tokenStr)
        {
            var secreateKeyRes = ApiSourceKeyUtil.GetAppSecretKey(appSource);

            if (!secreateKeyRes.IsSuccess)
            {
                return(secreateKeyRes.ConvertToResultOnly <(long id, int authType)>());
            }

            var tokenDetail = MemberShiper.GetTokenDetail(secreateKeyRes.Data, tokenStr);

            var tokenSplit = tokenDetail.Split('|');

            return(new ResultMo <ValueTuple <long, int> >((tokenSplit[0].ToInt64(), tokenSplit[1].ToInt32())));
        }
        public async Task Invoke(HttpContext context)
        {
            if (MemberShiper.AppAuthorize != null)
            {
                await _next.Invoke(context);

                return;
            }

            SysAuthorizeInfo sysInfo = null;
            //  这里是为了兼容App嵌套h5页面,使用App的授权信息
            string auticketStr = context.Request.Headers[authorizeTicket];

            if (!string.IsNullOrEmpty(auticketStr))
            {
                sysInfo = new SysAuthorizeInfo();
                sysInfo.FromSignData(auticketStr);

                var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource);
                if (!secretKeyRes.IsSuccess || !sysInfo.CheckSign(secretKeyRes.Data))
                {
                    context.Response.Redirect(string.Concat("/un/error?msg=", "不正确的应用来源!"));
                    return;
                }
                sysInfo.OriginAppSource = sysInfo.AppSource;
            }

            //  如果不是App访问,添加Web相关系统信息
            if (sysInfo == null)
            {
                sysInfo       = new SysAuthorizeInfo();
                sysInfo.Token = context.Request.Cookies["ct_id"];

                // todo appclient
                sysInfo.DeviceId = "WEB";
            }

            CompleteAuthInfo(sysInfo, context);
            MemberShiper.SetAppAuthrizeInfo(sysInfo);

            await _next.Invoke(context);
        }
        public async Task Invoke(HttpContext context)
        {
            string auticketStr = context.Request.Headers[GlobalKeysUtil.AuthorizeTicketName];

            if (string.IsNullOrEmpty(auticketStr))
            {
                await ResponseEnd(context, new ResultMo(ResultTypes.UnKnowSource, "未知应用来源"));

                return;
            }

            var sysInfo = new SysAuthorizeInfo();

            sysInfo.FromSignData(auticketStr);

            var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource);

            if (!secretKeyRes.IsSuccess())
            {
                await ResponseEnd(context, secretKeyRes);

                return;
            }

            if (!sysInfo.CheckSign(secretKeyRes.data))
            {
                await ResponseEnd(context, new ResultMo(ResultTypes.ParaError, "非法应用签名!"));

                return;
            }

            if (string.IsNullOrEmpty(sysInfo.IpAddress))
            {
                sysInfo.IpAddress = GetIpAddress(context);
            }

            MemberShiper.SetAppAuthrizeInfo(sysInfo);

            await _next.Invoke(context);
        }
Exemple #7
0
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            AppAuthorizeInfo sysInfo = null;
            var checkSign            = !context.Filters.Any(filter => filter is AllowNoSignAttribute);

            if (checkSign)
            {
                string auticketStr = context.HttpContext.Request.Headers[GlobalKeysUtil.AuthorizeTicketName];
                if (string.IsNullOrEmpty(auticketStr))
                {
                    context.Result = new JsonResult(new ResultMo(ResultTypes.UnKnowSource, "未知应用来源"));
                    return;
                }

                sysInfo = new AppAuthorizeInfo();
                sysInfo.FromTicket(auticketStr);

                var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource, sysInfo.TenantId);
                if (!secretKeyRes.IsSuccess())
                {
                    context.Result = new JsonResult(secretKeyRes);
                    return;
                }

                if (!sysInfo.CheckSign(secretKeyRes.data))
                {
                    context.Result = new JsonResult(new ResultMo(ResultTypes.ParaError, "非法应用签名!"));
                    return;
                }
            }

            if (sysInfo == null)
            {
                sysInfo = new AppAuthorizeInfo();
            }

            SetSystemAuthorizeInfo(sysInfo, context);
            MemberShiper.SetAppAuthrizeInfo(sysInfo);
        }
        public async Task Invoke(HttpContext context)
        {
            string auticketStr = context.Request.Headers[authorizeTicket];

            if (auticketStr == null)
            {
                await ResponseEnd(context, new ResultMo(ResultTypes.UnKnowSource, "未知应用来源"));

                return;
            }

            var sysInfo = new SysAuthorizeInfo();

            sysInfo.FromSignData(auticketStr);

            var secretKeyRes = ApiSourceKeyUtil.GetAppSecretKey(sysInfo.AppSource);

            if (!secretKeyRes.IsSuccess)
            {
                await ResponseEnd(context, secretKeyRes);

                return;
            }

            if (!sysInfo.CheckSign(secretKeyRes.Data))
            {
                await ResponseEnd(context, new ResultMo(ResultTypes.ParaNotMeet, "非法应用签名!"));

                return;
            }

            CompleteAuthInfo(sysInfo, context);
            MemberShiper.SetAppAuthrizeInfo(sysInfo);

            await _next.Invoke(context);
        }