Я создал веб-приложение, когда я использую .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"]