У меня возникли некоторые проблемы с установлением потока аутентификации между веб-приложением Vue.js + ASP.NET Core 2.1 с IdentityServer4. Кажется, мне не хватает чего-то очень простого, но я не уверен, что именно.Я хочу иметь следующее:
- REST API (http://localhost:7000) защищены через IdentityServer4 (http://localhost:5000)
- Пользователь открывает мое ядро asp.netвеб-приложение (http://localhost:6666), щелкает логин
- JavaScript передает конфигурацию и использует signinredirect для отправки браузера в приложение IdentityServer4
- Пользователь вводит данные для входа и отправляет
- браузер перенаправляет понастройка для моего основного веб-приложения asp.net с успешными данными для входа
- Теперь пользователь может получить доступ к API REST через основное веб-приложение asp.net
, которое можно получить из моего vue + webapp -> IdentityServer4 интерфейс быстрого входа в систему, и он представляет следующий интерфейс входа:
IdentityServer4 интерфейс быстрого запуска
Я использую тестовые учетные записи пользователей «bob» и «alice»", после ввода идентификатора пользователя и пароля для Алисы и попытки войти в систему, я получаю следующую ошибку:
Произошло необработанное исключение при обработке запроса.
InvalidOperationException:Обработчик аутентификации, зарегистрированный для схемы Bearer, - это IdentityServerAuthenticationHandler, который нельзя использовать для SignInAsync.Зарегистрированные схемы входа: idsrv, idsrv.external.
Microsoft.AspNetCore.Authentication.AuthenticationService.SignInAsync (контекст HttpContext, строковая схема, принципал ClaimsPrincipal, свойства AuthenticationProperties)
Моя конфигурация клиента:
new Client
{
ClientId = "js",
ClientName = "JavaScript Client",
AllowedGrantTypes = GrantTypes.Implicit,
AllowAccessTokensViaBrowser = true,
RedirectUris = { "http://localhost:6666/static/account/callback.html" },
PostLogoutRedirectUris = { "http://localhost:6666" },
AllowedCorsOrigins = { "http://localhost:6666" },
// scopes that client has access to
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
}
}
Конфигурация для моего клиента javascript (TypeScript):
// Authentication init code
idConfig: Oidc.UserManagerSettings = {
authority: "http://localhost:5000",
client_id: "js",
redirect_uri: "http://localhost:6666/static/account/callback.html",
response_type: "id_token token",
scope: "openid profile castlepoint",
post_logout_redirect_uri: "http://localhost:6666",
} as Oidc.UserManagerSettings;
, и мой код входа в систему JavaScript:
public login() {
this.userManager.signinRedirect();
}
У меня такое ощущение, что я неправильно комбинирую поток входа в систему на клиентском компьютере с потоком автоматического входа в систему, но я не уверен ...
Журналы из ID4 говорят в основном так же, как указано выше:
System.InvalidOperationException: обработчик аутентификации, зарегистрированный для схемы 'Bearer', является 'IdentityServerAuthenticationHandler', который не может использоваться для SignInAsync.Зарегистрированные схемы входа: idsrv, idsrv.external.
Мой ID4 startup.cs имеет следующую запись:
public void ConfigureServices(IServiceCollection services)
{
// configure identity server with in-memory stores, keys, clients and scopes
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters();
services.AddAuthentication("Bearer")
.AddIdentityServerAuthentication(options =>
{
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ApiName = "api1";
});
services.AddCors(options =>
{
// this defines a CORS policy called "default"
options.AddPolicy("default", policy =>
{
policy.WithOrigins("http://localhost:6666")
.AllowAnyHeader()
.AllowAnyMethod();
});
});
services.AddMvc();
}
Извините за дамп длинного кода ...Кто-нибудь может указать на легкую часть, которую я не понял правильно?У меня где-то пересеклись провода с требуемым типом аутентификации и требуемой конфигурацией ... Я думаю ...