Conexão de Sql Atualizada Token de acesso do Azure AD dentro do Contexto do Entity Framework de longa duração

9

Estou tentando configurar alguns aplicativos .NET para usar a autenticação baseada em certificado no Active Directory do Azure e usar o Active Directory para autorizar meu acesso a um banco de dados do Sql Azure.

O problema que estou encontrando é que algumas partes do aplicativo usam um DbContext que pode ser um pouco longo demais. A biblioteca ADAL tenta atualizar o token de acesso se você solicitá-lo dentro de 5 minutos após sua expiração. O problema é que alguns dos meus DbContexts podem viver por mais de 5 minutos. Portanto, na metade da vida útil do DbContext, o token de acesso não é mais bom e, quando tento SaveChanges, recebo uma exceção de conexão com o banco de dados.

Além da refatoração para fazer meus DbContexts viverem em menos de 5 minutos, há algo que eu possa fazer para corrigir isso?

Uma coisa que tentei foi encontrar alguns ganchos no Entity Framework, onde eu poderia pegar a exceção de token de acesso expirado e, em seguida, substituir a conexão atual com uma recém-criada que tenha um novo token de acesso. Eu tentei passar um factory de conexão personalizado para o EF e, em seguida, usar uma estratégia de execução para tentar novamente quando recebo uma exceção de token expirado. Isso não está funcionando para mim, porque não posso modificar ou recriar a conexão atual de uma estratégia de execução personalizada.

Qualquer ideia seria muito apreciada.

Obrigado!

    
por Nick 14.09.2016 в 02:19
fonte

1 resposta

2

Refatorar seu código é certamente a melhor opção se você puder pagar.

Se você não puder, poderá definir um timer para disparar a cada 4 minutos e, nesse cronômetro, fazer uma consulta simples com o DBContext (isso atualizará seu token de autenticação, se necessário, garantindo que ainda seja válido quando você SaveChanges) . Você também precisará proteger o DBContext com algum bloqueio durante isso para evitar a consulta simples e SaveChanges usando o DBContext ao mesmo tempo.

    
por Philippe 27.09.2016 / 07:41
fonte