好消息,

程序员专用早餐机。和掌柜说 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>
                       重要提示:

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

HTTP 和 SOAP 标头 来传递用户名密码 验证webservice用户认证的更多相关文章

  1. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  2. WCF服务安全控制之netTcpBinding的用户名密码验证【转】

    选择netTcpBinding WCF的绑定方式比较多,常用的大体有四种: wsHttpBinding basicHttpBinding netTcpBinding wsDualHttpBinding ...

  3. WCF 安全性之 自定义用户名密码验证

    案例下载 http://download.csdn.net/detail/woxpp/4113172 客户端调用代码 通过代理类 代理生成 参见 http://www.cnblogs.com/woxp ...

  4. OpenVPN使用用户名/密码验证方式

    OpenVPN推荐使用证书进行认证,安全性很高,但是配置起来很麻烦.还好它也能像pptp等vpn一样使用用户名/密码进行认证. 不管何种认证方式,服务端的ca.crt, server.crt, ser ...

  5. 【WCF】Silverlight+wcf+自定义用户名密码验证

    本文摘自 http://www.cnblogs.com/virusswb/archive/2010/01/26/1656543.html 在昨天的博文Silverlight3+wcf+在不使用证书的情 ...

  6. WebService 用户名密码验证

    原文:WebService 用户名密码验证 在项目开发的过程中,WebService是经常要用的,当调用WebService方法时,需要经过服务的验证才可以调用,一般就是用户名/密码验证,还有一个就是 ...

  7. WCF用户名密码验证方式

    WCF使用用户名密码验证 服务契约 namespace WCFUserNameConstract { [ServiceContract] public interface IWcfContract { ...

  8. 自定义实现wcf的用户名密码验证

    目前wcf分为[传输层安全][消息层安全]两种,本身也自带的用户名密码验证的功能,但是ms为了防止用户名密码明文在网络上传输,所以,强制要求一旦使用[用户名密码]校验功能,则必须使用证书,按照常理讲, ...

  9. Python实现LDAP用户名密码验证

    网上借鉴了不少东西,下面是python代码,备份后用. 思路,因为每个用户的组都不一样,这样就导致了dn不一致的情况, 据需要先根据用户名获取该用户的dn,然后再bind用户名和密码进行验证. 反正是 ...

随机推荐

  1. Lucene基础(三)-- 中文分词及高亮显示

    Lucene分词器及高亮 分词器 在lucene中我们按照分词方式把文档进行索引,不同的分词器索引的效果不太一样,之前的例子使用的都是标准分词器,对于英文的效果很好,但是中文分词效果就不怎么样,他会按 ...

  2. 微软职位内部推荐-ATG Engineer II

    微软近期Open的职位: ATG Engineer - GeneralistReady to work on some of the most advanced hardware on the pla ...

  3. WindowsPhone客户端第一次审核失败记录

    微软返回失败pdf,其中2.7.2和2.7.3没有通过,原因是: 1. 没有提供隐私策略,所以在提交App要填写的隐私策略url里加了隐私策略的网址链接. 2. 由于使用了定位服务,所以第一次进入应用 ...

  4. Hadoop NameNode is not formatted.

    2014-08-26 20:27:22,712 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered except ...

  5. EWS小记

    前段时间和同事完成了一个Exchange 2010 OWA的改造版,他狠狠的把网易邮箱抄了一把,而我则狠狠的被EWS坑了一把.今天打开项目粗略看了一下,发现很多东西都有点记不起来了,思细极恐,决定还是 ...

  6. CSS3 animation的steps方式过渡

    animation默认以ease方式过渡,它会在每个关键帧之间插入补间动画,所以动画效果 是连贯性的.除了ease,linear.cubic-bezier之类的过渡函数都会为其插入补间. 但有些效果不 ...

  7. 看看baidu是如何AJAX跨域的[转]

    看看baidu是如何AJAX跨域的 最近做个人网站遇到AJAX跨子域名的问题. 偶尔看到baidu的通行证处理都是在二级域名passport.baidu.com中处理的, 但是baidu很多地方登录都 ...

  8. IntelliJ IDEA 中文乱码解决

    显示乱码的主要原因,编辑器自带的字体里没有对中文的支持, 将字体换成有中文支持的即可,例如:为微软雅黑.宋体.... 字体转换位置 Ctrl+Alt+S     > Appearance > ...

  9. pmtest1.asm pmtest2.asm pmtest5.asm 这几个比较重要.

    读代码时注意Label后面的文字:desc表示是描述符,seg表示是段 pmtest1.asm 主要讲进入保护模式 http://www.cnblogs.com/wanghj-dz/archive/2 ...

  10. SQLite入门与分析(五)---Page Cache之并发控制

    写在前面:本节主要谈谈SQLite的锁机制,SQLite是基于锁来实现并发控制的,所以本节的内容实际上是属于事务处理的,但是SQLite的锁机制实现非常的简单而巧妙,所以在这里单独讨论一下.如果真正理 ...