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;
}
웹서비스에 접속하면 익스텐션은 로그기록을 남겨준다
이건 내가 만든 설명서 ㅋㅋ
폼인증, 솝헤더, 솝익스텐션, 사용법