asp.Netweb api 2クッキーによる認証


asp.Netweb api転送ゲート:
  • ドメイン間リクエストサポート
  • swaggerオンラインインタフェースドキュメント
  • ブラウザはリクエストを送信するたびにクッキーを持ってきます.これによってユーザーの認証を行うことができます.
    本稿では,要求ヘッダにsetCookieが含まれているか否かを特性により判断する.

    クッキーの設定

    HttpCookie cookie = new HttpCookie("UserInfo");//      Cookie   
    cookie.HttpOnly = true;      //  cookie         
    cookie.Values["name"] = "  ";       //  cookie  
    cookie.Values["age"] = 21;
    HttpContext.Current.Response.AppendCookie(cookie);     // cookie        
    
    クッキーの有効期限を負数にすると、クッキーをクリアする効果が得られます
    HttpCookie cookie = new HttpCookie("UserInfo");
    cookie.Expires = DateTime.Now.AddDays(-1);
    HttpContext.Current.Response.AppendCookie(cookie);
    
    使用方法の詳細:参照先

    クッキーの取得

    HttpContext context = HttpContext.Current;
    HttpCookie cookie = context.Request.Cookies["UserInfo"];
    string name = cookie["name"];
    

    プロパティを使用して、リクエストがクッキーを携帯しているかどうかを判断します。


    まず、プロパティクラスを作成します:CookieCheckAttribute
    public class CookieCheckAttribute : Attribute, IAuthorizationFilter
        {
            public bool AllowMultiple { get; }
    
            public async Task ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func> continuation)
            {
                IEnumerable headers;
                if (actionContext.Request.Headers.TryGetValues(name: "Cookie", out headers))
                {
                //    Cookie,     api  
                    return await continuation();
                }
                //    Cookie,       
                return new HttpResponseMessage {
                    Content = new StringContent(JsonConvert.SerializeObject(new {
                        result=-1,
                        message="    !"
                    }))
                };
            }
        }
    
    使用:メソッドの前に[CookieCheck]を付けるだけでOK
    [CookieCheck]
    [HttpPost]
    public string GetName(string id)
     {
        return "  ";
     }