Como configurar a delegação em um aplicativo ASP.Net Core 2.0 no Windows com usuários autenticados por meio do Azure AD

1

A configuração:

Eu tenho um aplicativo da Web escrito no ASP.NET Core 2.0 que é autenticado no AD do Azure usando o OpenID Connect. Ele está sendo executado em uma máquina que faz parte de um domínio do Azure AD. O aplicativo tem um aplicativo configurado no Azure AD.

O problema:

Gostaríamos de usar a conta de usuário do Azure AD para se conectar ao banco de dados do SQL Server, que reside em outra máquina (Windows). Até agora, tenho tentado usar a representação para conseguir isso.

Isso parece ser uma instância do problema do salto duplo, mas nada do que eu tentei funcionou.

Notas:

  • Os usuários acessarão o site pela Internet, fora do domínio, por isso não podemos confiar diretamente na autenticação do Windows
  • A autenticação via OpenID Connect está funcionando - recebo as informações e reivindicações esperadas do usuário
  • A identidade das reivindicações parece corresponder corretamente ao usuário do domínio
  • Eu posso representar um usuário obtendo uma WindowsIdentity usando credenciais de login (usando advapi32)

O que eu tentei:

  • Usando o S4UClient para obter uma WindowsIdentity - posso obter a WindowsIdentity, mas ela não é delegada.
  • Definindo SPNs para o servidor da web e processos, incluindo a criação de uma conta de serviço na qual o site é executado.
    • Atribuindo a delegação do Kerberos à máquina
  • Criando uma WindowsIdentity usando a declaração UPN - novamente, obtenho a WindowsIdentity, mas não consigo me conectar ao SQL Server.
  • Executando o site com a conta SYSTEM (sei que isso não é aconselhável, mas parece que não funciona de qualquer maneira, então ...)
  • Configurando a delegação restrita de Kerberos para o servidor sql a partir do servidor da web
  • Definir o site para usar a autenticação do Windows (com e sem autenticação anônima) e removeu todos os provedores, exceto Negociar.
  • Possivelmente outras coisas, atualizarei se / como eu pensar nelas.

Estou prestes a começar a discutir outras opções com a equipe de banco de dados, mas ter esse trabalho simplifica o gerenciamento de usuários.

Quaisquer pensamentos ou sugestões?

    
por Geoff 15.12.2017 / 23:17

1 resposta

0

É possível, mas há várias partes móveis que precisam ser colocadas para funcionar. Você pode ver o meu post para verificar se estão todos no lugar e alguns links para artigos de referência. Ele foi escrito para o asp.net core 1.1 rodando no net452, mas desde então eu atualizei esse aplicativo para o core 2.0 no net462 e além das alterações do setup.cs para autenticação, tudo ainda funciona.

    
por 16.02.2018 / 21:42