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 표준을 도입 한 이유입니다.
또한 내 대답을 살펴보십시오 : 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
'development' 카테고리의 다른 글
글로벌 iPhone 예외 처리를 어떻게 구현합니까? (0) | 2020.12.08 |
---|---|
내 테이블 스타일을 재정의하는 사용자 에이전트 스타일 시트? (0) | 2020.12.08 |
지금은 iPhone 앱을 설치할 수 없습니다. (0) | 2020.12.08 |
pandas에서 여러 열 삭제 (0) | 2020.12.08 |
WPF에서 AppBar 도킹 (WinAmp와 같은 화면 가장자리)을 어떻게 수행합니까? (0) | 2020.12.08 |