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; }
   }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM