На запрошенном ресурсе Asp.Net Web Api Owin и Angular 8 отсутствует заголовок «Access-Control-Allow-Origin». - PullRequest
0 голосов
/ 22 сентября 2019

У меня есть Asp.Net Web Api с механизмом аутентификации JaT Oauth.Таким образом, в файле Startup.cs я определил политику cors следующим образом:

app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);

И я использую билет подтверждения таким образом в CustomOAuthProvider class:

public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{

    var allowedOrigin = "*";

    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

    var userManager = context.OwinContext.GetUserManager<ApplicationUserManager>();

    ApplicationUser user = await userManager.FindAsync(context.UserName, context.Password);

    if (user == null)
    {
        context.SetError("invalid_grant", "The user name or password is incorrect.");
        return;
    }

    if (!user.EmailConfirmed)
    {
        context.SetError("invalid_grant", "User did not confirm email.");
        return;
    }


    ClaimsIdentity oAuthIdentity = await user.GenerateUserIdentityAsync(userManager, "JWT");

    var ticket = new AuthenticationTicket(oAuthIdentity, null);

    context.Validated(ticket);

}

}

Как вы можете видеть, я определил заголовки ответов в этом:

var allowedOrigin = "*";

    context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { allowedOrigin });

Я не мог установить где-нибудь EnableCors, просто в StartUp.cs.

Но я получаю эту ошибку в клиентеside (Angular 8):

Access to XMLHttpRequest at 'http://localhost:50522/oauth/token' from origin 'http://localhost:4200' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Я пытаюсь использовать метод login в угловом формате, например:

login(username: string, password: string, grant_type: string) {
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json');
    return this.http.post<any>(`${environment.urlAddress}/oauth/token`, JSON.stringify({ username, password, grant_type }), { headers })
        .pipe(map(user => {
            console.log(user);
            // store user details and jwt token in local storage to keep user logged in between page refreshes
            console.log(user);
            localStorage.setItem('currentUser', JSON.stringify(user));
            this.currentUserSubject.next(user);
            return user;
        }))
}

Я не мог точно понять, в чем проблема.

Пожалуйста, помогите.

1 Ответ

0 голосов
/ 22 сентября 2019

Это было решено путем удаления кода context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] {"*"}); из метода GrantResourceOwnerCredentials.

А также я изменил порядок выполнения кода app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll); перед ConfigureOAuthTokenGeneration(app) кодом в Startup.cs

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...