프로그램/DotNet

커스텀 폼 인증(webservice)

milktea.kang 2010. 12. 14. 12:02

Web.Config 파일설정

 

<authentication mode="Forms">
   <forms loginUrl="~/p-works/login.aspx" name=".ASPXFORAUTH"/>
   <!--
        loginUrl : 基本認証画面
        name : 認証cookie名
        protection : 暗号化(All, SHA1, MD5)
      -->
  </authentication>
  <authorization>
   <!--<deny users="?"/>-->
   <!--認証されていないユーザはアクセスできない-->
  </authorization>

 

인증티켓발행하고 웹서비스에 솝헤더설정

protected void RedirectFromLoginPage(string username, string role, bool persistent)
    {

        // 認証チケットの作成
        // web.configの<forms timeout="..." />は参照しない
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
          1,                           // バージョン番号
          username,                    // 認証されたユーザーの名前
          DateTime.Now,                // チケットが発行された日時
            // チケットの有効期限
            // (60分を指定。forms要素のtimeoutは参照していない)
          DateTime.Now.AddMinutes(60),
            // trueならば認証チケットは永続(有効期限が無視される)
          persistent,
            // ユーザー定義データ(ロールの格納に利用)
          role);

        // チケットをクッキーに。クッキー名は<forms name="..." />を参照
        // <forms protection="..." />は参照せず無条件で暗号化
        HttpCookie cookie = new HttpCookie(
          FormsAuthentication.FormsCookieName,
          FormsAuthentication.Encrypt(ticket));
        // 永続化が指定されたら、クッキーの有効期限を50年に設定
        if (persistent)
        {
            cookie.Expires = DateTime.Now.AddYears(50);
        }

        Response.Cookies.Add(cookie);

        localhost.AuthHeader auhd = new localhost.AuthHeader();
        auhd.authversion = ticket.Version.ToString();
        auhd.authusername = ticket.Name;
        auhd.authdate = ticket.IssueDate.ToString();
        auhd.authpersistent = ticket.IsPersistent.ToString();
        auhd.authrole = ticket.UserData;
        localhost.Service locvice = WSProxyFactory.CreateProxy();
        locvice.AuthHeaderValue = auhd;

        // ログイン・フォームへリダイレクトされる前に
        // リクエストされていたページへ
        //Response.Redirect(FormsAuthentication.GetRedirectUrl(username, persistent));
    }

 

Global.asax에 등록해서 페이지이동시 자동으로 인증검색

void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie cookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];

        if (cookie == null) return;

        // 復号化する
        FormsAuthenticationTicket ticket = null;
        try
        {
            ticket = FormsAuthentication.Decrypt(cookie.Value);
        }
        catch (Exception ex)
        {
        }

        if (ticket == null) return;

        // UserDataプロパティに格納されているロール情報を参照する
        string role = ticket.UserData;

        // フォーム認証ではIPrincipalオブジェクトにGenericPrincipalクラス
        // が利用される。このクラスは、資格情報を表すFormsIdentityクラスと
        // ロール情報(string[]オブジェクト)から構成される
        FormsIdentity identity = new FormsIdentity(ticket);
        GenericPrincipal principal = new GenericPrincipal(identity, new string[] { role });

        // FormsIdentityオブジェクトをContext.Userに代入すると
        // Page.Userから参照可能になる
        Context.User = principal;
    }


웹서비스에 접속하면 익스텐션은 로그기록을 남겨준다

이건 내가 만든 설명서 ㅋㅋ

폼인증, 솝헤더, 솝익스텐션, 사용법