Keycloak выбрасывает ошибку подключения SSL в Docker - PullRequest
0 голосов
/ 05 декабря 2018

Я создал веб-приложение, когда я использую .NET Core 2.0 API, Angular 5 спереди, а также я использую Keycloak и JWT для аутентификации.Но SSL-сертификат недействителен в моем домене, так как я использую его только для целей тестирования.

Но когда он пытается проверить токен, он выдает ошибку:

 Connection id "0HLIQHD0RDELK", Request id "0HLIQHD0RDELK:00000002": An unhandled exception was thrown by the application.
    servercore_1               | 
System.InvalidOperationException: IDX10803: Unable to obtain configuration from: 'https://domain/auth/realms/master/.well-known/openid-configuration'. 
---> System.IO.IOException: IDX10804: Unable to retrieve document from: 'https://domain/auth/realms/master/.well-known/openid-configuration'. 
---> System.Net.Http.HttpRequestException: An error occurred while sending the request. 
---> System.Net.Http.CurlException: SSL connect error

Но когда яв браузере откройте https://domain/auth/realms/master/.well-known/openid-configuration и откройте файл json.

Так как же можно пропустить (обойти) сертификат SSL, если он недействителен?

Вот конфигурация JWT:

services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultSignInScheme = JwtBearerDefaults.AuthenticationScheme;

            }).AddJwtBearer(o =>
            {
                    o.Authority = System.Environment.GetEnvironmentVariable("Jwt_Authority");
                    o.Audience = System.Environment.GetEnvironmentVariable("Jwt_Audience");

                o.IncludeErrorDetails = true;

                o.RequireHttpsMetadata = false;
                o.SaveToken = true;

                o.TokenValidationParameters = new TokenValidationParameters()
                {
                    ValidateAudience = true,
                    ValidateIssuer = true
                };

                o.Events = new JwtBearerEvents();
            });

Также просто для того, чтобы вы знали, что я запускаю это на Docker и использую Traefik в качестве прокси.

ВотФайл docker-compose.yml:

version: '2'

services:
  servercore:
    build: ./ServerCore
    restart: unless-stopped
    environment:
      - baseUrlUsersKeyCloak=${baseUrlUsersKeyCloak}
      - tokenBaseUrlKeyCloak=${tokenBaseUrlKeyCloak}
      - usernameKeyCloak=${usernameKeyCloak}
      - passwordKeyCloak=${passwordKeyCloak}
      - Region=${Region}
      - DisplayName=${DisplayName}
      - Jwt_Authority=${Jwt_Authority}
      - Jwt_Audience=${Jwt_Audience}
    labels:
      - "traefik.backend=servercore"
      - "traefik.frontend.rule=PathPrefix:/api/"
      - "traefik.frontend.passHostHeader=true"

  angular:
    build: ../frontend
    restart: unless-stopped
    labels:
      - "traefik.backend=angular"
      - "traefik.frontend.rule=PathPrefix:/"
      - "traefik.enable=true"
      - "traefik.port=80"
      - "traefik.frontend.passHostHeader=true"


  keycloak-postgres:
    image: postgres:10-alpine
    environment:
      - POSTGRES_DB=${KEYCLOAK_DATABASE}
      - POSTGRES_PASSWORD=${KEYCLOAK_DATABASE_PASSW}
      - POSTGRES_USER=${KEYCLOAK_DATABASE_USER}
      - PGDATA= /var/lib/postgresql/data/pgdata
    ports:
      - "5434:5432"  
    restart: unless-stopped

  keycloak:
    build: "./Keycloak"
    depends_on:
      - keycloak-postgres
    environment:
      - KEYCLOAK_USER=${KEYCLOAK_USER}
      - KEYCLOAK_PASSWORD=${KEYCLOAK_PASSWORD}
      - KEYCLOAK_IMPORT=${KEYCLOAK_IMPORT}
      - POSTGRES_USER=${KEYCLOAK_DATABASE_USER}
      - POSTGRES_PASSWORD=${KEYCLOAK_DATABASE_PASSW}
      - POSTGRES_PORT_5432_TCP_ADDR= keycloak-postgres
    ports:
      - "8443:8443"
    labels:
      - "traefik.frontend.passHostHeader=true"

  traefik:
    build: ./traefik
    ports:
      - "80:80"
      - "443:443"
      - "8080:8080"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    restart: unless-stopped

А это Dockerfile of Keycloak:

FROM jboss/keycloak:4.6.0.Final

WORKDIR /opt/jboss/keycloak

COPY realm-export.json /opt/jboss/keycloak/

EXPOSE 8443

ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ]
CMD ["-b", "0.0.0.0", "-bmanagement", "0.0.0.0", "-Dkeycloak.import=realm-export.json -Dkeycloak.migration.strategy=OVERWRITE_EXISTING"]
...