Ошибка подключения к https: // localhost: 5002 / .well-known / openid-configuration

Я использую Identity Server 4 и ASP.NET Core 2.1.

У меня есть API и приложение Auth, и я пытался выполнить следующие действия:

var discoveryClient = new DiscoveryClient("https://localhost:5002");

discoveryClient.Policy.RequireHttps = true;

var discovery = await discoveryClient.GetAsync();

if (discovery.IsError) 
  Console.WriteLine(discovery.Error);

Но я получил следующую ошибку:

Error connecting to https://localhost:5002/.well-known/openid-configuration: 
The SSL connection could not be established
The remote certificate is invalid according to the validation procedure.

Однако, если я обращаюсь к URL-адресу «https: // localhost: 5002 /. хорошо известный / openid-configuration» в браузере, я получаю правильную информацию, а не ошибки.

Что я делаю неправильно?

Приложение API имеет следующую конфигурацию:

public void ConfigureServices(IServiceCollection services) {

  services
    .AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

  services.AddRouting(x => { x.LowercaseUrls = true; });        

  services.AddHsts(x => {
    x.Preload = true;
    x.IncludeSubDomains = true;
    x.MaxAge = TimeSpan.FromDays(60);
  });

  services.AddHttpsRedirection(x => {
    x.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
    x.HttpsPort = 5001;
  });        

  services.AddApiVersioning(x => {
    x.ApiVersionSelector = new CurrentImplementationApiVersionSelector(x);
    x.AssumeDefaultVersionWhenUnspecified = true;
    x.DefaultApiVersion = new ApiVersion(1, 0);
    x.ReportApiVersions = false;                 
  });      

  services.AddCors(x => {
    x.AddPolicy("AllowAll", y => y.AllowAnyMethod().AllowAnyOrigin().AllowAnyHeader());
  });

  services.AddAuthorization();

  services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddIdentityServerAuthentication(x => {
      x.ApiName = "api";
      x.Authority = "https://localhost:5002";
      x.RequireHttpsMetadata = false;
    });   

} // ConfigureServices

public void Configure(IApplicationBuilder application, IHostingEnvironment environment) {

  if (environment.IsDevelopment()) {        
    application.UseDeveloperExceptionPage();
  } else {
    application.UseHsts();         
  }      

  application.UseAuthentication();
  application.UseHttpsRedirection();      
  application.UseMvc();       

} // Configure

И приложение Auth со следующей конфигурацией:

public void ConfigureServices(IServiceCollection services) {

  services
    .AddMvc()
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

  services.AddRouting(x => { x.LowercaseUrls = true; });        

  services.AddHsts(x => {
    x.Preload = true;
    x.IncludeSubDomains = true;
    x.MaxAge = TimeSpan.FromDays(60);
  });

  services.AddHttpsRedirection(x => {
    x.RedirectStatusCode = StatusCodes.Status301MovedPermanently;
    x.HttpsPort = 5002;
  });        

  services
    .AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryIdentityResources(Config.GetIdentityResources())
    .AddInMemoryApiResources(Config.GetApiResources())
    .AddInMemoryClients(Config.GetClients())
    .AddTestUsers(Config.GetTestUsers());

} // ConfigureServices

public void Configure(IApplicationBuilder application, IHostingEnvironment environment) {

  if (environment.IsDevelopment()) {        
    application.UseDeveloperExceptionPage();
  } else {
    application.UseHsts();        
  }      

  application.UseHttpsRedirection();

  application.UseIdentityServer();

  application.UseMvc();

} // Configure

Где Config, определяющий клиентов, ресурсы и тестовых пользователей:

public class Config {

  public static List<ApiResource> GetApiResources() {
    return new List<ApiResource> { 
      new ApiResource("api", "API Resource")
    };
  }

  public static List<IdentityResource> GetIdentityResources() {
    return new List<IdentityResource> { 
      new IdentityResources.OpenId(),
      new IdentityResources.Profile()        
    };
  }

  public static List<Client> GetClients() {

    return new List<Client> { 

      new Client {                  
        ClientId = "app",
        ClientName = "APP Client",        
        ClientSecrets = { new Secret("app".Sha256()) },
        AllowedGrantTypes = GrantTypes.ClientCredentials,                
        AllowedScopes = { "api" }
      },

      new Client {
        ClientId = "mvc",
        ClientName = "MVC Client",
        ClientSecrets = { new Secret("mvc".Sha256()) },
        Enabled = true,
        AllowedGrantTypes = GrantTypes.HybridAndClientCredentials,
        AllowOfflineAccess = true,
        RequireConsent = false,
        RedirectUris = { "http://localhost:5002/signin-oidc" },
        PostLogoutRedirectUris = { "http://localhost:5002" },
        FrontChannelLogoutUri =  "http://localhost:5002/signout-oidc",
        AllowedScopes = {
          IdentityServerConstants.StandardScopes.OpenId,
          IdentityServerConstants.StandardScopes.Profile,
          IdentityServerConstants.StandardScopes.Email,
          "api"
        }
      },

      new Client {
        ClientId = "spa",
        ClientName = "SPA Client",
        ClientSecrets = { new Secret("spa".Sha256()) },          
        Enabled = true,
        AllowedGrantTypes = GrantTypes.Implicit,
        AllowAccessTokensViaBrowser = true,        
        RequireConsent = false,
        AllowedScopes = { 
          IdentityServerConstants.StandardScopes.OpenId,
          IdentityServerConstants.StandardScopes.Profile, 
          IdentityServerConstants.StandardScopes.Email,
          "api" 
        },
        RedirectUris = { "https://localhost:5000" },
        PostLogoutRedirectUris = { "https://localhost:5000/home" },
        AllowedCorsOrigins = { "https://localhost:5000" }
      }
    };
  }

  public static List<TestUser> GetTestUsers() {
    return new List<TestUser> { 
      new TestUser { SubjectId = "1", Username = "john", Password = "john", Claims = new List<Claim> { new Claim("name", "John") } },
    };
  }

} // Config

Вот ваш ответ: The remote certificate is invalid according to the validation procedure. Похоже, браузер может обойти недействительный сертификат, но клиент обнаружения не может.

Ruard van Elburg 12.09.2018 19:30

Я думаю, что это возможно, потому что в браузере мне нужно было добавить исключение. Что-то не так с моей конфигурацией Asp.net Core на локальном компьютере и в среде разработки? Я думал, что с Asp.Net Core 2.1 HTTPS был по умолчанию даже в разработке.

Miguel Moura 12.09.2018 21:21

Вам нужно будет явно доверять сертификату вашей ОС. Т.е. в Windows его необходимо установить в надежное хранилище сертификатов.

poke 12.09.2018 23:14
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
3 203
0

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