예제 #1
0
파일: TokenApi.cs 프로젝트: luoBoB/mygit
        public ReturnResult <ApiToken> RefreshAccessToken(int appId, string refreshToken)
        {
            var rst = new ReturnResult <ApiToken>();

            //根据AppId获取对应的应用服务器地址
            var appRst = new AppsBll().GetOne(new Apps()
            {
                Id = appId
            });

            if (appRst.Result)
            {
                var apps = appRst.Data;
                WebHeaderCollection headers = new WebHeaderCollection();
                headers.Add("app_key", apps.AppId);
                var tokenRst = GetDataFromAPI <TokenResult>(new RequestPara()
                {
                    ServerUrl   = apps.AppServer,
                    ApiPath     = "/iocm/app/sec/v1.1.0/refreshToken",
                    Method      = HttpClientActionMethod.POST,
                    ContentType = "application/json",
                    Headers     = headers,
                    PostData    = JsonHelper.Instance.Serialize(new
                    {
                        appId  = apps.AppId,
                        secret = apps.Secret,
                        refreshToken
                    }),
                    CertFile     = ApiConfig.CertFile,
                    CertPassword = ApiConfig.CertPassword
                });

                if (tokenRst.Result && !string.IsNullOrEmpty(tokenRst.Data.accessToken))
                {
                    //添加到数据库
                    var model = new ApiToken()
                    {
                        AppId                   = appId,
                        AccessToken             = tokenRst.Data.accessToken,
                        AccessTokenCreateTime   = DateTime.Now.AddMinutes(-2),
                        AccessTokenExpiresIn    = tokenRst.Data.expiresIn,
                        RefreshToken            = tokenRst.Data.refreshToken,
                        RefreshTokenExpiresTime = DateTime.Now.AddDays(1)
                    };
                    var bll    = new ApiTokenBll();
                    var addRst = bll.Update(model);
                    if (addRst.Result)
                    {
                        //刷新成功
                        rst.Result  = true;
                        rst.Data    = model;
                        rst.Message = tokenRst.Message;
                    }
                }
            }

            return(rst);
        }