.NET TIPS

[ASP.NET AJAX]クライアントサイド・スクリプトからカスタムの認証機能を利用するには?[2.0のみ、C#、VB]

山田 祥寛
2007/10/04

 「TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?」で紹介したように、ASP.NET AJAXでは「アプリケーション・サービス・ブリッジ」(以降、アプリケーション・ブリッジ)と呼ばれる機能を提供しており、この機能を利用することで、ASP.NET 2.0標準のメンバシップ・フレームワークを利用した認証処理を、クライアントサイド・スクリプトから呼び出すことが可能になる。もっとも、アプリケーションによっては、独自の認証処理を利用しているケースも少なくない。このようなケースでは、アプリケーション・ブリッジ機能を利用できないのだろうか。

 いやいや、そのようなことはない。アプリケーション・ブリッジ機能では、クライアントサイドのインターフェイスはそのままに、サーバ側の認証処理だけをカスタマイズするための機能を備えている。本稿では、このようなアプリケーション・ブリッジ機能で認証処理をカスタマイズする方法について紹介する。

 それではさっそく、具体的なサンプル・アプリケーションでもって、その手順を見ていくことにしよう。ここで紹介するのは、アプリケーション・ブリッジ機能を利用して、構成ファイルによるフォーム認証を利用するサンプルだ(参考:「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」)。

 なお、本稿で扱うサンプルは、前述の「TIPS:[ASP.NET]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?」で作成したLogin.aspxをベースにしている(本稿ではAuth.aspx)。Login.aspxについては、そのTIPSで解説しているので、アプリケーション・ブリッジ機能に関する設定も含め、詳細はそちらで確認していただきたい。

1. フォーム認証を利用するための準備を行う

 アプリケーション構成ファイル(Web.config)で認証処理を行うためには、Web.configに対するいくつかの設定が必要だ。設定の手順については、前述の「TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?」で紹介しているので、ちらを参照して手順を済ませておいていただきたい。

2. ログイン/ログアウト処理のためのサービス・メソッドを定義する

 独自の認証処理を実装するには、クライアントサイド・スクリプトから呼び出されてログイン/ログアウト処理を行うためのXML Webサービス・クラス(.asmxファイル)を用意しておく必要がある。まずは具体的な.asmxファイルのコードを見てみよう。

<%@ WebService Language="C#" Class="AuthCustom" %>

using System;
using System.Web;
using System.Web.Script.Services;
using System.Web.Security;
using System.Web.Services;
using System.Web.Services.Protocols;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ScriptService()]
public class AuthCustom : System.Web.Services.WebService {

  // ログイン時に呼び出されるLoginメソッド
  [WebMethod()]
  public bool Login(String userName, String password,
    bool createPersistentCookie) {
    // ユーザー名/パスワードを判定し、正しい場合は認証チケットを発行
    if (FormsAuthentication.Authenticate(userName, password)) {
      FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
      return true;
    } else {
      return false;
    }
  }

  // ログアウト時に呼び出されるLogoutメソッド
  [WebMethod()]
  public void Logout() {
    // 現在のユーザーでログアウト
    FormsAuthentication.SignOut();
  }
}
<%@ WebService Language="VB" Class="AuthCustom" %>

Imports System.Web
Imports System.Web.Script.Services
Imports System.Web.Services
Imports System.Web.Services.Protocols

<WebService(Namespace:="http://tempuri.org/")> _
<WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ScriptService()> _
Public Class AuthCustom
  Inherits System.Web.Services.WebService

  ' ログイン時に呼び出されるLoginメソッド
  <WebMethod()> _
  Public Function Login(ByVal userName As String, ByVal password As String, _
      ByVal createPersistentCookie As Boolean) As Boolean
    ' ユーザー名/パスワードを判定し、正しい場合は認証チケットを発行
    If FormsAuthentication.Authenticate(userName, password) Then
      FormsAuthentication.SetAuthCookie(userName, createPersistentCookie)
      Return True
    Else
      Return False
    End If
  End Function

  ' ログアウト時に呼び出されるLogoutメソッド
  <WebMethod()> _
  Public Sub Logout()
    ' 現在のユーザーでログアウト
    FormsAuthentication.SignOut()
  End Sub
