2015-01-26 8 views
0

사용자 지정 인증을 수행해야하는 웹 API가 있습니다. 나는의 OAuth 토큰을 사용하고 있는데 나는 내가 올바른 주요 유형이없는 AuthorizationContext를 만들려고 할 때 문제가 발생 authorizationManagerASP.Net 웹 API 사용자 (System.Security.Claims.ClaimsPrincipal)의 IClaimsPrincipal 웹 API의 사용자 지정

using Microsoft.IdentityModel.Claims; 
using System.Diagnostics; 
using System.Linq; 

public override bool CheckAccess(AuthorizationContext context){ 
    public override bool CheckAccess(AuthorizationContext context) 
    { 
     //authorization code here 
    } 
} 

를 구현하여 추가 검사를 할 수있다 생각했다. 웹 API 호출에서 새로운 AuthorizationContext에 필요한 IClaimsPrincipal에 캐스팅 할 수없는 System.Security.Claims.ClaimsPrincipal 인 사용자를 얻었습니다. 다음과 같은 오류에 물론 결과의

var authorizationContext = new AuthorizationContext(principal, "resource", "action");//System.Security.Claims.ClaimsPrincipal is the wrong type of principal here, but is what user is on Web API call. 

이 :

가 'System.Security.Claims.ClaimsPrincipal'에서 변환 할 수 없습니다에 'Microsoft.IdentityModel.Claims.IClaimsPrincipal'는

다른 뭔가가 있나요 ClaimsAuthorizationManager보다 구현해야합니까? 내가 가지고있는 교장의 유형을 고려할 때 필요한 컨텍스트 객체를 생성하는 간단한 방법이 있습니까?

다른 Web API 물건의 대부분이 Microsoft.AspNet.Identity 또는 Microsoft.AspNet.Identity.Core에있는 동안 ClaimsAuthorizationManager가 Microsoft.IdentityModel.Claims에 있음을 확인했습니다. 아마도 이것이 옳은 것을 사용할 수 있습니다.

답변

0

실제로 단서에 표시된대로 잘못된 경로로 향하고있었습니다. 나는이 유사 System.Web.Http.AuthorizeAttribute을 구현 결국 내 WebApiConfig.cs에서 다음

using System; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web; 

public class AuthAttribute : System.Web.Http.AuthorizeAttribute 
{ 
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     //authorization stuff here 
    } 
} 

및 등록 방법에 추가 :

config.Filters.Add(new AuthAttribute());