Exemplo n.º 1
0
        public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationToken cancellationToken)
        {
            return(Task.Run(() =>
            {
                HttpRequestMessage request = context.Request;
                AuthenticationHeaderValue authorization = request.Headers.Authorization;
                //JsonResult<ErrorResponse> bad = new JsonResult<ErrorResponse>(new ErrorResponse(ErrorNumber.NOT_AUTHORIZED_FOR_OPERATION, "Generic not authorized"), new JsonSerializerSettings(), Encoding.ASCII, context.Request);

                if (authorization == null || authorization.Scheme != "Bearer")
                {
                    return;
                }

                if (String.IsNullOrEmpty(authorization.Parameter))
                {
                    context.ErrorResult = retError(ErrorNumber.INVALID_AUTHORIZATION_TOKEN_NO_BEARER, "No Bearer", request);
                    return;
                }

                JWTToken token = new JWTToken(authorization.Parameter);

                IPrincipal principal = new JWTUser(token);

                if (token.valid && !principal.Identity.IsAuthenticated)
                {
                    context.ErrorResult = retError(ErrorNumber.UNKNOWN_ERROR, "Not sure what this is", request);
                }
                else
                {
                    context.Principal = principal;
                }
                return;
            }));
        }
Exemplo n.º 2
0
        public async Task <List <Location> > GetLocationAsync(JWTToken jWT, Team team)
        {
            Url_data            url_     = new Url_data();
            HttpResponseMessage response = null;
            List <Location>     location = new List <Location>();
            var authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            using (var client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            })
            {
                try { response = await client.GetAsync(url_.Location.ToString() + team.Id); }                // REST GET
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                    Debug.WriteLine(ex.Message.ToString());
                }
                if (response.IsSuccessStatusCode)                                                 /// Status Code
                {
                    string responseContent = await response.Content.ReadAsStringAsync();          // Read GET

                    location = JsonConvert.DeserializeObject <List <Location> >(responseContent); // Deserialize JSON
                }
                else
                {
                    return(null);
                }
                return(location);
            }
        }
Exemplo n.º 3
0
        public async IAsyncEnumerable <TeamMembers> GetTeamMembers(JWTToken jWT, int IdTeam)
        {
            Url_data            url_      = new Url_data();
            HttpResponseMessage response  = null;
            List <TeamMembers>  ListTeams = null;
            var authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            using (var client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            })
            {
                try { response = await client.GetAsync(url_.TeamMembers.ToString() + IdTeam); }                // REST GET
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                    Debug.WriteLine(ex.Message.ToString());
                }
                if (response.IsSuccessStatusCode)                                                     /// when user exists
                {
                    string responseContent = await response.Content.ReadAsStringAsync();              // Read GET

                    ListTeams = JsonConvert.DeserializeObject <List <TeamMembers> >(responseContent); // Deserialize JSON
                }
                else
                {
                    yield return(null);
                }
                for (int i = 0; i < ListTeams.Count; i++)
                {
                    yield return(ListTeams[i]);
                }
            }
        }
Exemplo n.º 4
0
        public async Task <TeamMembers> GetMyTeams(JWTToken jWT, int idGame)
        {
            Url_data            url_      = new Url_data();
            HttpResponseMessage response  = null;
            TeamMembers         ListTeams = null;
            var authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            using (var client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            })
            {
                try { response = await client.GetAsync(url_.TeamMembers_I.ToString() + "/" + idGame); }                // REST GET
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                    Debug.WriteLine(ex.Message.ToString());
                }
                if (response.IsSuccessStatusCode)                                             /// Status Code
                {
                    string responseContent = await response.Content.ReadAsStringAsync();      // Read GET

                    ListTeams = JsonConvert.DeserializeObject <TeamMembers>(responseContent); // Deserialize JSON
                }
                else
                {
                    return(null);
                }
                return(ListTeams);
            }
        }
Exemplo n.º 5
0
        public JWTToken GenerateToken(CustomerModel customer)
        {
            var requiredClaims = new[]
            {
                new Claim(JwtRegisteredClaimNames.UniqueName, customer.Email),
                new Claim(JwtRegisteredClaimNames.Sub, customer.Id.ToString()),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim(ClaimTypes.Name, customer.Name)
            };

            var signingKey  = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("SuperSecretPassword"));
            var credentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256);

            JwtSecurityToken access_token = new JwtSecurityToken(_config.GetSection("Issuer").Value,
                                                                 _config.GetSection("Audience").Value,
                                                                 requiredClaims,
                                                                 expires: DateTime.Now.AddDays(1),
                                                                 signingCredentials: credentials);

            JWTToken identity_token = new JWTToken()
            {
                access_token = new JwtSecurityTokenHandler().WriteToken(access_token),
                expires_in   = 86400,
                token_type   = "bearer"
            };

            return(identity_token);
        }
