.NET WebAPI에서 컨트롤러 전체에 분산되지 않고 중앙 위치에 모든 권한 부여 규칙을 포함하는 방법을 만들었습니다. 이 중앙 집중화가 더 자주 수행되지 않는 이유가 궁금합니다. 반향/보안 문제가 있습니까?.NET WebAPI 중앙 인증
내 현재 접근법은 모든 권한 부여 데이터를 포함하는 DelegatingHandler를 사용하여 (아래 코드) 사전을 작성하여 App_Start 중에 작성하는 것입니다. 사전 키는 컨트롤러 및 작업의 튜플이며 값은 권한있는 역할입니다. DelegatingHandler는 WebAPI의 라우팅 구성을 연결하여 호출 된 컨트롤러를 가져온 다음 사전을 사용하여 요청이 허용되는지 여부를 결정합니다.
사전 :
var authorizations = new Dictionary<Tuple<string, string>, string>();
authorizations.Add(new Tuple<string, string>("values", "get"), "public");
authorizations.Add(new Tuple<string, string>("values", "put"), "private");
DelegatingHandler : 요약
public class SecurityDelegateHandler : DelegatingHandler
{
private readonly Dictionary<Tuple<string, string>, string> _authorizations;
public SecurityDelegateHandler(Dictionary<Tuple<string, string>, string> auth)
{
_authorizations = auth;
}
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var config = GlobalConfiguration.Configuration;
var controllerSelector = new DefaultHttpControllerSelector(config);
var descriptor = controllerSelector.SelectController(request);
string restrictions;
if (!_authorizations.TryGetValue(
new Tuple<string, string>(descriptor.ControllerName.ToLower(),
request.Method.ToString().ToLower()), out restrictions))
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
request.CreateResponse(HttpStatusCode.Forbidden,
"Access denied on unconfigured actions"),
cancellationToken);
}
if (!(Roles.Provider).GetRolesForUser(
HttpContext.Current.User.Identity.Name).Any(r =>
restrictions.Contains(r)))
{
return Task<HttpResponseMessage>.Factory.StartNew(() =>
request.CreateResponse(HttpStatusCode.Forbidden,
"Access Denied"), cancellationToken);
}
return base.SendAsync(request, cancellationToken);
}
}
, 내 질문은 다음과 같습니다
- 이 역할 기반 인증 구현에 문제가 있습니까 방법?
- WebAPI의 중앙 집중식 인증을 처리하는 좋은 패키지가 있습니까? FluentSecurity, but that doesn't appear to support WebAPI에 대해 살펴 보았습니다.
감사합니다.
사용자 정의 AuthorizeFilter를 전역으로 등록하는 것은 어떻습니까? –
글로벌 필터를 사용하면 DelegatingHandler가 필요하지 않습니다. 중앙 집중식 인증을 사용하는 데 문제가 있는지 여부는 여전히 문제가됩니다. –
귀하의 필요에 맞는 것이라면 어떤 문제도 보이지 않습니다. 여러 권한 부여 필터는 다른 컨트롤러 또는 작업에 대해 다른 규칙이있는 경우 유용하지만 항상 동일한 프로세스라면 더 효율적으로 중앙 집중화해야합니다. –