У меня есть угловой клиент SPA. Api в качестве сервера ресурсов для обслуживания SPA и IdentityServer4 в качестве OAuth2. Все они в докере.
Angular использует плагин angular-oauth2-oidc.
Проблема связана с URI эмитента и Angular или Resource Server. Потому что докер, сервер ID4 получает другое имя вместо localhost: 5000. например, sso: 5000.
Поэтому, когда Angular пытается загрузить документ обнаружения, возникает ошибка: издатель недействителен.
Если URI эмитента изменяется в параметрах конфигурации IdentityServer, то серверу ресурсов не удается проверить токен JWT, поскольку сервер ресурсов не знает URI localhost: 5000.
докер-compose.yml:
version: "3"
services:
database:
image: "microsoft/mssql-server-linux"
environment:
SA_PASSWORD: "@Password1"
ACCEPT_EULA: "Y"
ports:
- "44274:1433"
sso:
image: "jpproject/v1"
build:
context: .
dockerfile: sso.dockerfile
ports:
- "5000:5000"
depends_on:
- database
environment:
SQLSERVER_CONNECTION: "Server=database,1433;Initial Catalog=JpProject;Persist Security Info=False;User ID=sa;Password=@Password1;MultipleActiveResultSets=False;Connection Timeout=30;"
ASPNETCORE_ENVIRONMENT: "Development"
ISSUER_URI: "http://localhost:5000"
user-management-api:
build:
context: .
dockerfile: user-management.dockerfile
ports:
- "5003:5003"
depends_on:
- database
- sso
environment:
SQLSERVER_CONNECTION: "Server=database,1433;Initial Catalog=JpProject;Persist Security Info=False;User ID=sa;Password=@Password1;MultipleActiveResultSets=False;Connection Timeout=30;"
ASPNETCORE_ENVIRONMENT: "Development"
AUTHORITY: "http://localhost:5000"
user-management-ui:
container_name: user-management-ui
build:
context: .
dockerfile: ui-user-management.dockerfile
ports:
- 4200:80
Есть способ указать докеру использовать localhost вместо имени хоста. Или лучший способ иметь один и тот же URI эмитента между Api и SPA.