2013-03-11 2 views
0
내가 따랐다 http://www.codeproject.com/Tips/376810/ASP-NET-WEB-API-Custom-Authorize-and-Exception-Han 내가이

ASP.NET 웹 API는 항상 반환 (401) 무단 오류

[mycustomattribute처럼 내 컨트롤러 속성 이름을 사용하여 다음과 같은 링크를 asp.net 웹 api.I에 사용자 인증을 사용하고

]

공용 클래스 userController : apicontroller {

}

하지만 항상 401 unauthorize을 보여줍니다 인증 상태가 승인되는 예외적 인 예외. 나는 사용자 정의 권한 부여 속성을 작성하기위한 링크에 정확히 와트를 따라갔습니다.

내 사용자 지정 권한 부여 클래스

public class tokenAuthorize : AuthorizeAttribute 
{ 
    DBEntity _objScrumDBEntities = new DBEntity(); 
    public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     base.OnAuthorization(actionContext); 
     if (actionContext.Request.Headers.GetValues("authenticationToken") != null) 
     { 
      // get value from header 
      string authenticationTokenValue = Convert.ToString(actionContext.Request.Headers.GetValues("authenticationToken").FirstOrDefault()); 
      ObjectParameter m_tokenParam = new ObjectParameter("status", typeof(string)); 
      _objScrumDBEntities.validateToken(authenticationTokenValue, m_tokenParam); 
      string status = Convert.IsDBNull(m_tokenParam.Value) ? null : (string)m_tokenParam.Value; 
      if (status == "false") 
      { 
       HttpContext.Current.Response.AddHeader("authenticationToken", authenticationTokenValue); 
       HttpContext.Current.Response.AddHeader("AuthenticationStatus", "NotAuthorized"); 
       // actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Forbidden); 
       return; 
      } 

      else 
      { 
       HttpContext.Current.Response.AddHeader("authenticationToken", authenticationTokenValue); 
       HttpContext.Current.Response.AddHeader("AuthenticationStatus", "Authorized");     
       return; 

      } 
      //return; 
     } 
     //actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.ExpectationFailed); 
     //else 
     // actionContext.Response.ReasonPhrase = "Please provide valid inputs"; 
    } 
} 

내 컨트롤러 System.Web.Security.Roles.GetRolesForUser (사용자 이름)이 자동으로 때를 미혹하지 않는 것 같다

[tokenAuthorize] 
public class myController : ApiController 
{ 

    public IEnumerable<organization> Get() 
    { 
     return _objOrgRepository.GetAll(); 
    } 
+0

을 할 수 전달 역할에 대해 그들을 비교해야하십시오 몇 가지 코드를 공유하십시오. 이것은 우리가 분석하기에는 너무 적습니다 –

+0

코드는 –

+0

입니다. 서비스를 요청할 때 authenticationToken http 헤더가 있습니까? – cellik

답변

0

사용자 정의 AuthorizeAttribute 및 사용자 정의 RoleProvider가 있어야합니다.

따라서, 사용자 정의 AuthorizeAttribute에 당신은 당신의 데이터 소스에서 역할의 목록을 검색 한 다음 AuthorizeAttribute.Try에 매개 변수로 당신을 아래의 코드

public class myController : ApiController 

{ 

    [RequestKeyAuthorizeAttribute(Roles="Admin,Bob,Administrator,Clue")] 
    public HttpResponseMessage Get() 
    { 
     return Request.CreateResponse(HttpStatusCode.OK, "RequestKeyAuthorizeTestController"); 
    } 
+0

고마워 트래비스,하지만 내 목표는 헤더에서받은 토큰을 기반으로 권한을 부여하는 것입니다.하지만 "AuthorizeAttribute"보다는 "AuthorizationFilterAttribute"에서 내 customAuthorize 클래스를 상속하고 roles.But을 기반으로하는 라우트가 아닙니다. –