Этот вопрос будет задан через два дня, но перед этим мне нужна помощь.
Я запускаю два проекта в одном решении. Один из них - мой ID-провайдер (я использую IDS4), а другой - простой клиент MVC (с двумя методами на контроллере - Home / Open и Home / Secured . последний украшен атрибутом Авторизироваться .
Когда я пытаюсь получить доступ к открытому, он ведет себя как положено. Защищенный, однако, выбрасывает 401 на меня , но не возвращается на страницу входа. Я вполне уверен, что упустил что-то важное в настройке клиента или сервера.
На стороне поставщика ID У меня есть следующее.
public void ConfigureServices(IServiceCollection services)
{
services.AddIdentity<IdentityUser, IdentityRole>()
.AddDefaultTokenProviders();
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryPersistedGrants()
.AddInMemoryApiResources(ApiResources)
.AddInMemoryClients(Clients)
.AddTestUsers(Users)
.AddInMemoryIdentityResources(IdentityResources);
services.AddAuthentication()
.AddJwtBearer(_ =>
{
_.Authority = "https://localhost:5000";
_.Audience = "http://localhost:5001";
});
}
public IEnumerable<Client> Clients => new[]
{
new Client
{
ClientId = "MvcClient",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
AllowOfflineAccess = true,
RequireConsent = false,
ClientSecrets = { new Secret("MvcSecret".Sha256(), DateTime.Now.AddMinutes(2)) },
RedirectUris = { "http://localhost:5000/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
IdentityServerConstants.StandardScopes.Email,
}
}
};
Я подтвердил, что при вводе вручную http://localhost:5000/signin-oidc/, я вижу документ index.html , расположенный там. Я ожидал, что когда я попытаюсь получить доступ к защищенной странице, я попаду туда. Вместо этого я получаю только 401.
На стороне клиента MVC У меня есть следующее.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(_ =>
{
_.Authority = "http://localhost:5000";
_.Audience = "http://localhost:5002";
_.SaveToken = true;
_.RequireHttpsMetadata = false;
_.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true };
})
.AddOpenIdConnect(_ => { _.ClientId = "mvc_client"; });
}
Мне нужно выяснить, почему он не отправляет меня на страницу входа, как указано. Мне также нужно придумать способ входа в систему и аутентификации с использованием JWT под MVC. Я благодарен, если я хотя бы получу предложение о том, как его устранить, и / или сравнить с правильным поведением. И рабочий пример был бы неплохо иметь.
Я исследовал это в течение нескольких дней, и мое мнение таково, что официальное руководство неясно, начинает устаревать и, что является наиболее запутанной частью, прыгает между темами без красной нити. Все примеры и блоги, которые я видел (и я видел много), не будут работать на моей машине или окажутся недействительными для последней версии .NET Core (которая на данный момент является 2.2). ближайший на самом деле не работал, и я подозреваю, что нет смысла тратить время на его устранение.