Ошибка заголовка Access-Control-Allow-Origin не найдена, когда cors включен в удостоверении веб-API ASP.NET - PullRequest
0 голосов
/ 02 июля 2018

Я использую Angular 6 @ localhost: 4200 & Asp.net Web Api Identity - индивидуальная учетная запись пользователя @ localhost: 57310

Теперь я включил cors, как это, в моем webapiconfig.cs файле: -

EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

Это работало нормально, но теперь, когда мне нужно добавить google + login authenticaton на моем веб-сайте, он снова начал показывать эту ошибку.

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Итак, чтобы решить эту проблему, я добавляю следующий код в <system.webServer> в web.config файле.

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*"/>
    <add name="Access-Control-Allow-Headers" value="*"/>
    <add name="Access-Control-Allow-Methods" value="*"/>
  </customHeaders>
</httpProtocol>

И новая ошибка была =>

The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed. Origin 'http://localhost:4200' is therefore not allowed access.

Если я заменим "*" на http://localhost:4200 в любом из перечисленных выше методов, позволяющих использовать ядро. Ошибка меняется соответственно, как =>

The 'Access-Control-Allow-Origin' header contains multiple values '*, http://localhost:4200', but only one is allowed. Origin 'http://localhost:4200' is therefore not allowed access.

OR

The 'Access-Control-Allow-Origin' header contains multiple values 'http://localhost:4200, *', but only one is allowed. Origin 'http://localhost:4200' is therefore not allowed access.

Если я удалю любой из них, ошибка вернется к =>

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

Угловая информация

Мой угловой код this.http.get("http://localhost:57310/api/Account/ExternalLogin?provider=Google&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Flogin&state=tTs32zmKbLSJXZP5O46h-GC29j2yrt3TFYYtcG3VY9o1").subscribe(data=>console.log(data));

Если я запрашиваю эту ссылку в браузере, она работает нормально, но не от углового звонка. Информация о веб-API

Мой метод WebAPI AppilicationOAuthProvider.cs для перенаправления файла: =>

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context)
    {
        //context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });
        if (context.ClientId == _publicClientId)
        {
            Uri expectedRootUri = new Uri("http://localhost:4200/login");


            if (expectedRootUri.AbsoluteUri == context.RedirectUri)
            {
                context.Validated();
            }
        }

        return Task.FromResult<object>(null);
    }

Информация об аккаунте Google Developer

Моя авторизованная исходная ссылка JavaScript http://localhost:4200

Мои авторизованные URI перенаправления http://localhost:57310/signin-google

1 Ответ

0 голосов
/ 02 июля 2018

Единственная проблема в коде находится в разделе Angular Information. Во время аутентификации Google я отправляю запрос на получение, но это не так. Правильный метод =>

window.location.href = "http://localhost:57310/api/Account/ExternalLogin?provider=Google&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Flogin&state=tTs32zmKbLSJXZP5O46h-GC29j2yrt3TFYYtcG3VY9o1";

вместо

this.http.get("http://localhost:57310/api/Account/ExternalLogin?provider=Google&response_type=token&client_id=self&redirect_uri=http%3A%2F%2Flocalhost%3A4200%2Flogin&state=tTs32zmKbLSJXZP5O46h-GC29j2yrt3TFYYtcG3VY9o1").subscribe(data=>console.log(data));
...