【问题标题】:Custom Authorize Attribute in Web APIWeb API 中的自定义授权属性
【发布时间】:2017-08-29 07:41:06
【问题描述】:

我想在 web api 控制器中创建我的自定义授权来检查用户的角色以及是否是活跃用户。到目前为止,这是我的代码,我还不知道如何/在此代码中覆盖什么。 谢谢!感谢您的帮助:D

using Avanza.Conference.Persistence;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Controllers;

namespace Avanza.Conference.Core.Extensions
{
    public class CustomAuthorizeAttribute : AuthorizeAttribute
    {
        ApplicationDbContext _context = new ApplicationDbContext(); // my entity  

        public override void OnAuthorization(HttpActionContext actionContext)
        {

            //Sample on what to do here??
            if (AuthorizeRequest(actionContext))
            {

                return;

            }

            HandleUnauthorizedRequest(actionContext);

        }

        protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
        {

            //Code to handle unauthorized request
            var challengeMessage = new HttpResponseMessage(HttpStatusCode.Unauthorized);
            challengeMessage.Headers.Add("WWW-Authenticate", "Basic");
            throw new HttpResponseException(challengeMessage);

        }

        private bool AuthorizeRequest(HttpActionContext actionContext)
        {

            //Sample on what to do here??

            return true;

        }

    }
}

【问题讨论】:

    标签: asp.net-mvc api web authorize-attribute


    【解决方案1】:

    这是您需要的示例,此检查请求包含身份验证令牌然后只允许执行请求。您可以在这里检查您的会话是否可用于检查用户是否登录。

    public class CustomAuthorize : System.Web.Http.AuthorizeAttribute
    {
        public override void OnAuthorization({
               System.Web.Http.Controllers.HttpActionContext actionContext)
        private readonly string Resource {get; set; }base.OnAuthorization(actionContext);
            if (actionContext.Request.Headers.GetValues("authenticationToken") != null)
                string authenticationToken =public Convert.ToStringCustomAuthorize(
               string resource, string actionContext.Request.Headers.GetValues("authenticationToken").FirstOrDefault()action);
                //authenticationTokenPersistant{
                // it is saved in someResource data= storeresource;
                // i will compare the authenticationToken sent byAction client= withaction;
                // authenticationToken persist in database against specific user, and act accordingly}
              public override ifvoid OnAuthorization(authenticationTokenPersistant != authenticationToken)
                {
                    HttpContextSystem.CurrentWeb.ResponseHttp.AddHeader("authenticationToken",Controllers.HttpActionContext authenticationTokenactionContext);
                    HttpContext.Current.Response.AddHeader("AuthenticationStatus", "NotAuthorized");{
                    actionContext.Response = actionContext.Requestbase.CreateResponseOnAuthorization(HttpStatusCode.ForbiddenactionContext);
                    return;
                }
    
     //Check your post authorization logic using Resource HttpContext.Current.Response.AddHeader("authenticationToken",and authenticationToken);Action
            HttpContext.Current.Response.AddHeader("AuthenticationStatus", "Authorized");
       //Your logic here to return return;
    authorize or unauthorized response }
        actionContext.Response = 
          actionContext.Request.CreateResponse(HttpStatusCode.ExpectationFailed);}
        actionContext.Response.ReasonPhrase = "Please provide valid inputs";
    }
    

    【讨论】:

    • 我正在寻找授权而不是身份验证,但仍然感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 2020-04-11
    • 2017-08-22
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-03
    相关资源
    最近更新 更多