Exemplo n.º 6
0
        public HttpResponseMessage Validate(JWTToken token)
        {
            JWTToken result = new JWTToken()
            {
                IsValid = false
            };

            KeyCdr.Users.UserManager userMgr = new Users.UserManager();
            var dbUser = userMgr.GetByLoginName(token.UserName);

            if (dbUser == null)
            {
                return(Request.CreateResponse(HttpStatusCode.Forbidden, result));
            }

            string tokenUsername = new JWTManager().ValidateToken(token.JWTValue);

            result.UserName = tokenUsername;
            if (token.UserName.Equals(tokenUsername))
            {
                result.IsValid = true;
                return(Request.CreateResponse(HttpStatusCode.OK, result));
            }

            return(Request.CreateResponse(HttpStatusCode.BadRequest, result));
        }
Exemplo n.º 7
0
        /// <summary>
        /// Rest Get Method
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="getRequest"></param>
        /// <returns></returns>
        public static async Task <T> GetExecuteAsync <T>(JWTToken jWT, GetRequest getRequest) where T : class
        {
            var authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            using (client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            })
            {
                HttpResponseMessage response;
                string responseContent;
                try
                {
                    response = await client.GetAsync(getRequest.strURL);                       //  Get

                    responseContent = await response.Content.ReadAsStringAsync();
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.Message.ToString());
                    Crashes.TrackError(ex);
                    return(await Task.FromResult(JsonConvert.DeserializeObject <T>(null)));
                }

                if (response.IsSuccessStatusCode)
                {
                    Debug.WriteLine(@"successfully saved.");
                    return(await Task.FromResult <T>(JsonConvert.DeserializeObject <T>(responseContent)));
                }
                return(await Task.FromResult <T>(JsonConvert.DeserializeObject <T>(responseContent)));
            }
        }
        public async Task <JWTToken> Refresh(JWTToken tokens)
        {
            var tokenInDb = await _context.UserToken.FirstOrDefaultAsync(token => token.RefreshToken == tokens.RefreshToken);

            if (tokenInDb == null || tokenInDb.ExpiryDate < DateTime.Now)
            {
                return(null);
            }

            var user = Models.UserToken.FromToken(tokens.JwtToken);

            var userToken = new Models.UserToken()
            {
                UserId = user.UserId
            };
            var token = userToken.ToToken(_config);

            token.RefreshToken = TokenHelper.GenerateRefreshToken();
            var now = DateTime.Now;

            tokenInDb.LastUpdated  = now;
            tokenInDb.ExpiryDate   = now.AddDays(14);
            tokenInDb.RefreshToken = token.RefreshToken;

            _context.Update(tokenInDb);
            await _context.SaveChangesAsync();

            return(token);
        }
Exemplo n.º 9
0
        public AuthenticationDTO AuthenticateGetToken(TokenDTO tokenDTO)
        {
            string          _refreshTokenold = HttpUtility.UrlDecode(tokenDTO.Refresh_Token);
            string          _refreshToken    = refreshtoken.GenerateToken(tokenDTO);
            RefreshTokenDTO refauth          = new RefreshTokenDTO {
                Authorization = _refreshTokenold
            };
            AuthenticationDTO auth = new AuthenticationDTO();

            try
            {
                //  ValidationResult results = refreshvalidation.Validate(refauth);
                Authorize authorize = oauth.Authorize.Where(x => x.Code == refauth.Authorization).FirstOrDefault();
                User      user      = oauth.User.SingleOrDefault(x => x.UserId == authorize.UserId);
                UserDTO   userDTO   = mapper.Map <UserDTO>(user);
                auth.token_type    = config["TokenType"];
                auth.access_token  = JWTToken.GenerateToken(tokenDTO);
                auth.refresh_token = HttpUtility.UrlEncode(_refreshToken);
                authorize.Code     = _refreshToken;
                oauth.SaveChanges();
            }
            catch (Exception ex)
            {
                Log.Log.Error(ex, TokenConstants.InvalidUser);
                throw new InvalidUserException(TokenConstants.InvalidUser);
            }
            return(auth);
        }
