не может получить доступ к токену из-за политики CORS в .NetCore - PullRequest
1 голос
/ 28 апреля 2020

Я новичок в 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));
    }
...