Я новичок в Angular Я создал службу аутентификации JWT в. Net Ядро, и я хочу использовать его в своем приложении, мой интерфейс выглядит так:
Это мой сервис :
constructor(private http:HttpClient) { }
getPosts(x){
// return this.http.post(this.url,{params:{username:x}});
return this.http.post<any>('https://localhost:44361/api/Auth/token/', { x })
.pipe(map(user => {
// login successful if there's a jwt token in the response
if (user ) {
// store user details and jwt token in local storage to keep user logged in between page refreshes
localStorage.setItem('TokenInfo', JSON.stringify(user));
}
return user;
}));
}
вот мой компонент входа в систему:
data:any;
constructor(
private router: Router,
private authService: MyserviceService) { }
signIn(x) {
console.log(x);
this.authService.getPosts(x)
.subscribe(response => {
let token = (<any>response).token;
localStorage.setItem("jwt", token);
console.log(token);
this.invalidLogin = false;
this.router.navigate(["/"]);
}, err => {
this.invalidLogin = true;
});
}
}
Очень странно, почему я не могу войти в систему, я генерирую его в Postman, но здесь, в моем приложении, каждый раз, когда я получаю доступ к XMLHttpRequest в 'https://localhost: 44361 / api / Auth / token / ' от источника 'http://localhost: 4200 ' заблокирован политикой CORS: Нет 'Access-Control- Заголовок Allow-Origin 'присутствует на запрошенном ресурсе, даже если в моем приложении включен CORS, и он следовал инструкции microsoft do c, вот мой бэкэнд в. Net core
My Configuration Сервис:
public void ConfigureServices(IServiceCollection services)
{
//services.AddCors();
string securityKey = "My_First_Key_generated_by_myself";
var semetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme).AddJwtBearer(
options =>
{
options.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "morteza",
ValidAudience = "pass",
IssuerSigningKey = semetricSecurityKey
};
}
);
// services.AddCors();
services.AddCors(options =>
{
options.AddPolicy(
"CorsPolicy",
builder => builder.WithOrigins("http://localhost:4200")
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
Моя конфигурация:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseAuthentication();
app.UseCors("CorsPolicy");
app.UseMvc();
}
}
Мой контроллер аутентификации:
public ActionResult GetToken(string username)
{
// return Ok("hi Morteza");
if (username == "morteza") {
string securityKey = "My_First_Key_generated_by_myself";
var semetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Role, "Admin"));
var signIncredentials = new SigningCredentials(semetricSecurityKey, SecurityAlgorithms.HmacSha256Signature);
var token = new JwtSecurityToken(
issuer: "http://localhost:4200/",
audience: "https://localhost:44361/api/Auth/token/",
expires: DateTime.Now.AddHours(1),
claims: claims,
signingCredentials: signIncredentials);
return Ok(new JwtSecurityTokenHandler().WriteToken(token));
}