私たちのプロジェクトは、もともと認証証明書の紺碧を使用して、ログインプロセスで発見されたが、私はバー自分自身を取得したいので、専用の認証サーバカザフスタンではない、非常に単純にそれを行うことを期待していなかった、遅すぎる、簡単ですツール。
クラスのログかどうかを確認してください
/// <要約> /// 認定クラスは継承 /// </要約> パブリック クラス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; } } }