Member 12778040 Ответов: 0

Каков наилучший способ получить доступ к защищенному веб-сервису с помощью токена JWT bearer с веб-сайта, если оба они работают на разных серверах


Привет,

каков наилучший способ получить доступ к защищенному веб-сервису с помощью токена JWT Bearer с веб-сайта, если оба они работают на разных серверах ?

Что я уже пробовал:

Hi,

i`m new in Web programming. I just create a Webservice and it worked as well with JWT Bearer Token. 
Now i set up a Asp.Net Core Website which use an own Identity Authentication. 

At the moment i realize the Token in Webservice as follow:

<pre lang="c#">public IActionResult Login(string username, string pass)
        {
            UserModel login = new UserModel();
            login.UserName = username;
            login.Password = pass;
            IActionResult response = Unauthorized();

            var user = AuthenticateUser(login);

            if(user != null)
            {
                var tokenStr = GenerateJSONWebToken(user);
                response = Ok(new { token = tokenStr });
            }
            
            return response;
        }


а это и есть создание токена:

private string GenerateJSONWebToken(UserModel userinfo)
        {
            var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub,userinfo.UserName),
                new Claim(JwtRegisteredClaimNames.Email,userinfo.EmailAddress),
                new Claim(JwtRegisteredClaimNames.Jti,Guid.NewGuid().ToString())

            };

            var token = new JwtSecurityToken(
                issuer: _config["Jwt:Issuer"],
                audience: _config["Jwt:Issuer"],
                claims,
                expires: DateTime.Now.AddMinutes(120),
                signingCredentials: credentials);

            var encodetoken = new JwtSecurityTokenHandler().WriteToken(token);
            return encodetoken;
        }


Теперь я жестко закодировал имя пользователя и пароль для токена в Website Startup.cs следующим образом:


var client = new RestClient(Startup.URLWebservice);
            var request = new RestRequest("api/Login?username=test&pass=123", Method.GET);
            var deserial = new JsonDeserializer();
            var response = client.Execute(request);
            Token = deserial.Deserialize<Dictionary<string, string>>(response);


Каков наилучший шаблон, чтобы сделать этот сценарий безопасным ? Во - первых, я думаю, что там не должно быть жестко закодированных имени пользователя и пароля ? Лучшим способом может быть то, что веб - сервис отправляет токен только аутентифицированному пользователю с веб-сайта-но как я могу этого добиться ?

Надеюсь, кто-нибудь сможет мне помочь !?

0 Ответов