2017-12-19 2 views
1

MVC 응용 프로그램에서 OpenID-Connect를 사용하여 Azure AD 인증을 구현하고 관리되는 역할 - 클레임을 사용하여 응용 프로그램에서 역할 관리를 사용하도록 설정했습니다.사용자 지정 클레임 MVC 응용 프로그램의 ID 관리

이제 클레임 수가 매우 높기 때문에 신청서에서 클레임을 관리하는 데 새로운 문제가 있습니다.

SQL DB : 1) 마스터 항 표 2) 역할 표 3) 역할 ID - ClaimID 대응표 4) UserClaims 표 - 아이디와 역할 ID 매핑을 유지한다 이것은 어디

C 중 # :

var identity = new ClaimsIdentity(new[] { 

     new Claim("UserMgt:Maintenance", "True"), 
     new Claim("UserMgt:Add", "True"), 
     new Claim("UserMgt:Add", "True") 
}, 
    "ApplicationCookie"); 

. . .

성능이 저하되는지 확실하지 않습니다. 우리는 Azure에서 응용 프로그램을 호스팅하고 사용자가 로그인 한 즉시 재발행에 클레임을 저장 한 다음 모든 페이지에서 해당 클레임을 읽음으로써 각 페이지/모듈에서 액세스 권한을 제공합니다.

더 좋은 제안이 있으면 알려주세요.

고맙습니다.

답변

0

로그인 요청은 쿠키에 저장됩니다. 따라서 쿠키를 읽는 것은 매우 빠르며 데이터베이스에 액세스 할 필요가 없습니다.

그러나 쿠키 크기가 문제가 될 수 있습니다. 쿠키에 너무 많은 데이터를 넣으면 요청에 과도하게 처리됩니다. 하나의 쿠키는 최대 4Kb까지 가능하며 최대 16Kb 헤더까지 사용할 수 있습니다 (브라우저에 따라 다름). 따라서 당신이 그 한도를 치고 있다면, 당신이 주장하는 것을 다시 생각해 볼 가치가 있습니다. (201 요청을 얻기 위해 20 글자를 올리는 AJAX 요청을 상상해보십시오.하지만 네트워크를 통해 약 16KB의 헤더를 포옹합니다).

분명히 클레임은 쿠키로 암호화되지만 데이터 증가 비율은 약 1.1입니다. 나는. 클레임에 1Kb의 데이터가있는 경우 실제 쿠키 크기는 약 1.1Kb입니다 (동일한 문제를 조사 할 때 쿠키 크기를 사용하여 얻은 결과)

이러한 제한을 두드리지 않는다면 너무 걱정하지 말라고.

+0

답장을 보내 주셔서 감사합니다. 이 문제에 대한 해결책이 있습니까? 페이지 탐색을 기반으로 클레임을 추가 할 생각이었습니다. 해당 페이지의 작업 권한은 클레임으로 변환됩니다. 사용자가 해당 페이지에서 벗어나면 소유권 주장이 사용자 ID에서 해제됩니다. 그래서 우리는 인증 쿠키의 크기를 제어 할 수 있습니다 .. 나는이 시나리오를 처리하기 위해 더 나은 솔루션을 모색하고 있습니다. 모든 주장을 덤프하고 페이지를 느리게하고 싶지 않습니다 ... – user3527063

+0

내 솔루션은 모든 것을 클레임에 넣는 것이 었습니다. 그것이 문제가 될 때까지 그것에 대해 걱정하지 마십시오. 생산 과정에서 많은 양의 데이터가 아니라는 사실이 밝혀졌습니다. 특히 숫자로 권한을 인코딩하는 경우. 허용 된 작업에 대한 페이지 및 열거 형에 enum을 사용했습니다. 그래서 클레임은'새로운 클레임 ("42", "1")과 같습니다. 여기서'42'는'MyClaimsEnum.UserManagement'로,'1'은'MyEnumActions.View'로 변환됩니다. – trailmax

+0

약 50 개의 소유권 주장 (일부 소유권은 동일한 소유권 주장에 해당)과 4 개의 작업 (보기, 만들기, 수정, 삭제)이있는 약 100 개의 다른 페이지가 있습니다. 그리고 주장에 너무 많은 데이터가있는 문제는 없었습니다. 다른 말로하면, 아직 가지고 있지 않은 문제를 해결하려고한다는 말입니다. – trailmax

관련 문제