it-swarm.com.de

Curl: Fehler: (3) Portnummer endet mit '"'

Ich versuche, ein Token für eine Dot Net Core 2.0-Web-API zu erhalten.

Das mache ich:

C:\Users\danyb>curl -X POST -H 'Content-Type:application/json'^
Mehr? -d '{\"username\":\"mario\",\"password\":\"secret\"}'^
Mehr? localhost:56183/api/token

[1/2]: '"username":"mario"'localhost:56183/api/token --> <stdout>
--_curl_--'"username":"mario"'localhost:56183/api/token
curl: (3) Port number ended with '"'

[2/2]: '"password":"secret"'localhost:56183/api/token --> <stdout>
--_curl_--'"password":"secret"'localhost:56183/api/token
curl: (3) Port number ended with '"'

Ich habe bereits im Internet gesucht, aber keine funktionierende Lösung gefunden.

TokenController-Klasse:

using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.IdentityModel.Tokens;
using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

namespace JWT.Controllers
{
    [Route("api/[controller]")]
    public class TokenController : Controller
    {
        private IConfiguration _config;

        public TokenController(IConfiguration config)
        {
            _config = config;
        }

        [AllowAnonymous]
        [HttpPost]
        public IActionResult CreateToken([FromBody]LoginModel login)
        {
            IActionResult response = Unauthorized();
            var user = Authenticate(login);

            if (user != null)
            {
                var tokenString = BuildToken(user);
                response = Ok(new { token = tokenString });
            }

            return response;
        }

        private string BuildToken(UserModel user)
        {

            var claims = new[] {
                new Claim(JwtRegisteredClaimNames.Sub, user.Name),
                new Claim(JwtRegisteredClaimNames.Email, user.Email),
                new Claim(JwtRegisteredClaimNames.Birthdate, user.Birthdate.ToString("yyyy-MM-dd")),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            };

            var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_config["Jwt:Key"]));
            var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

            var token = new JwtSecurityToken(_config["Jwt:Issuer"],
              _config["Jwt:Issuer"],
              claims,
              expires: DateTime.Now.AddMinutes(30),
              signingCredentials: creds);

            return new JwtSecurityTokenHandler().WriteToken(token);
        }

        private UserModel Authenticate(LoginModel login)
        {
            UserModel user = null;

            if (login.Username == "mario" && login.Password == "secret")
            {
                user = new UserModel { Name = "Mario Rossi", Email = "[email protected]" };
            }
            return user;
        }

        public class LoginModel
        {
            public string Username { get; set; }
            public string Password { get; set; }
        }

        private class UserModel
        {
            public string Name { get; set; }
            public string Email { get; set; }
            public DateTime Birthdate { get; set; }
        }
    }
}

Ich denke, der Fehler hat nichts mit dem Controller zu tun, sondern eher mit dem Curl-Aufruf als mit sich.

(Ich muss mehr Text hinzufügen, weil Stapelüberlauf denkt, dass es zu viel Code ist. Also hier einige fantastische Lorem Ipsum :) voluptua. Bei vero eos et accusam et justo duo dolores et ea rebum. Es gibt keinen Grund zur Besinnung, keinen Grund zur Besinnung. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy temporär invidunt ut labore und dolore magna aliquyam erat, sed diam voluptua. Bei vero eos et accusam et justo duo dolores et ea rebum. Es gibt keinen Grund zur Besinnung, keinen Grund zur Besinnung.

13

Ich bin auf etwas Ähnliches gestoßen und wurde durch einige einfache und doppelte Anführungszeichen ausgetrickst. Deshalb rate ich Ihnen hier, sicherzustellen, dass Sie Ihre Curl-Anfrage in der Befehlszeile richtig formatiert haben. Sie müssen nicht entkommen, wenn Sie sich innerhalb Ihrer einfachen Anführungszeichen an doppelte Anführungszeichen halten.

Probier diese:

curl -X POST -H 'Content-Type:application/json' http://localhost:56183/api/token -d '{"username":"mario", "password":"secret"}'
15
c7nj7n