单点登录-pc端使用v3版本
This commit is contained in:
@@ -32,7 +32,8 @@ namespace WMS.Web.Api.Controllers
|
|||||||
[Route("LoginIn")]
|
[Route("LoginIn")]
|
||||||
public async Task<Result<LoginInDto>> LoginIn([FromQuery] string code)
|
public async Task<Result<LoginInDto>> LoginIn([FromQuery] string code)
|
||||||
{
|
{
|
||||||
var result = await _loginService.GetUserInfoAsync(code);
|
//var result = await _loginService.GetUserInfoAsync(code);
|
||||||
|
var result = await _loginService.GetUserInfoByCode(code);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3537,6 +3537,21 @@
|
|||||||
|
|
||||||
</summary>
|
</summary>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeCodeRequest.ClientId">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeCodeRequest.ClientSecret">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
|
<member name="P:WMS.Web.Core.Dto.Login.LoginAuthorizeCodeRequest.GrantType">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
</member>
|
||||||
<member name="T:WMS.Web.Core.Dto.Login.LoginSingleRequest">
|
<member name="T:WMS.Web.Core.Dto.Login.LoginSingleRequest">
|
||||||
<summary>
|
<summary>
|
||||||
登录后:请求相关全部信息对象
|
登录后:请求相关全部信息对象
|
||||||
|
|||||||
@@ -3191,6 +3191,13 @@
|
|||||||
<param name="code"></param>
|
<param name="code"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.GetUserInfoByCode(System.String)">
|
||||||
|
<summary>
|
||||||
|
|
||||||
|
</summary>
|
||||||
|
<param name="code"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.GetUserInfo(System.String,System.String)">
|
<member name="M:WMS.Web.Domain.IService.Public.ILoginService.GetUserInfo(System.String,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取单点用户信息
|
获取单点用户信息
|
||||||
@@ -4788,6 +4795,13 @@
|
|||||||
<param name="code"></param>
|
<param name="code"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:WMS.Web.Domain.Services.Public.LoginService.GetUserInfoByCode(System.String)">
|
||||||
|
<summary>
|
||||||
|
获取单点登录信息
|
||||||
|
</summary>
|
||||||
|
<param name="code"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:WMS.Web.Domain.Services.Public.LoginService.GetUserInfo(System.String,System.String)">
|
<member name="M:WMS.Web.Domain.Services.Public.LoginService.GetUserInfo(System.String,System.String)">
|
||||||
<summary>
|
<summary>
|
||||||
获取单点用户信息
|
获取单点用户信息
|
||||||
|
|||||||
@@ -39,4 +39,26 @@ namespace WMS.Web.Core.Dto.Login
|
|||||||
|
|
||||||
public string Scope { get; set; }
|
public string Scope { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class LoginAuthorizeCodeRequest
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string ClientId { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string ClientSecret { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public string GrantType { get; set; }
|
||||||
|
|
||||||
|
public string Code { get; set; }
|
||||||
|
|
||||||
|
public string Scope { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -114,6 +114,35 @@ namespace WMS.Web.Core.Help
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public string PostHttp(string url, LoginAuthorizeCodeRequest reqData)
|
||||||
|
{
|
||||||
|
var str = string.Format("client_id={0}&client_secret={1}&grant_type={2}&code={3}&scope={4}",
|
||||||
|
reqData.ClientId, reqData.ClientSecret, reqData.GrantType, reqData.Code,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 PostHttpNoData(string url, string cookieValue = "")
|
public string PostHttpNoData(string url, string cookieValue = "")
|
||||||
{
|
{
|
||||||
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
|
||||||
|
|||||||
@@ -30,6 +30,13 @@ namespace WMS.Web.Domain.IService.Public
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
Task<Result<LoginInDto>> GetUserInfoAsync(string code);
|
Task<Result<LoginInDto>> GetUserInfoAsync(string code);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="code"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
Task<Result<LoginInDto>> GetUserInfoByCode(string code);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取单点用户信息
|
/// 获取单点用户信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -216,6 +216,114 @@ namespace WMS.Web.Domain.Services.Public
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取单点登录信息
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="code"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public async Task<Result<LoginInDto>> GetUserInfoByCode(string code)
|
||||||
|
{
|
||||||
|
var reqData = new LoginAuthorizeCodeRequest();
|
||||||
|
reqData.ClientId = _soaOptions.AppId;
|
||||||
|
reqData.ClientSecret = _soaOptions.AppSecret;
|
||||||
|
reqData.GrantType = "authorization_code";
|
||||||
|
reqData.Code = code;
|
||||||
|
reqData.Scope = "credentials";
|
||||||
|
|
||||||
|
//这个是登录的时候给前端验证的token,以及传给php单点那边的一个session值,用于单点退出时,通知ops退出
|
||||||
|
string NewToken = Guid.NewGuid().ToString("N");
|
||||||
|
try
|
||||||
|
{
|
||||||
|
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();
|
||||||
|
var login_result = jObject["code"] == 0 ? "成功" : "失败";
|
||||||
|
|
||||||
|
if (jObject["code"] == 0)
|
||||||
|
{
|
||||||
|
string datajson = jObject["data"].ToString();
|
||||||
|
var _loginDto = JsonConvert.DeserializeObject<LoginTempV2Dto>(datajson);
|
||||||
|
|
||||||
|
#region 解码
|
||||||
|
string enptStr = _loginDto.encrypted_data;
|
||||||
|
List<string> enptlist = enptStr.Trim().Split(',').ToList();
|
||||||
|
string str = RSA.DecryptSection(_soaOptions.PrivateKey, enptlist);
|
||||||
|
var entity = JsonConvert.DeserializeObject<LoginJsonTokenV3TempDto>(str);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
//映射登录信息
|
||||||
|
var userInfo_v3 = _mapper.Map<UserInfoV3Dto>(entity);
|
||||||
|
_logger.LogInformation($"登录信息:用户ID->{entity.id}");
|
||||||
|
//HTTP请求获取登录信息:人员,客户,供应商,公司
|
||||||
|
var loginRequest = new LoginSingleRequest()
|
||||||
|
{
|
||||||
|
UserId = entity.id,
|
||||||
|
|
||||||
|
};
|
||||||
|
var loginResponse_result = await _singleDataService.GetSingleDataNoCache<Result<SingleDataResponse>, LoginSingleRequest, SingleLoginAction>
|
||||||
|
(loginRequest, SingleLoginAction.Staff, type: SingleControllerType.Login);
|
||||||
|
|
||||||
|
//绑定返回对象的登录信息
|
||||||
|
var staffName = "Null";
|
||||||
|
var token = await CreateToken(r.UserInfo, _loginDto, NewToken);
|
||||||
|
r.TokenInfo = token;
|
||||||
|
if (loginResponse_result.Success && loginResponse_result.Data != null)
|
||||||
|
{
|
||||||
|
var loginResponse = loginResponse_result.Data;
|
||||||
|
if (loginResponse != null)
|
||||||
|
{
|
||||||
|
r.UserInfo.StaffId = loginResponse.Id;
|
||||||
|
staffName = loginResponse.Name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.UserInfo.CompanyId = userInfo_v3.Company.Id;
|
||||||
|
r.UserInfo.CompanyName = userInfo_v3.Company.Name;
|
||||||
|
r.UserInfo.UcId = userInfo_v3.Id;
|
||||||
|
r.UserInfo.SeesionId = "";//app和程序类型登录授权没有这个字段
|
||||||
|
r.UserInfo.Nickname = userInfo_v3.Nickname;
|
||||||
|
r.UserInfo.Mobile = userInfo_v3.Mobile;
|
||||||
|
r.UserInfo.Identity = userInfo_v3.Identity;
|
||||||
|
r.UserInfo.OrgId = entity.orgs.FirstOrDefault()?.org_id;
|
||||||
|
r.UserInfo.CustomerId = null;
|
||||||
|
r.UserInfo.SupplierId = null;
|
||||||
|
r.SignedIn = true;
|
||||||
|
_logger.LogInformation($"登录信息:用户人员信息->{staffName}({r.UserInfo.StaffId}),公司名称->{r.UserInfo.CompanyName}");
|
||||||
|
|
||||||
|
//登录后缓存登录的用户信息和token信息
|
||||||
|
var loginInfo = new LoginInDto();
|
||||||
|
loginInfo.UserInfo = r.UserInfo;
|
||||||
|
loginInfo.TokenInfo = token;
|
||||||
|
|
||||||
|
var ops_login_time = token.Expired.AddDays(1) - DateTime.Now;//用于正式
|
||||||
|
_redisClientService.SetStringKey<LoginInDto>($"wms_login_{token.Token}", loginInfo, ops_login_time);
|
||||||
|
|
||||||
|
//登录成功移出对应的用户token黑名单:应为新的token产生,移除登录的信息
|
||||||
|
string blacktoken = _redisClientService.GetStringKey($"wms_black_token_{r.UserInfo.UcId}");
|
||||||
|
if (!string.IsNullOrEmpty(blacktoken))
|
||||||
|
{
|
||||||
|
this.RemoveLoginInfo(blacktoken);
|
||||||
|
_redisClientService.RemoveStringKey($"wms_black_token_{r.UserInfo.UcId}");
|
||||||
|
}
|
||||||
|
if (r == null || r.UserInfo == null || r.TokenInfo == null)
|
||||||
|
return Result<LoginInDto>.ReFailure("授权失败,请重新登录", 401);
|
||||||
|
return Result<LoginInDto>.ReSuccess(r);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var errno_text = "登录失败:" + jObject["message"];
|
||||||
|
_logger.LogInformation("登陆失败:" + errno_text);
|
||||||
|
return Result<LoginInDto>.ReFailure(errno_text, 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogInformation("登录错误信息:" + ex.Message);
|
||||||
|
return Result<LoginInDto>.ReFailure("授权失败,请重新登录", 401);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取单点用户信息
|
/// 获取单点用户信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user