次の方法で共有


IAuthenticationModule インターフェイス

Web クライアント認証モジュールに基本認証インターフェイスを提供します。

この型のすべてのメンバの一覧については、IAuthenticationModule メンバ を参照してください。

Public Interface IAuthenticationModule
[C#]
public interface IAuthenticationModule
[C++]
public __gc __interface IAuthenticationModule
[JScript]
public interface IAuthenticationModule

解説

IAuthenticationModule インターフェイスは、カスタム認証モジュールで使用する必要があるプロパティとメソッドを定義します。

認証モジュールは、サーバーとの認証処理全体を実行し、必要に応じて認証チャレンジに応答します。この処理には、リソース サーバーとは別の認証サーバーへの要求や、URI への要求を正しく認証するために必要なその他のアクティビティが含まれることがあります。

カスタム認証モジュールは、 IAuthenticationModule インターフェイスを実装してから、 AuthenticationManager.Register メソッドで登録します。認証モジュールは、構成ファイルを読み取ることによって、プログラムの初期化時にも登録されます。

使用例

[Visual Basic, C#, C++] IAuthenticationModule インターフェイスを実装することによって、カスタマイズされた認証クラスを作成する例を次に示します。詳細については、 AuthenticationManager クラスのトピックを参照してください。

 
' The CustomBasic class creates a custom Basic authentication by implementing the
' IAuthenticationModule interface. It performs the following
' tasks:
' 1) Defines and initializes the required properties.
' 2) Implements the Authenticate and PreAuthenticate methods.

Public Class CustomBasic
  Implements IAuthenticationModule

  Private m_authenticationType As String
  Private m_canPreAuthenticate As Boolean


  ' The CustomBasic constructor initializes the properties of the customized 
  ' authentication.
  Public Sub New()
    m_authenticationType = "Basic"
    m_canPreAuthenticate = False
  End Sub 'New

  ' Define the authentication type. This type is then used to identify this
  ' custom authentication module. The default is set to Basic.

  Public ReadOnly Property AuthenticationType() As String _
   Implements IAuthenticationModule.AuthenticationType

    Get
      Return m_authenticationType
    End Get
  End Property

  ' Define the pre-authentication capabilities for the module. The default is set
  ' to false.

  Public ReadOnly Property CanPreAuthenticate() As Boolean _
   Implements IAuthenticationModule.CanPreAuthenticate


    Get
      Return m_canPreAuthenticate
    End Get
  End Property

' The checkChallenge method checks whether the challenge sent by the HttpWebRequest 
' contains the correct type (Basic) and the correct domain name. 
' Note: The challenge is in the form BASIC REALM="DOMAINNAME"; 
' the Internet Web site must reside on a server whose
' domain name is equal to DOMAINNAME.
  Public Function checkChallenge(ByVal Challenge As String, ByVal domain As String) As Boolean
    Dim challengePasses As Boolean = False

    Dim tempChallenge As [String] = Challenge.ToUpper()

    ' Verify that this is a Basic authorization request and that the requested domain
    ' is correct.
    ' Note: When the domain is an empty string, the following code only checks 
    ' whether the authorization type is Basic.
    If tempChallenge.IndexOf("BASIC") <> -1 Then
      If domain <> [String].Empty Then
        If tempChallenge.IndexOf(domain.ToUpper()) <> -1 Then
          challengePasses = True
          ' The domain is not allowed and the authorization type is Basic.
        Else
          challengePasses = False
        End If
        ' The domain is a blank string and the authorization type is Basic.
      Else
        challengePasses = True
      End If
    End If
    Return challengePasses
  End Function 'checkChallenge


  ' The PreAuthenticate method specifies whether the authentication implemented 
  ' by this class allows pre-authentication. 
  ' Even if you do not use it, this method must be implemented to obey to the rules 
  ' of interface implementation.
  ' In this case it always returns null. 
  Public Function PreAuthenticate(ByVal request As WebRequest, ByVal credentials As ICredentials) As Authorization _
      Implements IAuthenticationModule.PreAuthenticate

    Return Nothing
  End Function 'PreAuthenticate

  
  ' Authenticate is the core method for this custom authentication.
  ' When an Internet resource requests authentication, the WebRequest.GetResponse 
  ' method calls the AuthenticationManager.Authenticate method. This method, in 
  ' turn, calls the Authenticate method on each of the registered authentication
  ' modules, in the order in which they were registered. When the authentication is 
  ' complete an Authorization object is returned to the WebRequest.
  Public Function Authenticate(ByVal challenge As String, ByVal request As WebRequest, ByVal credentials As ICredentials) As Authorization _
      Implements IAuthenticationModule.Authenticate


    Dim ASCII As Encoding = Encoding.ASCII

    ' Get the username and password from the credentials
    Dim MyCreds As NetworkCredential = credentials.GetCredential(request.RequestUri, "Basic")

    If PreAuthenticate(request, credentials) Is Nothing Then
      Console.WriteLine(ControlChars.Lf + " Pre-authentication is not allowed.")
    Else
      Console.WriteLine(ControlChars.Lf + " Pre-authentication is allowed.")
    End If
    ' Verify that the challenge satisfies the authorization requirements.
    Dim challengeOk As Boolean = checkChallenge(challenge, MyCreds.Domain)

    If Not challengeOk Then
      Return Nothing
    End If

    ' Create the encrypted string according to the Basic authentication format as
    ' follows:
    ' a)Concatenate the username and password separated by colon;
    ' b)Apply ASCII encoding to obtain a stream of bytes;
    ' c)Apply Base64 encoding to this array of bytes to obtain the encoded 
    ' authorization.
    Dim BasicEncrypt As String = MyCreds.UserName + ":" + MyCreds.Password

    Dim BasicToken As String = "Basic " + Convert.ToBase64String(ASCII.GetBytes(BasicEncrypt))

    ' Create an Authorization object using the encoded authorization above.
    Dim resourceAuthorization As New Authorization(BasicToken)

    ' Get the Message property, which contains the authorization string that the 
    ' client returns to the server when accessing protected resources.
    Console.WriteLine(ControlChars.Lf + " Authorization Message:{0}", resourceAuthorization.Message)

    ' Get the Complete property, which is set to true when the authentication process 
    ' between the client and the server is finished.
    Console.WriteLine(ControlChars.Lf + " Authorization Complete:{0}", resourceAuthorization.Complete)

    Console.WriteLine(ControlChars.Lf + " Authorization ConnectionGroupId:{0}", resourceAuthorization.ConnectionGroupId)


    Return resourceAuthorization
  End Function 'Authenticate
End Class 'CustomBasic 

[C#] 
// The CustomBasic class creates a custom Basic authentication by implementing the
// IAuthenticationModule interface. It performs the following
// tasks:
// 1) Defines and initializes the required properties.
// 2) Implements the Authenticate method.

public class CustomBasic : IAuthenticationModule
{

  private string m_authenticationType ;
  private bool m_canPreAuthenticate ;

  // The CustomBasic constructor initializes the properties of the customized 
  // authentication.
  public CustomBasic()
  {
    m_authenticationType = "Basic";
    m_canPreAuthenticate = false;
  }

  // Define the authentication type. This type is then used to identify this
  // custom authentication module. The default is set to Basic.
  public string AuthenticationType
  {
    get
    {
      return m_authenticationType;
    }
  }

  // Define the pre-authentication capabilities for the module. The default is set
  // to false.
  public bool CanPreAuthenticate
  {
    get
    {
      return m_canPreAuthenticate;
    }
  }

  // The checkChallenge method checks whether the challenge sent by the HttpWebRequest 
  // contains the correct type (Basic) and the correct domain name. 
  // Note: The challenge is in the form BASIC REALM="DOMAINNAME"; 
  // the Internet Web site must reside on a server whose
  // domain name is equal to DOMAINNAME.
  public bool checkChallenge(string Challenge, string domain) 
  {
    bool challengePasses = false;

    String tempChallenge = Challenge.ToUpper();

    // Verify that this is a Basic authorization request and that the requested domain
    // is correct.
    // Note: When the domain is an empty string, the following code only checks 
    // whether the authorization type is Basic.

    if (tempChallenge.IndexOf("BASIC") != -1)
      if (domain != String.Empty)
        if (tempChallenge.IndexOf(domain.ToUpper()) != -1)
          challengePasses = true;
        else
          // The domain is not allowed and the authorization type is Basic.
          challengePasses = false;
      else
        // The domain is a blank string and the authorization type is Basic.
        challengePasses = true;

    return challengePasses;
  }

  // The PreAuthenticate method specifies whether the authentication implemented 
  // by this class allows pre-authentication. 
  // Even if you do not use it, this method must be implemented to obey to the rules 
  // of interface implementation.
  // In this case it always returns null. 
  public Authorization PreAuthenticate(WebRequest request, ICredentials credentials) 
  {                
    return null;
  }

  // Authenticate is the core method for this custom authentication.
  // When an Internet resource requests authentication, the WebRequest.GetResponse 
  // method calls the AuthenticationManager.Authenticate method. This method, in 
  // turn, calls the Authenticate method on each of the registered authentication
  // modules, in the order in which they were registered. When the authentication is 
  // complete an Authorization object is returned to the WebRequest.
  public Authorization Authenticate(String challenge, WebRequest request, ICredentials credentials) 
  {
    Encoding ASCII = Encoding.ASCII;        

    // Get the username and password from the credentials
    NetworkCredential MyCreds = credentials.GetCredential(request.RequestUri, "Basic");        

    if (PreAuthenticate(request, credentials) == null)
      Console.WriteLine("\n Pre-authentication is not allowed.");
    else
      Console.WriteLine("\n Pre-authentication is allowed.");

    // Verify that the challenge satisfies the authorization requirements.
    bool challengeOk = checkChallenge(challenge, MyCreds.Domain);

    if (!challengeOk)
      return null;

    // Create the encrypted string according to the Basic authentication format as
    // follows:
    // a)Concatenate the username and password separated by colon;
    // b)Apply ASCII encoding to obtain a stream of bytes;
    // c)Apply Base64 encoding to this array of bytes to obtain the encoded 
    // authorization.
    string BasicEncrypt = MyCreds.UserName + ":" + MyCreds.Password;

    string BasicToken = "Basic " + Convert.ToBase64String(ASCII.GetBytes(BasicEncrypt));

    // Create an Authorization object using the encoded authorization above.
    Authorization resourceAuthorization = new Authorization(BasicToken);

    // Get the Message property, which contains the authorization string that the 
    // client returns to the server when accessing protected resources.
    Console.WriteLine("\n Authorization Message:{0}",resourceAuthorization.Message);

    // Get the Complete property, which is set to true when the authentication process 
    // between the client and the server is finished.
    Console.WriteLine("\n Authorization Complete:{0}",resourceAuthorization.Complete);

    Console.WriteLine("\n Authorization ConnectionGroupId:{0}",resourceAuthorization.ConnectionGroupId);


    return resourceAuthorization;
  }
}

[C++] 
// The CustomBasic class creates a custom Basic authentication by implementing the
// IAuthenticationModule interface. In particular it performs the following
// tasks:
// 1) Defines and initializes the required properties.
// 2) Impements the Authenticate method.

public __gc class CustomBasic : public IAuthenticationModule {
private:
   String* m_authenticationType;
   bool m_canPreAuthenticate;

   // The CustomBasic constructor initializes the properties of the customized
   // authentication.
public:
   CustomBasic() {
      m_authenticationType = S"Basic";
      m_canPreAuthenticate = false;
   }

   // Define the authentication type. This type is then used to identify this
   // custom authentication module. The default is set to Basic.
   __property String* get_AuthenticationType() {
      return m_authenticationType;
   }

   // Define the pre-authentication capabilities for the module. The default is set
   // to false.
   __property bool get_CanPreAuthenticate() {
      return m_canPreAuthenticate;
   }


   // The checkChallenge method checks if the challenge sent by the HttpWebRequest
   // contains the correct type (Basic) and the correct domain name.
   // Note: the challenge is in the form BASIC REALM=S"DOMAINNAME"
   // and you must assure that the Internet Web site resides on a server whose
   // domain name is equal to DOMAINAME.
   bool checkChallenge(String* Challenge, String* domain) {
      bool challengePasses = false;

      String*  tempChallenge = Challenge->ToUpper();
      // Verify that this is a Basic authorization request and the requested domain
      // is correct.
      // Note: When the domain is an empty string the following code only checks
      // whether the authorization type is Basic.
      if (tempChallenge->IndexOf(S"BASIC") != -1)
         if (String::Compare(domain,String::Empty)!=0 )
            if (tempChallenge->IndexOf(domain->ToUpper()) != -1)
               challengePasses = true;
            else
               // The domain is not allowed and the authorization type is Basic.
               challengePasses = false;
         else
            // The domain is a blank string and the authorization type is Basic.
            challengePasses = true;

      return challengePasses;
   }

   // The PreAuthenticate method specifies if the authentication implemented
   // by this class allows pre-authentication.
   // Even if you do not use it, this method must be implemented to obey to the rules
   // of interface implemebtation.
   // In this case it always returns null.
   Authorization * PreAuthenticate(WebRequest* request, ICredentials* credentials) {
      return 0;
   }

   // Authenticate is the core method for this custom authentication.
   // When an internet resource requests authentication, the WebRequest::GetResponse
   // method calls the AuthenticationManager::Authenticate method. This method, in
   // turn, calls the Authenticate method on each of the registered authentication
   // modules, in the order they were registered. When the authentication is
   // complete an Authorization object is returned to the WebRequest, as
   // shown by this routine's retun type.
   Authorization * Authenticate(String* challenge, WebRequest* request, ICredentials* credentials) {
      Encoding*  ASCII = Encoding::ASCII;

      // Get the username and password from the credentials
      NetworkCredential * MyCreds = credentials->GetCredential(request->RequestUri, S"Basic");

      if (PreAuthenticate(request, credentials) == 0)
         Console::WriteLine(S"\n Pre-authentication is not allowed.");
      else
         Console::WriteLine(S"\n Pre-authentication is allowed.");

      // Verify that the challenge satisfies the authorization requirements.
      bool challengeOk = checkChallenge(challenge, MyCreds->Domain);

      if (!challengeOk)
         return 0;

      // Create the encrypted string according to the Basic authentication format as
      // follows:
      // a)Concatenate username and password separated by colon;
      // b)Apply ASCII encoding to obtain a stream of bytes;
      // c)Apply Base64 Encoding to this array of bytes to obtain the encoded
      // authorization.
      String* BasicEncrypt = String::Concat(MyCreds->UserName, S":", MyCreds->Password);

      String* BasicToken = 
         String::Concat(S"Basic ", Convert::ToBase64String(ASCII->GetBytes(BasicEncrypt)));

      // Create an Authorization object using the above encoded authorization.
      Authorization* resourceAuthorization = new Authorization(BasicToken);

      // Get the Message property which contains the authorization string that the
      // client returns to the server when accessing protected resources
      Console::WriteLine(S"\n Authorization Message: {0}", resourceAuthorization->Message);

      // Get the Complete property which is set to true when the authentication process
      // between the client and the server is finished.
      Console::WriteLine(S"\n Authorization Complete: {0}", 
         __box(resourceAuthorization->Complete));

      Console::WriteLine(S"\n Authorization ConnectionGroupId: {0}", 
         resourceAuthorization->ConnectionGroupId);
      return resourceAuthorization;
   }
};

// This is the program entry point. It allows the user to enter
// her credentials and the Internet resource (Web page) to access.
// It also unregisters the standard and registers the customized basic
// authentication.
int main() {
   String* args[] = Environment::GetCommandLineArgs();

   if (args->Length < 4)
      TestAuthentication::showusage();
   else {
      // Read the user's credentials.
      TestAuthentication::uri = args[1];
      TestAuthentication::username = args[2];
      TestAuthentication::password = args[3];

      if (args->Length == 4)
         TestAuthentication::domain = String::Empty;
      else
         // If the domain exists, store it. Usually the domain name
         // is by default the name of the server hosting the Internet
         // resource.
         TestAuthentication::domain = args[4];


      // Instantiate the custom Basic authentication module.
      CustomBasic* customBasicModule = new CustomBasic();

      // Unregister the standard Basic authentication module.
      AuthenticationManager::Unregister(S"Basic");

      // Register the custom Basic authentication module.
      AuthenticationManager::Register(customBasicModule);

      // Display registered Authorization modules.
      TestAuthentication::displayRegisteredModules();

      // Read the specified page and display it on the console.
      TestAuthentication::getPage(TestAuthentication::uri);
   }
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Net

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ, .NET Compact Framework - Windows CE .NET

アセンブリ: System (System.dll 内)

参照

IAuthenticationModule メンバ | System.Net 名前空間 | AuthenticationManager