刷新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.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<AppOptions> 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;
|
||||
|
||||
}
|
||||
|
||||
/// <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>
|
||||
<returns></returns>
|
||||
</member>
|
||||
<member name="M:WMS.Web.Api.Controllers.TestController.Lst">
|
||||
<summary>
|
||||
测试-接口是否正常
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</member>
|
||||
</members>
|
||||
</doc>
|
||||
|
||||
@@ -3552,6 +3552,21 @@
|
||||
|
||||
</summary>
|
||||
</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">
|
||||
<summary>
|
||||
登录后:请求相关全部信息对象
|
||||
|
||||
@@ -3226,6 +3226,14 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</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)">
|
||||
<summary>
|
||||
单点退出通知token失效
|
||||
@@ -4836,6 +4844,14 @@
|
||||
</summary>
|
||||
<returns></returns>
|
||||
</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)">
|
||||
<summary>
|
||||
单点退出通知token失效
|
||||
|
||||
@@ -61,4 +61,26 @@ namespace WMS.Web.Core.Dto.Login
|
||||
|
||||
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)
|
||||
{
|
||||
try
|
||||
|
||||
@@ -66,6 +66,14 @@ namespace WMS.Web.Domain.IService.Public
|
||||
/// <returns></returns>
|
||||
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>
|
||||
/// 单点退出通知token失效
|
||||
/// </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>
|
||||
/// 单点退出通知token失效
|
||||
/// </summary>
|
||||
|
||||
@@ -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
|
||||
/// <returns></returns>
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user