在本节中,将学习如何编写 ConfigureAuthentication() 方法的代码,以允许用两种方式来配置身份验证。
在第一种方式中,将使用特定的用户名、密码和域名来满足您在“将 NT 身份验证添加到报表 Web 服务”中添加的用户安全权限的要求。在第二种方式中,将使用 NTLM 身份授权。
当 TrueBoolean被传递到此方法中时,系统将提供用户特定的凭据来访问 Web 服务。FalseBoolean则会调用 NTLM 凭据相关的代码来访问 Web 服务。
ConfigureAuthentication() 方法是从 GetReportWebServiceWithAuthentication() 方法中调用的。
- 在类的底部,创建返回 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)
{
}
```
在该方法内,创建一个测试 isUserSpecificBoolean方法参数的条件块。
If isUserSpecific Then Else End Ifif(isUserSpecific) { } else { }收集下列信息:用户名、密码和网络域名,这些信息用于对包含报表 Web 服务的目录授予用户访问权限。
在 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";
```
声明并实例化 NetworkCredential 类,并将 username、password 和 domain 字符串变量传递给该类。
Dim myNetworkCredential As NetworkCredential = New NetworkCredential(userName, password, domain)NetworkCredential networkCredential = new NetworkCredential(userName, password, domain);从 If 块中返回 NetworkCredential 实例。
在 Else 块中,创建三个替代值:一个报表 Web 服务的 URI、一个指示身份验证类型是 NTLM 的字符串,以及一个 NetworkCredential 实例。这些值都将传递到凭据缓存。
``` vb
Return myNetworkCredential
```
``` csharp
return networkCredential;
```
在 Else 块内,声明并实例化 CredentialCache 类。
Dim myCredentialCache As CredentialCache = New CredentialCache()CredentialCache credentialCache = new CredentialCache();声明并实例化 Uri 类,将 ConfigureAuthentication() 方法的 reportWebServiceURL 参数传递给该类。
``` vb
Dim myUri As Uri = New Uri(reportWebServiceURL)
```
``` csharp
Uri uri = new Uri(reportWebServiceURL);
```
将字符串值“NTLM”赋给名为“ntlmAuthorization”的字符串变量。
Dim ntlmAuthorization As String = "NTLM"string ntlmAuthorization = "NTLM";声明并实例化 NetworkCredential 类。
Dim myNetworkCredential As NetworkCredential = New NetworkCredential()NetworkCredential networkCredential = new NetworkCredential();将 Uri 实例、ntlmAuthorization 字符串和 NetworkCredential 实例传递给 CredentialCache 实例的 Add() 方法。
``` vb
myCredentialCache.Add(myUri, ntlmAuthorization,
myNetworkCredential)
```
``` csharp
credentialCache.Add(uri, ntlmAuthorization, networkCredential);
```
从 Else 块的 CredentialCache 类的 DefaultCredentials 属性中返回 ICredentials 实例。
Return CredentialCache.DefaultCredentialsreturn CredentialCache.DefaultCredentials;