Exemplo n.º 10
0
        public string GenerateJWT(UserDTO user)
        {
            var expiry = 180;
            var claim  = new[]
            {
                new Claim(ClaimTypes.Name, user.UserName),
                new Claim(ClaimTypes.Role, user.Role)
            };
            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_tokenManagement.Secret));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var jwtToken = new JwtSecurityToken(
                _tokenManagement.Issuer,
                _tokenManagement.Audience,
                claim,
                expires: DateTime.UtcNow.AddSeconds(expiry),
                signingCredentials: credentials
                );

            var TokenString = new JwtSecurityTokenHandler().WriteToken(jwtToken);

            // create timestamp in db
            var jwt = new JWTToken()
            {
                UserEmail = user.Email,
                jwtToken  = TokenString,
                TimeStamp = DateTime.UtcNow,
                Expire    = DateTime.UtcNow.AddSeconds(expiry)
            };

            _jwt.InsertOne(jwt);
            return(TokenString);
        }
Exemplo n.º 11
0
        public async Task <IActionResult> LogIn(string submitbutton, string username, string password)
        {
            HttpClient client = _httpContextFactory.CreateClient("TGSClient");

            AppUser userModel = new AppUser();

            userModel.UserName = username;
            userModel.Password = password;

            HttpResponseMessage response = await client.PostAsJsonAsync <AppUser>("api/Authorization/LogIn", userModel);

            if (response.IsSuccessStatusCode)
            {
                JWTToken jwt = await response.Content.ReadFromJsonAsync <JWTToken>();

                System.IdentityModel.Tokens.Jwt.JwtSecurityToken jwtSecurityToken = new System.IdentityModel.Tokens.Jwt.JwtSecurityToken(jwt.Token);
                HttpContext.User = new ClaimsPrincipal(new ClaimsIdentity(jwtSecurityToken.Claims));

                _httpContextCookieController.Set("token", jwt.Token, jwt.Expire);

                return(Redirect("~/"));
            }
            else
            {
                return(View());
            }
        }
Exemplo n.º 12
0
        // POST rest/login
        public LoginResponse Post([FromBody] Login login)
        {
            if (login == null || !ModelState.IsValid || login.ContainsExtra)
            {
                return(new LoginResponse()
                {
                    errorcode = ErrorNumber.INVALID_USERNAME_OR_PASSWORD, error = "Invalid username/password"
                });
            }

            kenzanEntities ke       = new kenzanEntities();
            Employee       employee = ke.Employees
                                      .Include("EmployeeRoles")
                                      .Where <Employee>(e => e.username == login.username && e.bStatus == Status.ACTIVE)
                                      .FirstOrDefault <Employee>();

            if (employee != null && employee.password != null && crypto.BCrypt.Verify(login.password, employee.password))
            {
                JWTToken token = new JWTToken(employee);
                return(new LoginResponse()
                {
                    jwt = token.token
                });
            }
            else
            {
                return new LoginResponse()
                       {
                           errorcode = ErrorNumber.INVALID_USERNAME_OR_PASSWORD, error = "Login failed", jwt = null
                       }
            };
        }
    }
Exemplo n.º 13
0
        public async Task <bool> JoinToTeam(JWTToken jWT, Team item)
        {
            HttpResponseMessage response;
            string        json      = JsonConvert.SerializeObject(item);
            StringContent content   = new StringContent(json, Encoding.UTF8, "application/json");
            Url_data      url_      = new Url_data();
            var           authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            using (var client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            })
            {
                try
                {
                    response = await client.PostAsync(url_.TeamMembers.ToString(), content);
                }                                      //  POST  //
                catch (Exception ex)
                {
                    Crashes.TrackError(ex);
                    Debug.WriteLine(ex.Message.ToString());
                    return(false);
                }
                if (response.IsSuccessStatusCode)
                {
                    return(true);
                }
                return(false);
            }
        }
Exemplo n.º 14
0
        public string Get()
        {
            //Just for test purpose and not sharing to this url to end user
            JWTToken objToken = new JWTToken();

            return(objToken.encodeToken(ConString.GetSecretKey));
        }
