많은 블로그 게시물과 stackoverflow 답변을 읽었지 만 여전히 클레임 기반 인증 및 권한 부여를 사용하는 실제 공개 소스 프로젝트를 찾을 수 없어 실제로 이것을 구현하는 방법에 대한 아이디어.ASP.NET MVC의 클레임 기반 권한 부여
지금까지 내가 알 수있는 것은 Thinktecture.IdentityModel과 this blog은 샘플 웹 사이트에서 소유권 주장 기반 인증을 구현합니다. 여러분이 클레임을 사용하는 일부 오픈 소스 프로젝트를 가르쳐 주실 수 있다면 정말 도움이 될 것입니다.
내가 아는 것은 데이터베이스를 사용하는 응용 프로그램에 대한 클레임을 검색하는 방법입니다.
지금까지 내가 시도한 것은 데이터베이스에있는 메모리 클레임을 사용하여 CustomClaimsTransformer
과 CustomAuthorisationManager
과 같은 것을 만들었습니다.
public class CustomClaimsTransformer : ClaimsAuthenticationManager
{
public override ClaimsPrincipal Authenticate(string resourceName, ClaimsPrincipal incomingPrincipal)
{
//validate name claim
string nameClaimValue = incomingPrincipal.Identity.Name;
return CreatePrincipal(nameClaimValue);
}
private ClaimsPrincipal CreatePrincipal(string userName)
{
int userId = ClaimStore.Users.First(u => u.Value == userName).Key;
var claims = ClaimStore.ClaimsSet.Where(c => c.Key == userId);
var claimsCollection = claims.Select(kp => kp.Value).ToList();
return new ClaimsPrincipal(new ClaimsIdentity(claimsCollection, "Custom"));
}
}
public class CustomAuthorisationManager : ClaimsAuthorizationManager
{
public override bool CheckAccess(AuthorizationContext context)
{
string resource = context.Resource.First().Value;
string action = context.Action.First().Value;
if (action == "Show" && resource == "Code")
{
bool likesJava = context.Principal.HasClaim(ClaimStore._httpMyclaimsUsers, "True");
return likesJava;
}
else if (action == "Read" && resource == "Departments")
{
bool readDeps = context.Principal.HasClaim(ClaimStore._httpMyclaimsDepartments, "Read");
return readDeps;
}
return false;
}
}
너무 많은 IF 조건을 사용하지 않고 실제 시나리오에서이를 구현하는 방법은 무엇입니까?
어떻게 끝냈습니까? 당신은 대답을 제공해주십시오. – Moes