IdentityServer4 не может аутентифицироваться в памяти пользователей
У нас есть существующая конфигурация ID-сервера, и я пытаюсь работать с пользовательским интерфейсом, не настраивая остальные соединения. Я следовал примеру для настройки клиента MVC:
В Startup.cs:
Console.WriteLine("Adding Test Users!!!");
serviceBulder.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
Добавлен новый клиент:
new Client
{
ClientId = "mvc",
ClientName = "MVC Client",
ClientSecrets = { new Secret("secret".Sha256()) },
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
RedirectUris = { "http://localhost:5002/signin-oidc" },
PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },
AllowedScopes = new List<string>
{
IdentityServerConstants.StandardScopes.OpenId,
IdentityServerConstants.StandardScopes.Profile
}
}
Пользователи настроены следующим образом:
public static List<TestUser> GetUsers()
{
return new List<TestUser>
{
new TestUser
{
SubjectId = "1",
Username = "alice",
Password = "password"
},
new TestUser
{
SubjectId = "2",
Username = "bob",
Password = "password"
},
};
}
MVC настроен на использование сервисов:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
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("openid");
options.Scope.Add("profile");
});
}
У меня есть пара вопросов:
- Когда я использую AllowedGrantTypes = GrantTypes.Implicit для каждого учебника, я получаю "Извините, произошла ошибка: unauthorized_client"
- Когда я использую AllowedGrantTypes = GrantTypes.Hybrid, я получаю экран входа, но мои пользователи в памяти (Алиса и Боб с pw = паролем) не могут войти в систему.
Вопросы: - AddTestUsers не работает, когда уже есть дополнительные хранилища данных? - Почему мой тип гранта отличается от прохождения?
1 ответ
Я бы проверил AllowedGrantTypes на уровне сервера идентификации. У нас примерно одинаковые настройки, и мы используем AllowedGrantTypes = GrantTypes.HybridAndClientCredentials
Это позволяет приложению MVC общаться с сервером идентификации за кулисами.
Тестовые пользователи должны присутствовать.