黄贺彬 6 vuotta sitten
vanhempi
commit
0da8921edf

+ 1 - 1
TEAMModelOS.Model/Common/Dtos/LoginResult.cs

@@ -8,6 +8,6 @@ namespace TEAMModelOS.Model.Common.Dtos
     public class LoginResult
     {
         public JwtResponse JwtToken { get; set; }
-        public bool CheckTicket { get; set; }
+        public bool CheckTicket { get; set; } = false;
     }
 }

+ 1 - 0
TEAMModelOS.SDK/Extension/JwtAuth/JwtHelper/JwtHelper.cs

@@ -73,6 +73,7 @@ namespace TEAMModelOS.SDK.Extension.JwtAuth.JwtHelper
             JwtSecurityToken jwtToken = jwtHandler.ReadJwtToken(jwtStr);
             ClaimModel claimModel = new ClaimModel();
             object role = new object();
+            claimModel.Claim = jwtToken.Claims.ToDictionary(claim => claim.Type, claim => claim.Value);
             claimModel.Claims = jwtToken.Claims.ToList();
             jwtToken.Payload.TryGetValue("role", out role);
             if(role!=null)claimModel.Roles=role.ToString().Split(",").ToList();

+ 6 - 0
TEAMModelOS.SDK/Extension/JwtAuth/Models/ClaimModel.cs

@@ -8,14 +8,20 @@ namespace TEAMModelOS.SDK.Extension.JwtAuth.Models
     {
         public ClaimModel() {
             Claims = new List<Claim>();
+            Claim = new Dictionary<string, string>();
             Roles = new List<string>();
         }
 
+
         /// <summary>
         /// 用户身份信息
         /// </summary>
         public List<Claim> Claims { get; set; }
         /// <summary>
+        /// 用户身份信息
+        /// </summary>
+        public Dictionary<string ,string> Claim { get; set; }
+        /// <summary>
         /// 用户角色信息
         /// </summary>
         public List<string> Roles { get; set; }

+ 5 - 6
TEAMModelOS.SDK/Helper/Network/HttpHelper/HttpContextHelper.cs

@@ -98,9 +98,7 @@ namespace TEAMModelOS.SDK.Helper.Network.HttpHelper
             return aktoken;
         }
         public static string GetLoginUser(IHttpContextAccessor httpContextAccessor) {
-
             var tokenHeader = "";
-
             HttpRequest request = httpContextAccessor.HttpContext.Request;
             if (request.Query.ContainsKey(Constants.ACCESS_TOKEN))
             {
@@ -112,11 +110,12 @@ namespace TEAMModelOS.SDK.Helper.Network.HttpHelper
                 tokenHeader = request.Headers[Constants.AUTHORIZATION];
                 tokenHeader = tokenHeader.ToString().Substring("Bearer ".Length).Trim();
             }
+            if (string.IsNullOrEmpty(tokenHeader)) {
+                return null;
+            }
             ClaimModel claimModel = JwtHelper.SerializeJWT(tokenHeader);
-
-            List<Claim> claims = claimModel.Claims; 
-            //foreach()
-            return null; 
+            claimModel.Claim.TryGetValue("id", out var id);
+            return id; 
         }
     }
 }

+ 14 - 12
TEAMModelOS.Service/Common/Implements/LoginInfoService.cs

@@ -55,6 +55,7 @@ namespace TEAMModelOS.Service.Common.Implements
                     JwtResponse token = CreateJwtToken(login);
                     result.JwtToken = token;
                     login.Token = token.Access_token;
+                    result.JwtToken.Scope = login.Scope;
                     await _repository.Update<LoginInfo>(login);
                     return result;
                 }
@@ -66,7 +67,11 @@ namespace TEAMModelOS.Service.Common.Implements
                 {
                     method = "UserInfo"
                 };
-                Dictionary<string, object> ticket = new Dictionary<string, object>
+                if (string.IsNullOrEmpty(ticketInfo.Ticket)) {
+                    result.CheckTicket = false;
+                    return result;
+                }
+                    Dictionary<string, object> ticket = new Dictionary<string, object>
                 {
                     { "ticket", ticketInfo.Ticket }
                 };
@@ -103,6 +108,7 @@ namespace TEAMModelOS.Service.Common.Implements
                         user.CountryCode = response.result.countryCode;
                         JwtResponse jwtToken = CreateJwtToken(loginInfo);
                         loginInfo.Token = jwtToken.Access_token;
+                        loginInfo.Scope = jwtToken.Scope;
                         result.JwtToken = jwtToken;
                         await _repository.Save<LoginInfo>(loginInfo);
                         await _repository.SaveOrUpdate<TeamModelUser>(user);
