• 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; }
       }
    }
  • 相关阅读:
    002-Linux下防火墙相关命令操作
    001-网卡配置
    vs2012中自带IIS如何让其他电脑访问
    001-Mono for android在vs2012中发布设置
    小知识:utf-8和utf8mb4字符集
    Maven 模块化开发
    JUnit 单元测试
    解决8080端口占用问题
    (三)Tomcat服务器 -------JavaWeb的学习之路
    (一)走进JavaWeb的世界 -------JavaWeb的学习之路
  • 原文地址:https://www.cnblogs.com/haoliansheng/p/3228057.html
Copyright © 2020-2023  润新知