예제 #1
0
        public async Task <IActionResult> RefreshToken(string token)
        {
            CommonResult  result        = new CommonResult();
            TokenProvider tokenProvider = new TokenProvider(_jwtModel);

            if (!string.IsNullOrEmpty(token))
            {
                JwtSecurityToken jwtToken = new JwtSecurityTokenHandler().ReadJwtToken(token);
                #if DEBUG
                Log4NetHelper.Debug(jwtToken.ToJson());
                #endif
                if (jwtToken != null)
                {
                    //根据应用获取token
                    if (jwtToken.Subject == GrantType.ClientCredentials)
                    {
                        TokenResult tresult   = new TokenResult();
                        var         claimlist = jwtToken?.Payload.Claims as List <Claim>;
                        string      strHost   = Request.Host.ToString();
                        APP         app       = _iAPPService.GetAPP(claimlist[0].Value);
                        if (app == null)
                        {
                            result.ErrCode = "40001";
                            result.ErrMsg  = ErrCode.err40001;
                        }
                        else
                        {
                            if (!app.RequestUrl.Contains(strHost) && !strHost.Contains("localhost"))
                            {
                                result.ErrCode = "40002";
                                result.ErrMsg  = ErrCode.err40002 + ",你当前请求主机:" + strHost;
                            }
                            else
                            {
                                TokenResult tokenResult = tokenProvider.GenerateToken(GrantType.ClientCredentials, app.AppId, app.AppSecret);
                                result.ResData = tokenResult;
                                result.ErrCode = "0";
                                result.Success = true;
                            }
                        }
                    }
                    // 用户账号密码登录获取token类型
                    if (jwtToken.Subject == GrantType.Password)
                    {
                        var  claimlist = jwtToken?.Payload.Claims as List <Claim>;
                        User user      = await userService.GetByUserName(claimlist[2].Value);

                        TokenResult tokenResult = tokenProvider.LoginToken(user, claimlist[0].Value);
                        result.ResData = tokenResult;
                        result.ErrCode = "0";
                        result.Success = true;
                    }
                }
                else
                {
                    result.ErrMsg  = ErrCode.err40004;
                    result.ErrCode = "40004";
                }
            }
            else
            {
                result.ErrMsg  = ErrCode.err40004;
                result.ErrCode = "40004";
            }
            return(ToJsonContent(result));
        }