development

AuthorizeAttribute를 사용한 ASP.NET 웹 API 권한 부여

big-blog 2020. 12. 8. 18:53
반응형

AuthorizeAttribute를 사용한 ASP.NET 웹 API 권한 부여


새로운 ASP.NET Web API 베타 사용. 사용자를 인증하는 제안 된 방법이 작동하지 않는 것 같습니다. 제안 된 접근 방식은 [Authorize]API 컨트롤러에 필터를 추가하는 것 입니다. 예를 들면 :

[Authorize] 
public IEnumerable<Item> Get()
{
    return itemsService.GetItems();
}

하지만 의도 한대로 작동하지 않습니다. 리소스를 요청하면 로그인 양식으로 리디렉션됩니다. RESTful webapi에는 적합하지 않습니다.

이 작업을 어떻게 진행해야합니까? 향후 버전에서 다르게 작동합니까? 아니면 자체 작업 필터를 구현해야합니까?


을 사용하고 System.Web.Http.AuthorizeAttribute있고 System.Web.Mvc.AuthorizeAttribute. 이것은 전에 나를 물었다. WebAPI 팀이 MVC 사용자에게 익숙해 지도록 모든 것을 하나로 모 으려고 노력하고 있다는 것을 알고 있지만 뭔가 불필요하게 혼란 스러울 것 같습니다.


인증 모드를 없음으로 설정하십시오 .

<authentication mode="None" />

없음 인증을 지정하지 않습니다. 응용 프로그램은 익명 사용자 만 필요하거나 응용 프로그램이 자체 인증을 제공합니다.

http://msdn.microsoft.com/en-us/library/532aee0e.aspx

물론 헤더 나 토큰 등을 통해 일종의 인증을 제공해야합니다. Windows 를 지정 하고 헤더를 통해 내장 된 인증을 사용할 수도 있습니다.

이 사이트가 API와 Forms 설정 이 필요한 실제 페이지 사이에 혼합되어있는 경우 고유 한 처리를 작성해야합니다.

속성 HttpUnauthorizedResult이 수행 하는 모든 작업은 인스턴스를 반환 하고 리디렉션은 속성 외부에서 수행되므로 문제가 아니라 인증 공급자입니다.


마지막으로 ASP.NET MVC 4 WebAPI 인증 에서 해결책을 찾았습니다.

이 문서에서는이 문제를 해결하는 방법을 보여줍니다.


양식 인증 모듈이이 작업을 자동으로 수행하므로 로그인 페이지로 리디렉션됩니다. 이 동작을 제거하려면 Paul이 제안한대로 폼 인증을 비활성화하십시오. 보다 REST 친화적 인 접근 방식을 사용하려면 HTTP 인증 지원 구현을 고려해야합니다. 이 블로그 게시물 http://www.piotrwalat.net/basic-http-authentication-in-asp-net-web-api-using-membership-provider/를 살펴보십시오 .


ASP.NET 5 MVC 및 Web API 컨트롤러를 모두 보호 할 수 있는 새로운 Microsoft.AspNet.Authorization System을 도입했습니다 .

자세한 내용은 여기 내 관련 답변을 참조하십시오.

최신 정보:

2 년 전에는 Microsoft.AspNetCore.Authorization이었습니다.

@Chris Haines가 지적했듯이. 이제 Microsoft.AspNetCore.Authorization에 있습니다.

.NET core 1.0에서 2.0으로 많은 네임 스페이스가 이동되었습니다. 그리고 .net 클래식과 코어 사이의 확산 기능은 모호했습니다. 이것이 바로 Microsoft가 .net 표준을 도입 한 이유입니다.

.net 표준


또한 내 대답을 살펴보십시오 : ASP.NET Web API를 보호하는 방법

편의를 위해 사용할 수있는 NuGet 패키지가 있습니다.


역할을 사용하는 경우 철자가 올바른지 확인하십시오.

귀하의 역할이 '관리자'인 경우, 예를 들어 작동하지 않습니다.

    [System.Web.Http.Authorize(Roles = "Administator")]

이것도 마찬가지입니다.

    [System.Web.Http.Authorize(Roles = "Administrators")]

죄송합니다 ...


[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
[Produces("application/json")]
[Route("api/[controller]")]
public class CitiesController : Controller
{
        [HttpGet("[action]")]
        public IActionResult Get(long cityId) => Ok(Mapper.Map<City, CityDTO>(director.UnitOfWork.Cities.Get(cityId)));
}

사용하다

[Authorize (AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]

인증 유형으로 필터링

참고URL : https://stackoverflow.com/questions/9531475/asp-net-web-api-authorization-with-authorizeattribute

반응형