示例#1
0
        public async Task <string> Do(HttpRequest request)
        {
            //从request的querystring中获取sysname参数
            if (!request.Query.TryGetValue("sysname", out StringValues strSysName))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundSysNameQuerystringInCallbackRequest,
                    DefaultFormatting = "在第三方认证系统回调请求处理中,回调请求的Url中不包含sysname参数,回调请求的Url为{0}",
                    ReplaceParameters = new List <object>()
                    {
                        request.Path.Value
                    }
                };

                throw new UtilityException((int)Errors.NotFoundSysNameQuerystringInCallbackRequest, fragment);
            }

            //获取系统登录终结点
            var systemLoginEndpoint = await _systemLoginEndpointRepository.QueryByName(strSysName[0]);

            if (systemLoginEndpoint == null)
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundSystemLoginEndpointByName,
                    DefaultFormatting = "找不到名称为{0}的系统登录终结点",
                    ReplaceParameters = new List <object>()
                    {
                        strSysName[0]
                    }
                };

                throw new UtilityException((int)Errors.NotFoundSystemLoginEndpointByName, fragment);
            }


            var redirectUrl = await systemLoginEndpoint.GetCommonToken(request);

            return(redirectUrl);
        }
示例#2
0
        public async Task <string> Do(string systemLoginEndpointName, string authorizationEndpointName, string userName, string password)
        {
            var systemLoginEndpoint = await _systemLoginEndpointRepository.QueryByName(systemLoginEndpointName);

            if (systemLoginEndpoint == null)
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundSystemLoginEndpointByName,
                    DefaultFormatting = "找不到名称为{0}的系统登录终结点",
                    ReplaceParameters = new List <object>()
                    {
                        systemLoginEndpointName
                    }
                };

                throw new UtilityException((int)Errors.NotFoundSystemLoginEndpointByName, fragment);
            }

            var result = await systemLoginEndpoint.GetCommonToken(authorizationEndpointName, userName, password);

            return(result);
        }
示例#3
0
        public async Task <string> Do(string strToken)
        {
            //从strToken中分解出JWT的键值对,从键值对中获取SystemName
            //_securityService.ValidateJWT()

            var jwtResult = _securityService.GetPlayloadFromJWT(strToken);

            if (!jwtResult.ValidateResult.Result)
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.ExecuteAppJWTError,
                    DefaultFormatting = "在执行应用{0}时,处理的JWT{1}错误,错误原因{2}",
                    ReplaceParameters = new List <object>()
                    {
                        "MSLibrary.SystemToken.Application.AppRefreashCommonToken", strToken, jwtResult.ValidateResult.Description
                    }
                };

                //验证未通过,抛出异常
                throw new UtilityException((int)Errors.ExecuteAppJWTError, fragment);
            }



            Dictionary <string, string> jwtDict = jwtResult.Playload;

            if (!jwtDict.TryGetValue("SystemName", out string systemName))
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundKeyInCommonTokenJWT,
                    DefaultFormatting = "在通用令牌的JWT字符串{0}中,找不到名称为{1}的键",
                    ReplaceParameters = new List <object>()
                    {
                        strToken, "SystemName"
                    }
                };

                throw new UtilityException((int)Errors.NotFoundKeyInCommonTokenJWT, fragment);
            }

            //获取系统登录终结点
            var systemLoginEndpoint = await _systemLoginEndpointRepository.QueryByName(systemName);

            if (systemLoginEndpoint == null)
            {
                var fragment = new TextFragment()
                {
                    Code = TextCodes.NotFoundSystemLoginEndpointByName,
                    DefaultFormatting = "找不到名称为{0}的系统登录终结点",
                    ReplaceParameters = new List <object>()
                    {
                        systemName
                    }
                };

                throw new UtilityException((int)Errors.NotFoundSystemLoginEndpointByName, fragment);
            }
            //刷新令牌的JWT字符串
            return(await systemLoginEndpoint.RefreshToken(strToken));
        }
示例#4
0
        public async Task Do(List <string> strTokenList)
        {
            List <Exception> exList = new List <Exception>();

            foreach (var item in strTokenList)
            {
                try
                {
                    //从strToken中分解出JWT的键值对,从键值对中获取SystemName
                    var jwtResult = _securityService.GetPlayloadFromJWT(item);

                    if (!jwtResult.ValidateResult.Result)
                    {
                        var fragment = new TextFragment()
                        {
                            Code = TextCodes.ExecuteAppJWTError,
                            DefaultFormatting = "在执行应用{0}时,处理的JWT{1}错误,错误原因{2}",
                            ReplaceParameters = new List <object>()
                            {
                                "MSLibrary.SystemToken.Application.AppCommonTokenLogout", item, jwtResult.ValidateResult.Description
                            }
                        };

                        //验证未通过,抛出异常
                        throw new UtilityException((int)Errors.ExecuteAppJWTError, fragment);
                    }



                    Dictionary <string, string> jwtDict = jwtResult.Playload;
                    if (!jwtDict.TryGetValue("SystemName", out string systemName))
                    {
                        var fragment = new TextFragment()
                        {
                            Code = TextCodes.NotFoundKeyInCommonTokenJWT,
                            DefaultFormatting = "在通用令牌的JWT字符串{0}中,找不到名称为{1}的键",
                            ReplaceParameters = new List <object>()
                            {
                                item, "SystemName"
                            }
                        };

                        throw new UtilityException((int)Errors.NotFoundKeyInCommonTokenJWT, fragment);
                    }


                    //获取系统登录终结点
                    var systemLoginEndpoint = await _systemLoginEndpointRepository.QueryByName(systemName);

                    if (systemLoginEndpoint == null)
                    {
                        var fragment = new TextFragment()
                        {
                            Code = TextCodes.NotFoundSystemLoginEndpointByName,
                            DefaultFormatting = "找不到名称为{0}的系统登录终结点",
                            ReplaceParameters = new List <object>()
                            {
                                systemName
                            }
                        };

                        throw new UtilityException((int)Errors.NotFoundSystemLoginEndpointByName, fragment);
                    }

                    await systemLoginEndpoint.LogoutToken(item);
                }
                catch (Exception ex)
                {
                    exList.Add(ex);
                }
            }

            if (exList.Count > 0)
            {
                //记录日志

                throw exList[0];
            }
        }