Ответ 1
Чтобы обеспечить обновление/ответ, последующая версия пакетов IdentityServer4 работала нормально.
В настоящее время используются пакеты ID4 2.0.
Я узнал о IdentityServer4 https://identityserver4.readthedocs.io/en/release/quickstarts/0_overview.html, но у меня, похоже, возникли проблемы с его работой.
После создания раздела API проекта и соответствующей настройки:
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "api1"
});
app.UseMvc();
}
Я получаю следующую ошибку:
'IApplicationBuilder' does not contain a definition for 'UseIdentityServerAuthentication' and no extension method 'UseIdentityServerAuthentication' accepting a first argument of type 'IApplicationBuilder' could be found (are you missing a using directive or an assembly reference?)
Любой совет, что мне здесь не хватает?
ОБНОВЛЕНИЕ 1: Я заметил, что не могу ссылаться на пространство имен, даже если пакет установлен и присутствует.
т.е.
using IdentityServer4.AccessTokenValidation;
или
using IdentityServer4;
Чтобы обеспечить обновление/ответ, последующая версия пакетов IdentityServer4 работала нормально.
В настоящее время используются пакеты ID4 2.0.
Ну, я только что закрыл и снова открыл Visual Studio 2017, и проблема исчезла. Возможно, Visual Studio задохнулась при первом запуске пакета IdentityServer4.AccessTokenValidation, и повторное открытие проекта заставило его попробовать еще раз, и на этот раз ему это удалось.
Если вы переходите с net core 1.1 на 2.0, вам нужно перенести код, как описано в Identity Server: миграция API на ASP.NET Core 2
В функции настройки
Before:
app.UseIdentityServerAuthentication(new IdentityServerAuthenticationOptions
{
Authority = "http://localhost:5000",
RequireHttpsMetadata = false,
ApiName = "apiApp"
});
After:
app.UseAuthentication();
В функции ConfigureServices
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme =
JwtBearerDefaults.AuthenticationScheme;
options.DefaultChallengeScheme =
JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(o =>
{
o.Authority = "http://localhost:5000";
o.Audience = "apiApp";
o.RequireHttpsMetadata = false;
});
Вам нужен этот пакет. И используйте пространство имен IdentityServer4.AccessTokenValidation
У меня была такая же проблема, и я решил, выполнив IdentityServer 4 Quickstart Samples, в частности Javascript Client.
Итак, вот что здесь получилось:
Проверьте версии зависимостей. Для IdentityServer есть проблемы, связанные с .NET Core 2.0. В моем проекте API я использовал версию Microsoft.Asp.NetCore.All версии 2.0.5 и IdentityServer4.AccessTokenValidation версии 2.3.0.
Внутри Startup.cs, при настройке метода add: app.UseAuthentication(); как он используется в пример.
Последний шаг - добавить аутентификацию к методу ConfigureServices, как в пример:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});
}
И это решило в моем случае. Надеюсь, это сработает и для вас, просто дайте мне знать, как это происходит.
Счастливое кодирование.
Вы можете проверить последнюю документацию в github IdentityServer4:
Он устанавливает параметры проверки подлинности в методе ConfigureServices
, используя метод services.AddAuthentication
.
Вот тестовый сервер, который они используют