Exemplo n.º 15
0
        public HttpResponseMessage HistoryAnalytics(JWTToken token)
        {
            var userMgr = new KeyCdr.History.UserSessionHistory();
            IList <Data.Session> history = userMgr.GetHistoryDetailsAllTime(
                new Data.KCUser()
            {
                UserId = Guid.Parse(token.UserId)
            });

            var analyses = history.SelectMany(ks => ks.KeySequence
                                              .SelectMany(ksa => ksa.KeySequenceAnalysis))
                           .ToList();

            var result = new UserHistoryAnalyticsModel();

            result.SpeedMeasurements = analyses
                                       .Where(a => a.AnalysisTypeId.Equals((int)AnalyticType.Speed))
                                       .OrderBy(a => a.Created)
                                       .Take(NUM_RECORDS_LOOKBACK)
                                       .Select(s => new SpeedModel().Create(s.AnalysisSpeed))
                                       .ToList();

            result.AccuracyMeasurements = analyses
                                          .Where(a => a.AnalysisTypeId.Equals((int)AnalyticType.Accuracy))
                                          .OrderBy(a => a.Created)
                                          .Take(NUM_RECORDS_LOOKBACK)
                                          .Select(s => new AccuracyModel().Create(s.AnalysisAccuracy))
                                          .ToList();

            return(Request.CreateResponse(HttpStatusCode.OK, result));
        }
Exemplo n.º 16
0
        /// <summary>
        /// This method sends HTTP GET request to get all rights from the database for application
        /// from which is user sending the request.
        /// </summary>
        /// <param name="token">JWT authentication token</param>
        /// <returns>Response from the server.</returns>
        public async Task <HttpResponseMessage> GetAll(JWTToken token)
        {
            // Add JWT token value to the authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
            var address = new Uri(client.BaseAddress.OriginalString + "/get/");

            return(await client.GetAsync(address));
        }
Exemplo n.º 17
0
        /// <summary>
        /// This method sends HTTP POST request to log user out.
        /// </summary>
        /// <param name="token">JWT authentication token</param>
        /// <returns>Response from the server.</returns>
        public async Task <HttpResponseMessage> Logout(JWTToken token)
        {
            // Add JWT token value to the authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
            var address = new Uri(client.BaseAddress.OriginalString + "/logout");

            return(await client.PostAsync(address, new StringContent("")));
        }
Exemplo n.º 18
0
        /// <summary>
        /// This method sends HTTP POST request with user id in URL paramters to the server to reset password of that user.
        /// </summary>
        /// <param name="userId">Id of the user to reset password</param>
        /// <param name="token">JWT authentication token</param>
        /// <returns>Response from the server.</returns>
        public async Task <HttpResponseMessage> ResetPasswordById(long userId, JWTToken token)
        {
            // Add JWT token value to the authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
            var address = new Uri(client.BaseAddress.OriginalString + "/resetPassword/" + userId);

            return(await client.PostAsync(address, null));
        }
Exemplo n.º 19
0
        public CategoryController(IConfiguration configuration)
        {
            baseAddressOfCategoryApi = new Uri(configuration.GetSection("ApiAddress:CategoryAPI").Value);
            JWTToken jwttokenProvider = new JWTToken();
            string   name             = Environment.UserName;

            token = jwttokenProvider.generateJwtToken(name);
        }
Exemplo n.º 20
0
        public IEnumerable <Product> GetAllProducts()
        {
            JWTToken J = new JWTToken();
            var      a = J.jiami();

            J.jiemi(a);
            return(products);
        }
Exemplo n.º 21
0
        /// <summary>
        /// This method sends HTTP DELETE request with rights id in URL paramters to delete rights with rightsId from the database.
        /// </summary>
        /// <param name="rightsId">Id of the rights to delete</param>
        /// <param name="token">JWT authentication token</param>
        /// <returns>Response from the server.</returns>
        public async Task <HttpResponseMessage> DeleteById(long rightsId, JWTToken token)
        {
            // Add JWT token value to the authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
            var address = new Uri(client.BaseAddress.OriginalString + "/delete/" + rightsId);

            return(await client.DeleteAsync(address));
        }
Exemplo n.º 22
0
        public async Task <IActionResult> Logout([FromBody] JWTToken token)
        {
            await _authorizationService.Logout(token.RefreshToken);

            return(Ok(new Response <string>()
            {
                Data = "user is logged out",
                Success = true
            }));
        }
Exemplo n.º 23
0
        /// <summary>
        /// A default constructor
        /// </summary>
        /// <param name="service">A user manager</param>
        /// <param name="context">A Database context</param>
        /// <param name="emailSender">A Email Sender</param>
        /// <param name="tokenWriter">A Jason Web Token Writer</param>
        /// <param name="options">A Application Settings</param>
        public UserController(IMediator mediator, UserManager <ApplicationUser> service, ApplicationDbContextFactory contextFactory, IEmailSender emailSender,
                              JWTToken tokenWriter, IOptions <ApplicationOptions> options, IMapper mapper)
        {
            _userManager      = service;
            _dbContextFactory = contextFactory;
            _emailSender      = emailSender;
            _tokenWriter      = tokenWriter;
            _mapper           = mapper;
            _options          = options.Value;

            _mediator = mediator;
        }
