使用 Soap 标头自定义身份验证和授权Web Service

WebService 类还提供 System.Security.Principal.IPrincipal 类型的 User 属性,该属性可用来检索有关客户端用户的信息。此外,可以使用 ASP.NET 配置系统中的 Authorization 节授权对 Web 服务的访问。

使用 Soap 标头自定义身份验证和授权

Windows 身份验证非常适合 Intranet 方案,这种情况下您是对自己的域中的用户进行身份验证。然而在 Internet 上,您可能需要对 SQL 数据库执行自定义身份验证和授权。在这种情况中,应向服务传递自定义凭据(如用户名和密码),并让服务自己处理身份验证和授权。

将额外的信息连同请求一起传递给 XML Web 服务的简便方法是通过 SOAP 标头。为此,需要在服务中定义一个从 SOAPHeader 派生的类,然后将服务的公共字段声明为该类型。这在服务的公共合同中公开,并且当从 WebServiceUtil.exe 创建代理时可由客户端使用,如下例所示:

using System.Web.Services;

using System.Web.Services.Protocols;



// AuthHeader class extends from SoapHeader

public class AuthHeader : SoapHeader {

    public string Username;

    public string Password;

}



public class HeaderService : WebService {

    public AuthHeader sHeader;

    ...

}

服务中的每个 WebMethod 都可以使用 SoapHeader 自定义属性定义一组关联的标头。默认情况下,标头是必需的,但也可以定义可选标头。SoapHeader 属性指定公共字段的名称或者 ClientServer 类的属性(本标题中称为 Headers 属性)。在为输入标头调用方法前,WebService 设置 Headers 属性的值;而当方法为输出标头返回时,WebService 检索该值。有关输出标头或可选标头的更多信息,请参阅 .NET 框架 SDK 文档。

[WebMethod(Description="This method requires a custom soap header set by the caller")]

[SoapHeader("sHeader")]

public string SecureMethod() {



    if (sHeader == null)

        return "ERROR: Please supply credentials";

    else

        return "USER: " + sHeader.Username;



}

然后,客户端在调用要求标头的方法之前,直接在代理类上设置标头,如下面的示例所示:

HeaderService h = new HeaderService();

AuthHeader myHeader = new AuthHeader();

myHeader.Username = "JohnDoe";

myHeader.Password = "password";

h.AuthHeader = myHeader;

String result = h.SecureMethod();

你可能感兴趣的:(web Service)