@@ -124,18 +130,13 @@ namespace TEAMModelOS.Service.Common.Implements
             {
                 ClaimModel claimModel = JwtHelper.SerializeJWT(ticketInfo.Token);
 
-                foreach (Claim claim in claimModel.Claims)
+                var dateTime = DateTimeHelper.ConvertToTimeStamp10(DateTime.Now);
+                var expExt=claimModel.Claim.TryGetValue("exp",out var exp);
+                if (expExt==false || dateTime > long.Parse(exp))
                 {
-                    if ("exp".Equals(claim.Type))
-                    {
-                        var dateTime = DateTimeHelper.ConvertToTimeStamp10(DateTime.Now);
-                        var exp = claim.Value;
-                        if (dateTime > long.Parse(exp))
-                        {
-                            throw new BizException(401, "Unauthorized");
-                        }
-                    }
+                    throw new BizException(401, "Unauthorized");
                 }
+               
                 Dictionary<string, object> msp = new Dictionary<string, object>
                 {
                     { "Token", ticketInfo.Token }
@@ -179,7 +180,8 @@ namespace TEAMModelOS.Service.Common.Implements
             };
             model.Claims.Add(new Claim(JwtClaimTypes.Name, loginInfo.Name));
             model.Claims.Add(new Claim(JwtClaimTypes.Id, loginInfo.TeamModelId));
-            model.Claims.Add(new Claim(JwtClaimTypes.PhoneNumber, loginInfo.Phone));
+            ////保护隐私
+            //model.Claims.Add(new Claim(JwtClaimTypes.PhoneNumber, loginInfo.Phone));
             model.Roles.Add(role);
             JwtResponse jwtResponse = JwtHelper.IssueJWT(model, _options.Value);
             return jwtResponse;

+ 1 - 1
TEAMModelOS.Service/Syllabus/Implements/SyllabusService.cs

@@ -127,7 +127,7 @@ namespace TEAMModelOS.Service.Syllabus.Implements
         /// <returns></returns>
         public async Task<StandardTextbook> FindTextbooksByDict(Dictionary<string, object> dict) {
 
-           
+            
 
             Dictionary<string, object> parDict = new Dictionary<string, object>
             {

+ 6 - 1
TEAMModelOS/Controllers/Common/LoginController.cs

@@ -1,5 +1,6 @@
 using IdentityModel;
 using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.Extensions.Options;
 using Microsoft.IdentityModel.Tokens;
@@ -18,6 +19,7 @@ using TEAMModelOS.SDK.Extension.DataResult.JsonRpcResponse;
 using TEAMModelOS.SDK.Extension.JwtAuth.JwtHelper;
 using TEAMModelOS.SDK.Extension.JwtAuth.Models;
 using TEAMModelOS.SDK.Helper.Common.ValidateHelper;
+using TEAMModelOS.SDK.Helper.Network.HttpHelper;
 using TEAMModelOS.Service.Common.Interfaces;
 
 namespace TEAMModelOS.Controllers.Common
@@ -28,9 +30,11 @@ namespace TEAMModelOS.Controllers.Common
     {
         private ILoginInfoService _loginInfoService;
         public readonly IOptions<JwtSetting> _options;
-        public LoginController(ILoginInfoService loginInfoService , IOptions<JwtSetting> options) {
+        private IHttpContextAccessor _httpContextAccessor;
+        public LoginController(ILoginInfoService loginInfoService , IOptions<JwtSetting> options , IHttpContextAccessor httpContextAccessor) {
             _loginInfoService = loginInfoService;
             _options = options;
+            _httpContextAccessor = httpContextAccessor;
         }
 
         /// <summary>
@@ -70,6 +74,7 @@ namespace TEAMModelOS.Controllers.Common
         [AllowAnonymous]
         public async Task<BaseJosnRPCResponse> Login(JosnRPCRequest<Dictionary<string,object>> request)
         {
+            string id = HttpContextHelper.GetLoginUser(_httpContextAccessor);
             JsonRPCResponseBuilder responseBuilder = JsonRPCResponseBuilder.custom();
             responseBuilder.Data(BaseConfigModel.Configuration["HaBookAuth:TeamModelLoginUrl"]);
             return await Task.Factory.StartNew(() => { return responseBuilder.build(); });

+ 5 - 0
TEAMModelOS/SeedData/SeedDataService.cs

@@ -15,6 +15,11 @@ namespace TEAMModelOS.SeedData
         public SeedDataService(IAzureTableDBRepository azureTableDBRepository) {
             _azureTableDBRepository = azureTableDBRepository;
         }
+
+        public void SeedRootAdmin() {
+
+        }
+
         public  void SeedData()
         {
             string Lang = "zh-cn";

+ 1 - 0
TEAMModelOS/appsettings.Development.json

@@ -25,6 +25,7 @@
     }
   },
   "HaBookAuth": {
+    "TeamModelRegistUrl": "https://account.habookaclass.biz/regist?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
     "TeamModelLoginUrl": "https://account.habookaclass.biz/?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJsb2dpbiIsImF1ZCI6ImNoZW5nZHVMb2dpbiIsImlzcyI6Imh0dHBzOi8vYXBpLmhhYm9va2FjbGFzcy5iaXoiLCJpYXQiOjE1MzYxMzUwNDcsIm5iZiI6MTUzNjEzNTA0NywiZXhwIjoxNTY3NTU1MjAwLCJpZHAiOiJIYWJvb2sgQ29yZVNlcnZpY2UifQ.F4AnkbJrMRoZvJ6SC-lqZEYIYSoq5x8lvX6_a3YqSgM&callback=",
     "AccountUrl": "https://api.habookaclass.biz/account",
     "ServiceUrl": "https://api.habookaclass.biz/service",