Exemplo n.º 24
0
        public BasePage(IConfiguration configuration)
        {
            this.configuration = configuration;
            EncryptionService  = new EncryptionService();
            refToken           = new RefreshToken();
            itsLogger          = new TSLogger();
            var optionsBuilder = new DbContextOptionsBuilder <OAuthContext>();

            optionsBuilder.UseSqlServer(configuration.GetConnectionString("OAuthDatabase"));
            OAuthDbContext = new OAuthContext(optionsBuilder.Options);
            jwtToken       = new JWTToken(itsLogger, EncryptionService, this.configuration);
        }
Exemplo n.º 25
0
        public HttpClient Prepare(JWTToken jWT)
        {
            Url_data            url_     = new Url_data();
            HttpResponseMessage response = null;
            var authValue = new AuthenticationHeaderValue("Bearer", jWT.Token);

            client = new HttpClient()
            {
                DefaultRequestHeaders = { Authorization = authValue }
            };
            return(client);
        }
Exemplo n.º 26
0
        /// <summary>
        /// This method sends HTTP POST request with new RightsModel to the server to create a new RightsModel recored in
        /// the database. The new model must have application id filled.
        /// </summary>
        /// <param name="rightsModel">New RightsModel</param>
        /// <param name="token">JWT authentication token</param>
        /// <returns>Response from the server.</returns>
        public async Task <HttpResponseMessage> Create(RightsModel rightsModel, JWTToken token)
        {
            // Serialize RightsModel
            string jsonData        = JsonConvert.SerializeObject(rightsModel);
            var    jsonDataContent = new StringContent(jsonData, Encoding.UTF8, "application/json");

            // Add JWT token value to the authorization header
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token.Value);
            var address = new Uri(client.BaseAddress.OriginalString + "/create/");

            return(await client.PostAsync(address, jsonDataContent));
        }
Exemplo n.º 27
0
        public bool CheckLoginToken(string email, out string exist)
        {
            JWTToken jwt = _jwt.Find(x => x.UserEmail.Equals(email)).FirstOrDefault();

            if (jwt == null)
            {
                exist = string.Empty;
                return(false);
            }

            exist = jwt.jwtToken;
            return(true); // token already exist
        }
Exemplo n.º 28
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers()
            .AddNewtonsoftJson(options =>
            {
                options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
            });

            services.AddDbContext <GatheringDbContext>(options =>
            {
                string connectionString = Configuration.GetConnectionString("DefaultConnection");
                options.UseSqlServer(connectionString);
            });
            services.AddIdentity <User, IdentityRole <long> >(options =>
            {
                options.User.RequireUniqueEmail = true;
                options.Password.RequiredLength = 6;
            })
            .AddEntityFrameworkStores <GatheringDbContext>();

            services.AddTransient <IGroup, DbGroupRepo>();
            services.AddTransient <IUser, DbUserRepo>();
            services.AddTransient <IEvent, DbEventRepo>();
            services.AddTransient <IGroupUser, DbGroupUserRepo>();
            services.AddScoped <JWTToken>();
            services.AddAuthentication(options =>
            {
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = JWTToken.GetValidationParameters(Configuration);
            });
            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo {
                    Title = "Gathering Backend", Version = "v1"
                });
                options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Name   = "Authorization",
                    In     = ParameterLocation.Header,
                    Type   = SecuritySchemeType.ApiKey,
                    Scheme = "Bearer",
                });
                options.OperationFilter <AuthenticationRequirementOperationFilter>();
            });
        }
        public HttpResponseMessage GetNewSession(JWTToken token)
        {
            var user = new KCUser()
            {
                UserId = Guid.Parse(token.UserId)
            };
            var session    = new KeyCdr.UserSession(user).StartNewSession();
            var newSession = new SessionModel()
            {
                SessionId = session.SessionId,
                UserId    = session.UserId,
            };

            return(Request.CreateResponse(HttpStatusCode.OK, newSession));
        }
Exemplo n.º 30
0
        public async Task <IActionResult> Login(UserToLogin user)
        {
            var userFromRepo = await _repo.Login(user.Name.ToLower(), user.Password);

            if (userFromRepo == null)
            {
                return(Unauthorized());
            }

            var secret = _config.GetSection("My_Custom_Settings:Token").Value;

            var token = new JWTToken(userFromRepo, secret);

            return(Ok(new { token = token.Build() }));
        }