C#のカスタム認証ログオン(承認)

私たちのプロジェクトは、もともと認証証明書の紺碧を使用して、ログインプロセスで発見されたが、私はバー自分自身を取得したいので、専用の認証サーバカザフスタンではない、非常に単純にそれを行うことを期待していなかった、遅すぎる、簡単ですツール。

クラスのログかどうかを確認してください

    ///  <要約> 
    /// 認定クラスは継承
     ///  </要約> 
    パブリック クラスRequestAuthorizeAttributeを:AuthorizeAttribute 
    { 
        公共 オーバーライド ボイドOnAuthorizationを(HttpActionContextするactionContext)
        { 
            // 認証が必要か、すでにログインしていない場合
            IF(SkipAuthorization(するactionContext)| | IsLogin(するactionContext))
                 のリターン; 

            actionContext.Response = のGetResponse(); 
        } 

        ///  <要約> 
        /// インターフェースの情報を返す
         ///  </要約> 
        プライベートHttpResponseMessageのGetResponse()
        { 
            VARの応答= ServiceResponse < BOOL > .WarningResponse(401、CommonConst.Msg_NoLogin、)。
            返すJsonHelper.ToHttpResponseMessage(応答)。
        } 

        ///  <要約> 
        /// 判断是否匿名使用接口
         ///  </要約> 
        プライベート 静的 ブールSkipAuthorization(HttpActionContextするactionContext)
        { 
            場合(!actionContext.ActionDescriptor.GetCustomAttributes <AllowAnonymousAttribute>()。任意の<AllowAnonymousAttribute> ))
                 リターン。actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes <AllowAnonymousAttribute>()は<AllowAnonymousAttribute> ();
            返す ; 
        } 

        ///  <要約> 
        /// 是否已经登录
         ///  </要約> 
        プライベート ブールIsLogin(HttpActionContextするactionContext)
        { 
            VARの認可= Guid.Empty.ToString()。// MD5值
            場合(actionContext.Request.Headers.Authorization!= nullの
            { 
                承認 =  actionContext.Request.Headers.Authorization.ToString();
            } 

            VARのユーザー= OperatorProvider.Provider.GetCurrent(許可)。
            リターン!ユーザー= nullを
        } 
    }

使用

ログインインターフェースデータキャッシングは、ユーザ情報を取得した後、GUIDなどのトークン、各トークンログが再生され、ウェブ端が内側のみリクエストヘッダにトークン、たびにトークン値を保存することができ、要求元に返されます。

BaseApiController処理は、キャッシュから取得したモデルで、ベースクラスに、ユーザは、サブクラス情報を使用することができ、キャッシュユーザ情報に、内部値トークンヘッダを取得します。

    [RequestAuthorize]
    public class BaseApiController : ApiController
    {

        /// <summary>
        /// 当前用户信息实体
        /// </summary>
        public OperatorModel CurrentUserModel
        {
            get
            {
                var values = HttpContext.Current.Request.Headers.GetValues("authorization");
                var authorization=Guid.Empty.ToString();
                if (values != null && values.Length > 0)
                    authorization = values[0];
                var currentUserModel = OperatorProvider.Provider.GetCurrent(authorization);
                if (currentUserModel == null)
                {
                    currentUserModel = new OperatorModel { LoginName = "admin" };
                }
                return currentUserModel;
            }
        }
    }

 

おすすめ

転載: www.cnblogs.com/dawenyang/p/11272534.html