Я использую авторизацию идентификации и JWT.
[HttpPost("/token")]
public async Task Token([FromBody] User user)
{
var username = user.Login;
var password = user.Password;
var identity = await GetIdentityAsync(username, password);
if (identity == null)
{
Response.StatusCode = 400;
await Response.WriteAsync("Invalid username or password.");
return;
}
var now = DateTime.UtcNow;
var jwt = new JwtSecurityToken(
issuer: AuthOptions.ISSUER,
audience: AuthOptions.AUDIENCE,
notBefore: now,
claims: identity.Claims,
expires: now.Add(TimeSpan.FromMinutes(AuthOptions.LIFETIME)),
signingCredentials: new SigningCredentials(AuthOptions.GetSymmetricSecurityKey(),
SecurityAlgorithms.HmacSha256));
var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);
var response = new
{
access_token = encodedJwt,
user = new
{
login = user.Login,
role = identity.FindFirst(ClaimsIdentity.DefaultRoleClaimType).Value
}
};
Response.ContentType = "application/json";
await Response.WriteAsync(JsonConvert.SerializeObject(response,
new JsonSerializerSettings { Formatting = Formatting.Indented }));
}
async Task<ClaimsIdentity> GetIdentityAsync(string userName, string password)
{
var result = await _signInManager.PasswordSignInAsync(userName, password, false, false);
if (result.Succeeded)
{
var user = await _userManager.FindByNameAsync(userName);
if (user != null)
{
var role = (await _userManager.GetRolesAsync(user)).SingleOrDefault();
var claims = new List<Claim>
{
new Claim(ClaimsIdentity.DefaultNameClaimType, user.UserName),
new Claim(ClaimsIdentity.DefaultRoleClaimType, role)
};
return new ClaimsIdentity(claims, "Token", ClaimsIdentity.DefaultNameClaimType, ClaimsIdentity.DefaultRoleClaimType);
}
}
return null;
}
Авторизация работает успешно.Я получаю токен на моем клиентском приложении.Но затем я отправляю изображение на сервер (url: '/ api / image') и получаю сообщение об ошибке "Http error response для http://localhost:5000/Account/Login?ReturnUrl=%2Fapi%2Fimage: 404 Not Found".Почему я получаю этот URL, а не http://localhost:5000/api/image?И как решить эту проблему?
Отправить изображение:
add() {
const id = uuid.v4();
const formData = new FormData();
formData.append('image', this.file, id);
this.imageService.upload(formData).subscribe(() => {
});
}
onSelectFile(event) {
this.file = event.target.files[0];
const reader = new FileReader();
reader.readAsDataURL(this.file);
reader.onload = (event) => {
this.url = event.target['result'];
};
}
ImageService:
url = 'api/image';
headers: HttpHeaders;
constructor(private httpService: HttpService, private authService: AuthService) {
const token = localStorage.getItem(this.authService.tokenKey);
this.headers = new HttpHeaders().set('Authorization', 'Bearer ' + token);
}
upload(image: FormData) {
return this.httpService.postData(this.url, image, this.headers);
}
HttpService:
postData(url: string, body: any, headers?: HttpHeaders) {
return this.http.post(`${environment.apiUrl}/${url}`, body, { headers });
}