Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problems configuring external provider such as Azure AD #175

Open
diego-gtm opened this issue Sep 22, 2023 · 1 comment
Open

Problems configuring external provider such as Azure AD #175

diego-gtm opened this issue Sep 22, 2023 · 1 comment
Assignees
Labels
question Further information is requested

Comments

@diego-gtm
Copy link

diego-gtm commented Sep 22, 2023

Detail of the execution environment

I´m using the images generated in the DockerHub.

I´ve set up my proper values

Running a docker-compose up - d to get up my execution

Works properly !

But now I want to use Azure AD as an external provider (my intention is my users - configured on mi IDS - , can use their own Azure AD accounts ir order to log in.

Configuration sample

On my docker-compose.yaml i´ve changed proper values (I think relevant section is skoruba-duende-identityserver-sts-identity
and ExternalProvidersConfiguration values but I put my hole file)

I have omitted sensitive sections, as well as values with private information (those with XXX as value).

version: '3.4'
services:
  nginx-proxy:
    image: jwilder/nginx-proxy
    container_name: nginx
    ports:
      - '443:443'
    environment:
      - VIRTUAL_PORT=443
      - VIRTUAL_PROTO=https
      - DEFAULT_HOST=sts.mydomain.com
    networks:
      proxy: null
      identityserverui:
        aliases:
          - sts.mydomain.com
          - admin.mydomain.es
          - admin-api.mydomain.es
    restart: always
  ids.admin:
    image: skoruba/duende-identityserver-admin:1.2.0   
    container_name: skoruba-duende-identityserver-admin
    environment:
      - VIRTUAL_HOST=admin.mydomain.es
      - VIRTUAL_PORT=443
      - VIRTUAL_PROTO=https 
      - 'AdminConfiguration__IdentityAdminBaseUrl=https://admin.mydomain.es'
      - 'AdminConfiguration__IdentityAdminRedirectUri=https://admin.mydomain.es/signin-oidc'
      - 'AdminConfiguration__IdentityServerBaseUrl=https://sts.mydomain.com'
      - 'AdminConfiguration__ClientId=XXX'
      - 'AdminConfiguration__ClientSecret=XXX'
      - 'AdminConfiguration__OidcResponseType=code'
      - DockerConfiguration__UpdateCaCertificate=true
      - ASPNETCORE_ENVIRONMENT=Production
      - 'ASPNETCORE_URLS=https://+:443' 
    command: dotnet Skoruba.Duende.IdentityServer.Admin.dll /seed
    depends_on:
      - db
      - gtmotive.issidentityserver6.sts.identity
    volumes:
      XXX
    networks:
      identityserverui: null
  ids.admin.api:
    image: skoruba/duende-identityserver-admin-api:1.2.0
    container_name: skoruba-duende-identityserver-admin-api
    environment:
      - VIRTUAL_HOST=admin-api.mydomain.es
      - VIRTUAL_PORT=443
      - VIRTUAL_PROTO=https 
      - AdminApiConfiguration__RequireHttpsMetadata=true
      - 'AdminApiConfiguration__ApiBaseUrl=https://admin-api.mydomain.es'
      - 'AdminApiConfiguration__IdentityServerBaseUrl=https://sts.mydomain.com'
      - DockerConfiguration__UpdateCaCertificate=true
      - ASPNETCORE_ENVIRONMENT=Production
      - 'ASPNETCORE_URLS=https://+:443' 
    networks:
      identityserverui: null
  ids.sts:
    image: skoruba/duende-identityserver-sts-identity:1.2.0    
    container_name: skoruba-duende-identityserver-sts-identity
    environment:      
      - VIRTUAL_HOST=sts.mydomain.com
      - VIRTUAL_PORT=443
      - VIRTUAL_PROTO=https
      - 'AdminConfiguration__IdentityAdminBaseUrl=https://admin.mydomain.es'
      - 'AdvancedConfiguration__IssuerUri=https://sts.mydomain.com'
      - DockerConfiguration__UpdateCaCertificate=true
      - ASPNETCORE_ENVIRONMENT=Production
      - 'ASPNETCORE_URLS=https://+:443'
      - 'ExternalProvidersConfiguration__UseAzureAdProvider=true'
      - 'ExternalProvidersConfiguration__AzureAdClientId=XXX'
      - 'ExternalProvidersConfiguration__AzureAdTenantId=XXX'
      - 'ExternalProvidersConfiguration__AzureInstance=XXX'
      - 'ExternalProvidersConfiguration__AzureAdSecret=XXX'
      - 'ExternalProvidersConfiguration__AzureAdCallbackPath=https://sts.mydomain.com/signin-microsoft'
      - 'ExternalProvidersConfiguration__AzureDomain=mydomain.com'
    depends_on:
      - db
    networks:
      identityserverui:
        aliases:
          - sts.mydomain.com
  db:
    XXX
    networks:
      identityserverui: null    
volumes:
  dbdata:
    driver: local
networks:
  proxy:
    driver: bridge
  identityserverui:
    driver: bridge

Relevant parts of the log file

This is my problem

skoruba-duende-identityserver-sts-identity  | [2023-09-22T10:40:26.1227397+00:00][EROR][9][Microsoft.AspNetCore.Server.Kestrel] Connection id ""0HMTRB1AEDB4Q"", Request id ""0HMTRB1AEDB4Q:00000002"": An unhandled exception was thrown by the application.
skoruba-duende-identityserver-sts-identity  | System.ArgumentException: The path in 'value' must start with '/'. (Parameter 'value')
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Http.PathString..ctor(String value)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Http.PathString.FromUriComponent(String uriComponent)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Http.PathString.op_Implicit(String s)
skoruba-duende-identityserver-sts-identity  |    at Skoruba.Duende.IdentityServer.STS.Identity.Helpers.StartupHelpers.<>c__DisplayClass8_0.<AddExternalProviders>b__1(MicrosoftIdentityOptions options) in /src/src/Skoruba.Duende.IdentityServer.STS.Identity/Helpers/StartupHelpers.cs:line 422
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.ConfigureNamedOptions`1.Configure(String name, TOptions options)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsMonitor`1.<>c__DisplayClass10_0.<Get>b__0()
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.CreateValue()
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsMonitor`1.Get(String name)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Identity.Web.MicrosoftIdentityWebAppAuthenticationBuilderExtensions.<>c__DisplayClass5_0.<AddMicrosoftIdentityWebAppInternal>b__3(OpenIdConnectOptions options, IServiceProvider serviceProvider, IOptionsMonitor`1 mergedOptionsMonitor, IOptionsMonitor`1 msIdOptionsMonitor, IOptions`1 msIdOptions)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.ConfigureNamedOptions`5.Configure(String name, TOptions options)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsFactory`1.Create(String name)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsMonitor`1.<>c__DisplayClass10_0.<Get>b__0()
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
skoruba-duende-identityserver-sts-identity  |    at System.Lazy`1.CreateValue()
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsCache`1.GetOrAdd(String name, Func`1 createOptions)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.Extensions.Options.OptionsMonitor`1.Get(String name)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Authentication.AuthenticationHandler`1.InitializeAsync(AuthenticationScheme scheme, HttpContext context)
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme)
skoruba-duende-identityserver-sts-identity  |    at Duende.IdentityServer.Hosting.FederatedSignOut.FederatedSignoutAuthenticationHandlerProvider.GetHandlerAsync(HttpContext context, String authenticationScheme) in /_/src/IdentityServer/Hosting/FederatedSignOut/FederatedSignoutAuthenticationHandlerProvider.cs:line 33
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
skoruba-duende-identityserver-sts-identity  |    at Duende.IdentityServer.Hosting.DynamicProviders.DynamicSchemeAuthenticationMiddleware.Invoke(HttpContext context) in /_/src/IdentityServer/Hosting/DynamicProviders/DynamicSchemes/DynamicSchemeAuthenticationMiddleware.cs:line 47
skoruba-duende-identityserver-sts-identity  |    at Duende.IdentityServer.Hosting.BaseUrlMiddleware.Invoke(HttpContext context) in /_/src/IdentityServer/Hosting/BaseUrlMiddleware.cs:line 27
skoruba-duende-identityserver-sts-identity  |    at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.ProcessRequests[TContext](IHttpApplication`1 application)

My question is

What am I doing wrong?

It is I´m running out of ideas .... I suppose there is something related to AzureAdCallbackPath

Any thoughts?

@diego-gtm diego-gtm added the question Further information is requested label Sep 22, 2023
@diego-gtm
Copy link
Author

I've finally got the configuration working !!

Mixing my configuration with another in open issues made it work. ( #73 ) ty @erossini and @erossini-chi

Fixing my config

# this is important !!! I was putting my teenant Id and that is worng
AzureInstance": "https://login.microsoftonline.com/" this should be fine for everyone
# this is important too, I was putting my whole uri http://XXX.com/signin-aad-oidc, and it is enought to put the controller path
AzureAdCallbackPath": "/signin-aad-oidc"

Now I only wonder which controller would be the most correct one value on AzureAdCallbackPath

  1. /signin-microsoft
  2. /signin-aad-oidc

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Further information is requested
Projects
None yet
Development

No branches or pull requests

2 participants