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");
            });
    }

У меня есть пара вопросов:

  1. Когда я использую AllowedGrantTypes = GrantTypes.Implicit для каждого учебника, я получаю "Извините, произошла ошибка: unauthorized_client"
  2. Когда я использую AllowedGrantTypes = GrantTypes.Hybrid, я получаю экран входа, но мои пользователи в памяти (Алиса и Боб с pw = паролем) не могут войти в систему.

Вопросы: - AddTestUsers не работает, когда уже есть дополнительные хранилища данных? - Почему мой тип гранта отличается от прохождения?

1 ответ

Я бы проверил AllowedGrantTypes на уровне сервера идентификации. У нас примерно одинаковые настройки, и мы используем AllowedGrantTypes = GrantTypes.HybridAndClientCredentials Это позволяет приложению MVC общаться с сервером идентификации за кулисами.

Тестовые пользователи должны присутствовать.

Другие вопросы по тегам