#c# #asp.net-mvc #asp.net-core #identityserver4
#c# #asp.net-mvc #asp.net-core #identityserver4
Вопрос:
Я получал эту ошибку, и я искал ответ в Интернете, и почти все они говорили о запросах, и я дважды проверил, чтобы убедиться, что мои uri настроены правильно. Я не нашел никакой подсказки по этому поводу. Есть мысли.
Настройки сервера идентификации 4:-
public static IEnumerable<Client> GetClients()
{
return new List<Client>()
{
new Client
{
ClientName="KtsWeb App",
ClientId="ktswebclient",
AllowedGrantTypes= GrantTypes.Hybrid,
AccessTokenType = AccessTokenType.Reference,
RedirectUris = new List<string>()
{
"https://localhost:44355/signin-oidc" //Client URL Address
},
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}
};
}
Настройки клиента:-
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
}).AddCookie("Cookies",
(options) =>
{
options.AccessDeniedPath = "/Authorization/AccessDenied";
})
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "https://localhost:44380"; //Identity Server URL Address
options.ClientId = "ktswebclient";
options.ResponseType = "code id_token";
options.Scope.Add("openid");
options.Scope.Add("profile");
options.SaveTokens = true;
});
Комментарии:
1. Вставьте URL, на который происходит перенаправление, я бы поставил немного денег, что ваш uri перенаправления немного отличается или не https или что-то в этом роде.
2. Я не понял, о чем вы говорите, однако направленный uri — это домашняя страница сервера идентификации / страница ошибок, вот что на ней отображается сообщение об ошибке. Сервер идентификации нормально открывается со своим собственным uri, но клиент получает эту ошибку. Uri ошибки: localhost:44380/home/error?errorID=
3. Откройте инструменты разработчика в Chrome или что-то подобное и проверьте сетевой запрос, предназначенный для подключения / авторизации
4. 1. вы создали гибридный клиент без секрета клиента. 2. вы используете неявный клиентский код. Выберите один.
Ответ №1:
Вы всегда должны проверять журналы сервера идентификации, это выдало бы вам четкое сообщение об ошибке, вероятно, неподдерживаемый тип предоставления.
Вы создали гибридный клиент, но забыли добавить секрет.
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
AllowedGrantTypes = GrantTypes.Hybrid,
ClientSecrets =
{
new Secret("secret".Sha256())
},
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes =
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile,
"api1"
},
AllowOfflineAccess = true
}
};
Ваш код не предоставляет секрет
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.ClientSecret = "secret";
options.ResponseType = "code id_token";
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("api1");
options.Scope.Add("offline_access");
options.ClaimActions.MapJsonKey("website", "website");
});
Комментарии:
1. Кажется, я пропустил секрет клиента, однако я также установил некоторые дополнительные настройки. Спасибо