刷新token方法优化
This commit is contained in:
@@ -19,6 +19,8 @@ using WMS.Web.Domain.Infrastructure;
|
|||||||
using WMS.Web.Domain.IService;
|
using WMS.Web.Domain.IService;
|
||||||
using WMS.Web.Domain.IService.Public;
|
using WMS.Web.Domain.IService.Public;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
using WMS.Web.Domain.Options;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
|
||||||
namespace WMS.Web.Api.Controllers
|
namespace WMS.Web.Api.Controllers
|
||||||
{
|
{
|
||||||
@@ -38,12 +40,14 @@ namespace WMS.Web.Api.Controllers
|
|||||||
private readonly ITakeStockRepositories _takeStockRepositories;
|
private readonly ITakeStockRepositories _takeStockRepositories;
|
||||||
private readonly IOutStockService _outStockService;
|
private readonly IOutStockService _outStockService;
|
||||||
private readonly IWebHostEnvironment _env;
|
private readonly IWebHostEnvironment _env;
|
||||||
|
private readonly AppOptions _options;
|
||||||
public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories,
|
public TestController(IErpService erpService, IInStockTaskService inStockTaskService, IBoxInventoryRepositories boxInventoryRepositories,
|
||||||
IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService,
|
IBasicsRepositories transactionRepositories, IOpsService opsService, IBoxService boxService,
|
||||||
IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService,
|
IOutStockTaskRepositories outStockTaskRepositories, IOutStockTaskService outStockTaskService, IOptions<AppOptions> options,
|
||||||
ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService,
|
ITakeStockService takeStockService, ITakeStockRepositories takeStockRepositories, IOutStockService outStockService,
|
||||||
IWebHostEnvironment env)
|
IWebHostEnvironment env)
|
||||||
{
|
{
|
||||||
|
_options = options?.Value;
|
||||||
_boxInventoryRepositories = boxInventoryRepositories;
|
_boxInventoryRepositories = boxInventoryRepositories;
|
||||||
this._erpService = erpService;
|
this._erpService = erpService;
|
||||||
this._inStockTaskService = inStockTaskService;
|
this._inStockTaskService = inStockTaskService;
|
||||||
@@ -318,5 +322,17 @@ namespace WMS.Web.Api.Controllers
|
|||||||
return result;
|
return result;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 测试-接口是否正常
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpGet]
|
||||||
|
[Route("lst")]
|
||||||
|
public string Lst()
|
||||||
|
{
|
||||||
|
var successStr = "tongfei test lst->数据库链接地址:" + _options.DBConnectionString+",单点项目链接地址:"+_options.SingleBaseUrl;
|
||||||
|
return successStr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -614,5 +614,11 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Api.Controllers.TestController.Lst">
|
||||||
|
<summary>
|
||||||
|
测试-接口是否正常
|
||||||
|
</summary>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
</members>
|
</members>
|
||||||
</doc>
|
</doc>
|
||||||
|
|||||||
@@ -3552,6 +3552,21 @@
|
|||||||
|
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeRefreshTokenRequest.ClientId">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeRefreshTokenRequest.ClientSecret">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeRefreshTokenRequest.GrantType">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:WMS.Web.Core.Dto.Login.LoginSingleRequest">
|
<member name="T:WMS.Web.Core.Dto.Login.LoginSingleRequest">
|
||||||
<summary>
|
<summary>
|
||||||
登录后:请求相关全部信息对象
|
登录后:请求相关全部信息对象
|
||||||
|
|||||||
@@ -3226,6 +3226,14 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.RefreshTokenNew(System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
刷新token
|
||||||
|
</summary>
|
||||||
|
<param name="Token"></param>
|
||||||
|
<param name="RefreshToken"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.LoginOutSingleAsync(System.Int32,System.String,System.Int32)">
|
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.LoginOutSingleAsync(System.Int32,System.String,System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
单点退出通知token失效
|
单点退出通知token失效
|
||||||
@@ -4836,6 +4844,14 @@
|
|||||||
</summary>
|
</summary>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.Services.Public.LoginService.RefreshTokenNew(System.String,System.String)">
|
||||||
|
<summary>
|
||||||
|
刷新token
|
||||||
|
</summary>
|
||||||
|
<param name="Token"></param>
|
||||||
|
<param name="RefreshToken"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WMS.Web.Domain.Services.Public.LoginService.LoginOutSingleAsync(System.Int32,System.String,System.Int32)">
|
<member name="M:WMS.Web.Domain.Services.Public.LoginService.LoginOutSingleAsync(System.Int32,System.String,System.Int32)">
|
||||||
<summary>
|
<summary>
|
||||||
单点退出通知token失效
|
单点退出通知token失效
|
||||||
|
|||||||
@@ -61,4 +61,26 @@ namespace WMS.Web.Core.Dto.Login
|
|||||||
|
|
||||||
public string Scope { get; set; }
|
public string Scope { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class LoginAuthorizeRefreshTokenRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string ClientId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string ClientSecret { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string GrantType { get; set; }
|
||||||
|
|
||||||
|
public string RefreshToken { get; set; }
|
||||||
|
|
||||||
|
public string Scope { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
public string GetHttpOut(string url, LoginOutAuthorizeRequest reqData)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -66,6 +66,14 @@ namespace WMS.Web.Domain.IService.Public
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<Result<LoginInDto>> RefreshToken(string OldToken, string RefreshToken);
|
Task<Result<LoginInDto>> RefreshToken(string OldToken, string RefreshToken);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新token
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Token"></param>
|
||||||
|
/// <param name="RefreshToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<Result<LoginInDto>> RefreshTokenNew(string Token, string RefreshToken);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 单点退出通知token失效
|
/// 单点退出通知token失效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -565,6 +565,57 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 刷新token
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="Token"></param>
|
||||||
|
/// <param name="RefreshToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Result<LoginInDto>> RefreshTokenNew(string Token, string RefreshToken)
|
||||||
|
{
|
||||||
|
|
||||||
|
//1.根据旧token 找到登录对象
|
||||||
|
var loginInfo = _redisClientService.GetStringKey<LoginInDto>($"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<LoginTempV2Dto>(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<LoginInDto>($"wms_login_{token.Token}", loginInfo, ops_login_time);
|
||||||
|
_logger.LogInformation("RefreshToken:我在刷新登录:刷新后的过期时间-小时->" + ops_login_time.Hours);
|
||||||
|
return Result<LoginInDto>.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<LoginInDto>.ReFailure(jObject["errmsg"], jObject["errno"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 单点退出通知token失效
|
/// 单点退出通知token失效
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -131,11 +131,12 @@ namespace WMS.Web.Repositories.DependencyInjection
|
|||||||
UcId = logininfo.UserInfo.UcId.ToString(),
|
UcId = logininfo.UserInfo.UcId.ToString(),
|
||||||
SessionId = logininfo.UserInfo.SeesionId,
|
SessionId = logininfo.UserInfo.SeesionId,
|
||||||
Token = logininfo.TokenInfo.Token,
|
Token = logininfo.TokenInfo.Token,
|
||||||
|
RefreshToken=logininfo.TokenInfo.RefreshToken,
|
||||||
AccessToken = logininfo.TokenInfo.PhpToken,
|
AccessToken = logininfo.TokenInfo.PhpToken,
|
||||||
ExpiresIn = logininfo.TokenInfo.Expired
|
ExpiresIn = logininfo.TokenInfo.Expired
|
||||||
|
|
||||||
};
|
};
|
||||||
var res = await loginService.LoginOutAsync(dto);
|
var res = await loginService.LoginOut(dto);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -165,7 +166,7 @@ namespace WMS.Web.Repositories.DependencyInjection
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private bool RefreshToken(string OldToken, string RefreshToken, ILoginService _loginService)
|
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)
|
if (!res.Result.Success)
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
|
|||||||
Reference in New Issue
Block a user