0

asp.net web api でカスタム認証を使用してい ますこのようにコントローラーで属性名を使用します

[私のカスタム属性]

public class userController : apicontroller {

}

ただし、認証ステータスが承認されているにもかかわらず、常に 401 無許可の例外が表示されます。カスタム承認属性を作成するためのリンクに記載されているとおりに正確に従いました。

私のカスタム認可クラス

 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";
    }
}

そして私のコントローラー

[tokenAuthorize] 
public class myController : ApiController
{

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

1 に答える 1

0

カスタム AuthorizeAttribute とカスタム RoleProvider がある場合、System.Web.Security.Roles.GetRolesForUser(Username) が自動的に接続されないようです。

そのため、カスタム AuthorizeAttribute では、データ ソースからロールのリストを取得し、それらを AuthorizeAttribute にパラメーターとして渡されたロールと比較する必要があります。以下のコードを試してください。

public class myController : ApiController

{

     [RequestKeyAuthorizeAttribute(Roles="Admin,Bob,Administrator,Clue")]
     public HttpResponseMessage Get()
     {
         return Request.CreateResponse(HttpStatusCode.OK, "RequestKeyAuthorizeTestController");
  }
于 2013-03-11T13:35:23.050 に答える