编写 ConfigureAuthentication() 方法的代码

在本节中,将学习如何编写 ConfigureAuthentication() 方法的代码,以允许用两种方式来配置身份验证。

在第一种方式中,将使用特定的用户名、密码和域名来满足您在“将 NT 身份验证添加到报表 Web 服务”中添加的用户安全权限的要求。在第二种方式中,将使用 NTLM 身份授权。

当 TrueBoolean被传递到此方法中时,系统将提供用户特定的凭据来访问 Web 服务。FalseBoolean则会调用 NTLM 凭据相关的代码来访问 Web 服务。

ConfigureAuthentication() 方法是从 GetReportWebServiceWithAuthentication() 方法中调用的。

  1. 在类的底部,创建返回 ICredentials 接口的 ConfigureAuthentication() 私有帮助器方法。此方法接受两个参数:名为 isUserSpecific 的布尔值参数和 reportWebServiceURL 字符串参数。
``` vb
Private Function ConfigureAuthentication(ByVal isUserSpecific As
Boolean, ByVal reportWebServiceURL As String) As ICredentials
End Function
```

``` csharp
private ICredentials ConfigureAuthentication(bool isUserSpecific,
string reportWebServiceURL)
{
}
```
  1. 在该方法内,创建一个测试 isUserSpecificBoolean方法参数的条件块。

    If isUserSpecific Then
    Else
    End If
    
    if(isUserSpecific)
    {
    }
    else
    {
    }
    
  2. 收集下列信息:用户名、密码和网络域名,这些信息用于对包含报表 Web 服务的目录授予用户访问权限。

  3. 在 If 块中,声明 username、password、和 domain 字符串变量,并分别进行赋值。

``` vb
Dim userName As String = "fchen"
<NonSerialized()> Dim password As String = "1234"
Dim domain As String = "Enterprise"
```

``` csharp
string userName = "fchen";
[NonSerialized()] string password = "1234";
string domain = "Enterprise";
```
  1. 声明并实例化 NetworkCredential 类,并将 username、password 和 domain 字符串变量传递给该类。

    Dim myNetworkCredential As NetworkCredential = New
    NetworkCredential(userName, password, domain)
    
    NetworkCredential networkCredential = new
    NetworkCredential(userName, password, domain);
    
  2. 从 If 块中返回 NetworkCredential 实例。

在 Else 块中,创建三个替代值:一个报表 Web 服务的 URI、一个指示身份验证类型是 NTLM 的字符串,以及一个 NetworkCredential 实例。这些值都将传递到凭据缓存。

``` vb
Return myNetworkCredential
```

``` csharp
return networkCredential;
```
  1. 在 Else 块内,声明并实例化 CredentialCache 类。

    Dim myCredentialCache As CredentialCache = New CredentialCache()
    
    CredentialCache credentialCache = new CredentialCache();
    
  2. 声明并实例化 Uri 类,将 ConfigureAuthentication() 方法的 reportWebServiceURL 参数传递给该类。

``` vb
Dim myUri As Uri = New Uri(reportWebServiceURL)
```

``` csharp
Uri uri = new Uri(reportWebServiceURL);
```
  1. 将字符串值“NTLM”赋给名为“ntlmAuthorization”的字符串变量。

    Dim ntlmAuthorization As String = "NTLM"
    
    string ntlmAuthorization = "NTLM";
    
  2. 声明并实例化 NetworkCredential 类。

    Dim myNetworkCredential As NetworkCredential = New
    NetworkCredential()
    
    NetworkCredential networkCredential = new NetworkCredential();
    
  3. 将 Uri 实例、ntlmAuthorization 字符串和 NetworkCredential 实例传递给 CredentialCache 实例的 Add() 方法。

``` vb
myCredentialCache.Add(myUri, ntlmAuthorization,
myNetworkCredential)
```

``` csharp
credentialCache.Add(uri, ntlmAuthorization, networkCredential);
```
  1. 从 Else 块的 CredentialCache 类的 DefaultCredentials 属性中返回 ICredentials 实例。

    Return CredentialCache.DefaultCredentials
    
    return CredentialCache.DefaultCredentials;
    

继续浏览“编写 AddFirewallProxySettings() 方法的代码”