diff --git a/src/WMS.Web.Api/Controllers/TestController.cs b/src/WMS.Web.Api/Controllers/TestController.cs index 5c7c64e2..98ffbc6c 100644 --- a/src/WMS.Web.Api/Controllers/TestController.cs +++ b/src/WMS.Web.Api/Controllers/TestController.cs @@ -19,6 +19,8 @@ using WMS.Web.Domain.Infrastructure; using WMS.Web.Domain.IService; using WMS.Web.Domain.IService.Public; using Microsoft.Extensions.Hosting; +using WMS.Web.Domain.Options; +using Microsoft.Extensions.Options; namespace WMS.Web.Api.Controllers { @@ -38,12 +40,14 @@ namespace WMS.Web.Api.Controllers private readonly ITakeStockRepositories _takeStockRepositories; private readonly IOutStockService _outStockService; private readonly IWebHostEnvironment _env; + private readonly AppOptions _options; public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories, IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService, - IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, + IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions options, ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService, IWebHostEnvironment env) { + _options = options?.Value; _boxInventoryRepositories = boxInventoryRepositories; this._erpService = erpService; this._inStockTaskService = inStockTaskService; @@ -318,5 +322,17 @@ namespace WMS.Web.Api.Controllers return result; } + + /// + /// 测试-接口是否正常 + /// + /// + [HttpGet] + [Route("lst")] + public string Lst() + { + var successStr = "tongfei test lst->数据库链接地址:" + _options.DBConnectionString+",单点项目链接地址:"+_options.SingleBaseUrl; + return successStr; + } } } diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml index da61c12a..925f2635 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Api.xml @@ -614,5 +614,11 @@ + + + 测试-接口是否正常 + + + diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml index e6c11aed..89abcd52 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Core.xml @@ -3552,6 +3552,21 @@ + + + + + + + + + + + + + + + 登录后:请求相关全部信息对象 diff --git a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml index 92a2f4c6..5bc6e119 100644 --- a/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml +++ b/src/WMS.Web.Api/wwwroot/WMS.Web.Domain.xml @@ -3226,6 +3226,14 @@ + + + 刷新token + + + + + 单点退出通知token失效 @@ -4836,6 +4844,14 @@ + + + 刷新token + + + + + 单点退出通知token失效 diff --git a/src/WMS.Web.Core/Dto/Login/LoginRequest.cs b/src/WMS.Web.Core/Dto/Login/LoginRequest.cs index 9ee94226..d3382f3e 100644 --- a/src/WMS.Web.Core/Dto/Login/LoginRequest.cs +++ b/src/WMS.Web.Core/Dto/Login/LoginRequest.cs @@ -61,4 +61,26 @@ namespace WMS.Web.Core.Dto.Login public string Scope { get; set; } } + + public class LoginAuthorizeRefreshTokenRequest + { + /// + /// + /// + public string ClientId { get; set; } + + /// + /// + /// + public string ClientSecret { get; set; } + + /// + /// + /// + public string GrantType { get; set; } + + public string RefreshToken { get; set; } + + public string Scope { get; set; } + } } diff --git a/src/WMS.Web.Core/Help/HttpClientHelp.cs b/src/WMS.Web.Core/Help/HttpClientHelp.cs index b58b1cdb..4bceedb3 100644 --- a/src/WMS.Web.Core/Help/HttpClientHelp.cs +++ b/src/WMS.Web.Core/Help/HttpClientHelp.cs @@ -143,6 +143,35 @@ namespace WMS.Web.Core.Help } + public string PostHttp(string url, LoginAuthorizeRefreshTokenRequest reqData) + { + var str = string.Format("client_id={0}&client_secret={1}&grant_type={2}&refresh_token={3}&scope={4}", + reqData.ClientId, reqData.ClientSecret, reqData.GrantType, reqData.RefreshToken, reqData.Scope); + ASCIIEncoding encoding = new ASCIIEncoding(); + byte[] byte1 = encoding.GetBytes(str); + HttpContent httpContent = new StringContent(str); + httpContent.Headers.Expires = DateTime.Now; + httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); + httpContent.Headers.ContentLength = byte1.Length; + httpContent.Headers.ContentType.CharSet = "utf-8"; + HttpClient httpClient = new HttpClient(); + httpClient.BaseAddress = new Uri(url); + httpClient.Timeout = new TimeSpan(0, 0, 10); + HttpResponseMessage response = httpClient.PostAsync(url, httpContent).Result; + if (response.IsSuccessStatusCode) + { + var resData = response.Content.ReadAsStringAsync().Result; + return resData; + + } + else + { + var resData = response.Content.ReadAsStringAsync().Result; + return resData; + } + + } + public string GetHttpOut(string url, LoginOutAuthorizeRequest reqData) { try diff --git a/src/WMS.Web.Domain/IService/Public/ILoginService.cs b/src/WMS.Web.Domain/IService/Public/ILoginService.cs index 0e88d213..750c6abd 100644 --- a/src/WMS.Web.Domain/IService/Public/ILoginService.cs +++ b/src/WMS.Web.Domain/IService/Public/ILoginService.cs @@ -66,6 +66,14 @@ namespace WMS.Web.Domain.IService.Public /// Task> RefreshToken(string OldToken, string RefreshToken); + /// + /// 刷新token + /// + /// + /// + /// + Task> RefreshTokenNew(string Token, string RefreshToken); + /// /// 单点退出通知token失效 /// diff --git a/src/WMS.Web.Domain/Services/Public/LoginService.cs b/src/WMS.Web.Domain/Services/Public/LoginService.cs index de354706..abfd9bcb 100644 --- a/src/WMS.Web.Domain/Services/Public/LoginService.cs +++ b/src/WMS.Web.Domain/Services/Public/LoginService.cs @@ -565,6 +565,57 @@ namespace WMS.Web.Domain.Services.Public } } + /// + /// 刷新token + /// + /// + /// + /// + public async Task> RefreshTokenNew(string Token, string RefreshToken) + { + + //1.根据旧token 找到登录对象 + var loginInfo = _redisClientService.GetStringKey($"wms_login_{Token}"); + var reqData = new LoginAuthorizeRefreshTokenRequest(); + reqData.ClientId = _soaOptions.AppId; + reqData.ClientSecret = _soaOptions.AppSecret; + reqData.GrantType = "refresh_token"; + reqData.RefreshToken = RefreshToken; + reqData.Scope = "credentials"; + string result = _httpClientHelp.PostHttp(_soaOptions.Url_V3 + "/uc/authorize", reqData); + var jObject = JsonObject.Parse(result); + + LoginInDto r = new LoginInDto(); + r.UserInfo = new UserInfoDto(); + r.TokenInfo = new AccessTokenDto(); + + if (jObject["code"] == 0) + { + string datajson = jObject["data"].ToString(); + var _loginDto = JsonConvert.DeserializeObject(datajson); + + r.UserInfo = loginInfo.UserInfo; + r.SignedIn = true; + var token = await CreateToken(loginInfo.UserInfo, _loginDto, Token); + r.TokenInfo = token; + loginInfo.TokenInfo = token; + _logger.LogInformation("RefreshToken:我在刷新登录:刷新后的过期时间-1>" + token.Expired.ToString()); + var ops_login_time = token.Expired.AddDays(1) - DateTime.Now;//用于正式 + _redisClientService.SetStringKey($"wms_login_{token.Token}", loginInfo, ops_login_time); + _logger.LogInformation("RefreshToken:我在刷新登录:刷新后的过期时间-小时->" + ops_login_time.Hours); + return Result.ReSuccess(r); + } + else + { + //失败了1:就把登录的token清除 2: ucid添加到黑名单 + var time = new TimeSpan(r.TokenInfo.Expired.Day, r.TokenInfo.Expired.Hour, r.TokenInfo.Expired.Minute, r.TokenInfo.Expired.Second, r.TokenInfo.Expired.Millisecond); + _redisClientService.SetStringKey($"wms_black_token_{r.UserInfo.UcId}", r.TokenInfo.Token, time); + this.RemoveLoginInfo(r.TokenInfo.Token); + r.SignedIn = false; + return Result.ReFailure(jObject["errmsg"], jObject["errno"]); + } + } + /// /// 单点退出通知token失效 /// diff --git a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs index c1641de0..34ec2677 100644 --- a/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs +++ b/src/WMS.Web.Repositories/DependencyInjection/AuthorizationTokenSecurityPolicy.cs @@ -131,11 +131,12 @@ namespace WMS.Web.Repositories.DependencyInjection UcId = logininfo.UserInfo.UcId.ToString(), SessionId = logininfo.UserInfo.SeesionId, Token = logininfo.TokenInfo.Token, + RefreshToken=logininfo.TokenInfo.RefreshToken, AccessToken = logininfo.TokenInfo.PhpToken, ExpiresIn = logininfo.TokenInfo.Expired }; - var res = await loginService.LoginOutAsync(dto); + var res = await loginService.LoginOut(dto); return; } } @@ -165,7 +166,7 @@ namespace WMS.Web.Repositories.DependencyInjection /// private bool RefreshToken(string OldToken, string RefreshToken, ILoginService _loginService) { - var res = _loginService.RefreshToken(OldToken, RefreshToken); + var res = _loginService.RefreshTokenNew(OldToken, RefreshToken); if (!res.Result.Success) return false; else