End Class
カスタムの認証処理を規定するXML Webサービス・クラス(AuthCustom.asmx)(上:C#、下:VB)

 サンプル・アプリケーションの大きな流れについては、コード内のコメントを参照していただくとして、ここで注目していただきたいのは、以下の2点だ(なお、ここではXML Webサービス・クラスそのものの記法については割愛する。詳細については、「MSDN:ASP.NETを使用したXML Webサービス」を参照していただきたい)。

(1)XML Webサービス・クラスにはScriptService属性を付与する

 ScriptService属性(System.Web.Script.Services名前空間)は、該当のXML Webサービス・クラスがクライアント側スクリプトから呼び出し可能であるかどうかを表す。

 アプリケーション・ブリッジ機能は、内部的に自動生成したJavaScript経由でサーバ側との通信を行っているので、通信先となるXML Webサービス・クラスでも必ずScriptService属性を付与する必要がある。

(2)Webサービス・メソッドのパラメータ/戻り値型は固定

 アプリケーション・ブリッジ機能において、XML Webサービス・クラスの名前は自由に決められるが(ここではAuthCustomクラス)、メソッド名、戻り値のデータ型、および、パラメータの名前/データ型は完全に固定であり、アプリケーション開発者が変更することはできない。つまり、いかなる場合にもWebサービス・メソッドは以下のシグニチャに従う必要がある。C#/Visual Basic(VB)いずれを利用しているかにかかわらず、パラメータの名前は大文字/小文字まで厳密に区別されるので、注意してほしい。

[WebMethod()]
public bool Login(string userName, string password, bool createPersistentCookie)
<WebMethod()> _
Public Function Login(ByVal userName As String, ByVal password As String, ByVal createPersistentCookie As Boolean) As Boolean
ログイン処理のために呼び出されるサービス・メソッドのシグニチャ(上:C#、下:VB)

[WebMethod()]
public void Logout()
<WebMethod()> _
Public Sub Logout()
ログアウト処理のために呼び出されるサービス・メソッドのシグニチャ(上:C#、下:VB)

 Loginメソッドは、パラメータとしてクライアントサイドで入力されたユーザー名(userName)、パスワード(password)、そして、永続化クッキーを有効化するかどうかを決めるフラグ(createPersistentCookie)を受け取り、これらの情報に基づいて認証処理を行う。

 ここでは、フォーム認証サービスを管理するFormsAuthenticationクラス(System.Web.Script.Services名前空間)を使って、フォーム認証を行っている。本サンプルで利用しているFormsAuthenticationクラスのメソッドは、以下のとおりだ。

メソッド 概要
Authenticate(ユーザー名, パスワード) 与えられたユーザー名/パスワードを検証
SetAuthCookie(ユーザー名, 永続化クッキーを使用するかどうか) 認証クッキーを発行
SignOut() ログアウトを実行
FormsAuthenticationクラス(System.Web.Script.Services名前空間)の主なメソッド

 つまり、Loginメソッドでは、まず与えられたユーザー名/パスワードで認証の可否を判定し、Trueである(認証に通過した)場合に認証クッキー(チケット)を発行しているというわけだ。また、Loginメソッドはログインの成否をブール値で呼び出し元に返す必要がある。

3. サービス・メソッドを登録する

 サービス・メソッドを作成してしまえば、あとは簡単だ。「TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?」で作成したAuth.aspx上に配置されたScriptManagerコントロールのAuthenticationServiceプロパティのサブ・プロパティPathに、手順2で作成したAuthCustom.asmxを登録すればよい。

AuthenticationService−Pathサブ・プロパティにサービス・メソッドを登録

 以上で必要な手順は完了だ。作成したサンプル・プログラムを実行し、実際に認証機能の動作を確かめてみよう。構成ファイル上で定義したユーザー名/パスワードで認証が確認できれば成功だ。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:Webフォーム 処理対象:ASP.NET AJAX
使用ライブラリ:FormsAuthenticationクラス(System.Web.Script.Services名前空間)
関連TIPS:[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?
関連TIPS:[ASP.NET]構成ファイルのみでフォーム認証を実現するには?

この記事と関連性の高い別の.NET TIPS
[ASP.NET AJAX]クライアントサイド・スクリプトからASP.NETの認証機能を利用するには?
[ASP.NET]構成ファイルのみでフォーム認証を実現するには?
[ASP.NET]フォーム認証のユーザー管理をXMLファイルで行うには?
[ASP.NET AJAX]クライアントサイド・スクリプトからXML Webサービスを非同期呼び出しするには?(サーバサイド編)
[ASP.NET]フォーム認証のユーザー管理をデータベース・サーバで行うには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間