HTTP 和 SOAP 标头 来传递用户名密码 验证webservice用户认证

好消息,

程序员专用早餐机。和掌柜说 ideaam,可以节省20元。 点击链接  或復·制这段描述¥k3MbbVKccMU¥后到淘♂寳♀

或者 淘宝扫码 支持下同行哈

----------------------------------------------------------------------------------------------------------------------------

支持自定义的 HTTP 和 SOAP 标头

注意:本主题中的内容适用于 Microsoft Office SharePoint Server 2007 SP1。

对于 Web 服务,您可以使用 HTTP 头或 SOAP 标头提供有关 SOAP 消息的特定应用程序的消息;例如,您可以提供身份验证和付款信息。在 Microsoft Office SharePoint Server 2007 SP1 中,业务数据目录支持自定义的 HTTP 头和 SOAP 标头,以将用户名和密码信息传送到 Web 服务调用。

HTTP 头

业务数据目录可以将 Microsoft Single Sign-On (SSO) 服务应用程序设置中存储的用户名和密码作为 HTTP 头发送给 Web 服务调用。HTTP 头值(即用户名和密码)经过 Base 64 编码。所以,在 Web 服务中需要对值进行解码。因为用户名和密码未加密,所以您还应该对使用该功能的 Web 服务使用 SSL。

要使用 HTTP 头,必须在应用程序定义文件中进行以下更改:

  • LobSystemInstance 元素的 SecondarySSOAppID 属性设置为 Office SharePoint Server 2007 中包含用户名和密码的 SSO 企业应用程序的 ID。

  • 使用 Web 服务预期的相应标头名称设置该方法的 HttpHeaderUserNameHttpHeaderPassword 属性。

示例

Xml        
<LobSystemInstance Name="ContosoInstance" DefaultDisplayName="SimpleHTTPInstance">
  <Properties>
    <Property Name="LobSystemName" Type="System.String">Contoso</Property> 
    <Property Name="AuthenticationMode" Type="System.String">WindowsCredentials</Property> 
     …
     …
    <Property Name="SecondarySsoApplicationId" Type="System.String">Contoso</Property> 
  </Properties>
</LobSystemInstance>
<Method Name="HelloWorld" DefaultDisplayName="HelloWorld">
     <Properties>
        <Property Name="HttpHeaderUserName" Type="System.String">UserName</Property>
         <Property Name="HttpHeaderPassword" Type="System.String">UserPassword</Property>
      </Properties></Method>
            

SOAP 标头

业务数据目录也可以将 SSO 设置中存储的用户名和密码作为 SOAP 标头发送给 Web 服务调用。SOAP 标头值(用户名和密码)没有经过 Base 64 编码。所以,在该 Web 服务中您可以直接读取值,如以下示例所示。不过,因为用户名和密码未加密,所以您应该将 SSL 用于使用该功能的 Web 服务。

若要使用 SOAP 标头,请在应用程序定义文件中进行以下更改:

  • LobSystemInstance 元素的 SecondarySSOAppID 属性设置为 Office SharePoint Server 2007 中包含用户名和密码的 SSO 企业应用程序的 ID。

  • 设置 Method 元素的下列属性:

    • SoapHeaderUserNameMemberName: Web 服务能理解的用户名 SOAP 标头的名称。

    • SoapHeaderUserNameMemberFieldName: 包含此用户名的字段名称。

    • SoapHeaderPasswordMemberName: Web 服务能理解的密码 SOAP 标头的名称。

    • SoapHeaderPasswordMemberFieldName: 包含此密码的字段名称。

注释                  注意:

业务数据目录还支持在单个 SOAP 标头中设置用户名和密码。对于既支持用户名又支持密码的 SOAP 标头来说,SoapHeaderUserNameMemberNameSoapHeaderPasswordMemberName 的元数据属性值是相同的。

示例

Xml        
<LobSystemInstance Name="ContosoInstance" DefaultDisplayName="SimpleSOAPInstance">
  <Properties>
    <Property Name="LobSystemName" Type="System.String">Contoso</Property> 
    <Property Name="AuthenticationMode" Type="System.String">WindowsCredentials</Property> 
     …
     …
    <Property Name="SecondarySsoApplicationId" Type="System.String">Contoso</Property> 
  </Properties>
</LobSystemInstance>
<Method Name="HelloWorld" DefaultDisplayName="HelloWorld">
   <Properties>
      <Property Name="SoapHeaderUserNameMemberName" Type="System.String">UserNameHeaderValue</Property>
      <Property Name="SoapHeaderUserNameMemberFieldName" Type="System.String">MyValue</Property>
      <Property Name="SoapHeaderPasswordMemberName" Type="System.String">UserPasswordHeaderValue</Property>
      <Property Name="SoapHeaderPasswordMemberFieldName" Type="System.String">MyValue</Property>
   </Properties></Method>
              
Bb802855.important(zh-cn,office.12).gif                       重要提示:

Web 服务器必须支持 SOAP 标头,才能使用它们。此外,您应该在每个 SOAP 标头的 Web 方法中添加 SOAP 属性。请参见下面的代码示例。

            C#        
public class Service : System.Web.Services.WebService
{
    public UserNameHeader UserName;
    public UserPasswordHeader Password;

    public Service () { }
    [WebMethod]
    [SoapHeader("UserName", Direction=SoapHeaderDirection.In)]
    [SoapHeader("Password", Direction=SoapHeaderDirection.In)]
    public void HelloWorld() 
    {
        string password = "";
        string userName = "";
        if (UserName != null)
        {
            userName = UserName.MyValue;
        }
        if (Password != null)
        {
            password = Password.MyValue;
        }

        return null;
    }
}

public class UserNameHeader : SoapHeader
{
    public string MyValue;
}

public class UserPasswordHeader : SoapHeader
{
    public string MyValue;
}
              

正如您所了解的,为执行 Web 方法,业务数据目录会生成代理。如果后端 Web 方法支持 SOAP 标头,则所生成的代理如以下代码示例所示。

注释                      注意:

下列示例只显示了相关代码。

            C#        
public partial class Service : System.Web.Services.Protocols.SoapHttpClientProtocol
{
   private UserPasswordHeader userPasswordHeaderValueField;
   private UserNameHeader userNameHeaderValueField;

   public Service() {}

   public UserPasswordHeader UserPasswordHeaderValue
   {
      get { return this.userPasswordHeaderValueField;  }
      set { this.userPasswordHeaderValueField = value; }
   }

   public UserNameHeader UserNameHeaderValue
   {
      get { return this.userNameHeaderValueField;  }
      set { this.userNameHeaderValueField = value; }
   }

   public void HelloWorld()
   {
      object[] results = this.Invoke("HelloWorld", new object[0]);
      return (results[0]);
   }
}


public partial class UserPasswordHeader : System.Web.Services.Protocols.SoapHeader
{
   private string myValueField;

   public string MyValue
   {
      get { return this.myValueField;  }
      set { this.myValueField = value; }
   }
}

public partial class UserNameHeader : System.Web.Services.Protocols.SoapHeader
{
   private string myValueField;

   public string MyValue
   {
      get { return this.myValueField;  }
      set { this.myValueField = value; }
   }
}
posted @ 2013-07-31 16:10  iDEAAM  阅读(9386)  评论(0编辑  收藏  举报