9

Azure Active Directory에 대한 인증서 기반 인증을 사용하도록 Active Directory를 사용하고 몇 가지 .NET 응용 프로그램을 설정하려고합니다. 그러면 Active Directory를 사용하여 SQL Azure DB.수명이 긴 Entity Framework 내에서 Azure AD 액세스 토큰 새로 고침

내가 겪고있는 문제는 응용 프로그램의 일부가 너무 오래 사는 DbContext를 사용한다는 것입니다. ADAL 라이브러리는 만료 5 분 이내에 요청하면 액세스 토큰을 새로 고칩니다. 문제는 내 DbContext 중 일부가 5 분 이상 지속될 수 있다는 것입니다. 따라서 DbContext의 수명이 다가 오면 액세스 토큰은 더 이상 적합하지 않으며 SaveChanges를 시도 할 때 데이터베이스 연결 예외가 발생합니다.

내 DbContexts를 5 분 미만으로 리팩토링하는 것을 제외하고는이 문제를 해결할 수있는 방법이 있습니까?

내가 시도한 한 가지는 Entity Framework에서 만료 된 액세스 토큰 예외를 catch 한 다음 현재 액세스 토큰을 새 액세스 토큰이있는 새로 생성 된 토큰으로 바꿀 수있는 몇 가지 훅을 찾는 것이 었습니다. 만료 토큰 예외가 발생하면 EF 커스텀 연결 팩토리를 통과 한 다음 실행 전략을 사용하여 다시 시도했습니다. 이것은 사용자 지정 실행 전략에서 현재 연결을 수정하거나 다시 만들 수 없기 때문에 나에게 효과적이지 않습니다.

모든 아이디어는 크게 감사하겠습니다.

감사합니다.

+0

이것은 나쁜 생각처럼 들립니다. 컨텍스트는 작업 단위에서 살기위한 것이며 5 분은 동일한 컨텍스트에서 많은 작업 단위를 수행하는 것처럼 들립니다. 이렇게하면 컨텍스트에서 너무 많은 일을하는 경우 높은 메모리 사용량과 성능 저하와 같은 다른 문제가 발생할 수 있습니다. 내 권장 사항은 귀하의 코드를 리팩터링하는 것일 것입니다. (이 특정 문제와 상관없이) –

+0

사용중인 EF 버전과 Identity 프레임 워크를 사용하고 있습니까? – GaelSa

+0

액세스 토큰을 DbContext에 전달하는 방법은 무엇입니까? DbContext가 오래 살아있을지라도, 기본 DbConnection은 오래 살아 있지 않으며, 모든 SQL 쿼리에 대해 열리고 닫힙니다. –

답변

2

코드를 리 팩토링하는 것이 가장 좋습니다.

수 없으면 타이머를 4 분마다 실행하도록 설정할 수 있으며이 타이머에서는 DBContext를 사용하여 간단한 쿼리를 수행합니다 (필요하면 인증 토큰을 새로 고침하여 SaveChanges). DBContext를 동시에 사용하여 간단한 쿼리와 SaveChanges를 피하려면 DBContext를 잠그는 동안 DBContext를 보호해야합니다.

관련 문제