Я установил следующую аутентификацию в своем клиенте MVC.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(_ =>
{
//_.DefaultScheme = "Cookies";
//_.DefaultChallengeScheme = "oidc";
_.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddCookie("Cokies")
.AddFacebook()
.AddGoogle()
.AddJwtBearer()
.AddOpenIdConnect("oidc", _ => { });
Поскольку по умолчанию используется JWT, я полагаю, что другие (Cookie, Facebook, Google и OpenIdConnect) просто игнорируются, если декоратор авторизации вызывается без параметров.
Однако я просто получаю 401 Unauthorized без дополнительной информации. Например, если я закомментирую оператор схемы по умолчанию для JWT и активирую файл cookie следующим образом:
{
_.DefaultScheme = "Cookies";
_.DefaultChallengeScheme = "oidc";
//_.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}...
Я получаю страницу с ошибкой разработчика, в которой говорится, что идентификатор клиента неизвестен. Но в этом случае я получаю только страницу по умолчанию в Chrome с кодом ошибки. Я думал, что, возможно, нужно установить схему вызова по умолчанию, но нет смысла делать это для JWT, верно? Кроме того, я не вижу поля для этого в классе JwtBearerDefaults.
Чего мне не хватает в моем клиенте MVC, чтобы он правильно аутентифицировался? Или проблема в моей конфигурации IDS4?
Я какое-то время гуглил, но я не получил ни одного обращения, которое говорило бы со мной и которое я бы признал значимым. Хотя, может быть, это мое невежество...
Укороченная версия, по-прежнему вызывающая ту же проблему, выглядит так.
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(_ =>
{
_.Authority = "https://localhost:44300";
_.Audience = "http://localhost:5001";
});
Мой IDS4 работает на порту 44300 (проверено с помощью .well-known), а API — на порту 5001.
.AddCookie("Cokies")
может быть одной из проблем. Что касается пакета NuGet, API — это проект, для которого требуется пакет: github.com/IdentityServer/IdentityServer4.Samples/blob/master/ - person Ruard van Elburg   schedule 31.12.2018http://localhost:5000/signin-oidc
по умолчанию для ASP.NET Core MVC. Вы должны иметь возможность проверять трафик при переходе на любую страницу с атрибутом[Authorize]
на контроллере. Трафик должен начинаться с обращения к вашему серверу идентификации, затем к внешнему провайдеру (если вы его используете), затем обратно к серверу идентификации и, наконец, обратному вызову к вашему клиенту MVC. Обратный вызов — это место, где токен обычно находится в теле ответа. - person Vidmantas Blazevicius   schedule 31.12.2018.UseAuthentication()
, оно должно бытьhttp://yourdomain/signin-oidc
. Также можно попробовать без https? - person Vidmantas Blazevicius   schedule 31.12.2018