上一篇博客中我遇到了一个问题,并且导致了我无法继续进行授权和验证。经过查阅资料和解决另外一个问题的过程,我突然想通了为什么CurrentPrincipal变了。并且经过验证后的确是我所理解的那样。下面说说过程。

我在将petshop调试成功运行后,打算在另外一台机器上调用petshop的wcf服务,达到web服务器和业务服务器的物理分层效果。在另一台机器调用wcf服务的时候,提示:“调用方未由服务进行身份验证”。根据提示我知道是绑定的原因,这说明了绑定中配置了服务方需要验证调用方的身份。A大在使用绑定的时候用的都是ws2007HttpBinding。于是我继续查看A大的文章里面关于wcf安全的文章,找到这篇:《[WCF安全系列]绑定、安全模式与客户端凭证类型:WSHttpBinding与WSDualHttpBinding》。里面描述了ws2007HttpBinding的默认安全是Message安全。其他设置于BasicHttpBinding一样。我再去看BasicHttpBinding,得知了在Message安全的情况下,客户端验证默认的是windows。这样的话,客户端在调用服务时,也会将自己的windows身份传递给服务。并且在执行服务的时候将身份附加到当前线程。如果将安全模式设置成为None。那么客户端就不会再传递自己的身份,也就是说匿名访问服务。

根据上面获取的信息,我将petshop的wcf服务里面的binding的安全模式设置为“None”。再次按照我上一篇博客中的方式来设置CurrentPrincipal。经过验证,成功运行了,不再发生执行服务的时候,CurrentPrincipal变了的情况。为什么不是将安全模式下面的消息安全里面的<message clientCredentialType="None" />设置为None呢?我这样设置了,结果:“安全协商失败,因为远程方未及时发回答复。这可能是因为基础传输连接已中止。”为了能够让它顺利运行,我只好先把安全关掉了。

服务端的配置

<!--Binding的设置-->
<bindings>
<ws2007HttpBinding>
<binding name="ws2007httpbindingConfiguration">
<security mode="None">
</security>
</binding>
</ws2007HttpBinding>
</bindings>
<!--使用到服务上-->
<service behaviorConfiguration="petshopbehavior" name="Artech.PetShop.Products.Service.ProductService">
<endpoint binding="ws2007HttpBinding" bindingConfiguration="ws2007httpbindingConfiguration"
contract="Artech.PetShop.Products.Service.Interface.IProductService" />
</service>

客户端的配置

<!--Binding的设置-->
<bindings>
<ws2007HttpBinding>
<binding name="ws2007client">
<security mode="None">
</security>
</binding>
</ws2007HttpBinding>
</bindings> <!--终结点的设置-->
<endpoint address="http://localhost:1719/Products/productservice.svc"
behaviorConfiguration="petShopBehavior" binding="ws2007HttpBinding"
bindingConfiguration="ws2007client" contract="Artech.PetShop.Products.Service.Interface.IProductService"
name="productservice" />

这样的确解决了直接调用的时候,无法设置当前线程的CurrentPrincipal的问题。但是我们面临下一个问题:现在的服务是不安全的!匿名可以访问的!这是不能接受的!

那么必须解决这个问题。通过上面解决问题的过程,可以这样分析WCF安全机制的介入时机:我们知道ContextReceivalCallContextInitializer类,是作为ServiceBehavior的一个执行存在的,那么WCF安全机制在ServiceBehavior执行之后介入服务调用,根据配置的安全信息来进行安全验证。

这样我们可以从这里查找切入点,在既保证WCF安全的情况下又能够使用ApplicationContext里面的UserName来限制用户操作。

我将继续查找相关的资料并尝试解决这个问题。再次感谢A大。

谁动了我的CurrentPrincipal?解释一下为什么CurrentPrincipal变了,并解决这个问题。的更多相关文章

  1. Atitit  图像处理底色变红的解决

    Atitit  图像处理底色变红的解决 1.1. 原因  ImageIO  bug ,alpha通道应该在保存jpg的时候排除1 1.2. 解决,自己移除alpha通道即可1 2. Image sav ...

  2. MyEclipse 下 Tomcat启动变慢如何解决

    MyEclipse   下  Tomcat启动变慢如何解决 项目使用debug启动有时候会突然变得非常慢.不但启动慢,启动之后连打开项目页面也很慢,是日常的4,5倍.可以有下面的几种解决方法: 1. ...

  3. Response.Write()方法响应导致页面字体变大的解决办法

    关于ASP.NET中用Response.Write()方法响应导致页面字体变大的解决办法     最近研究了ASP.NET,发现一个问题,比方说在页面里面有个Button,要点击以后要打开新窗口,而且 ...

  4. python使用xlrd读取excel数据时,整数变小数的解决办法

    python使用xlrd读取excel数据时,整数变小数: 解决方法: 1.有个比较简单的就是在数字和日期的单元格内容前加上一个英文的逗号即可.如果数据比较多,也可以批量加英文逗号的前缀(网上都有方法 ...

  5. 【优化算法】变邻域搜索算法解决0-1背包问题(Knapsack Problem)代码实例 已

    01 前言 经过小编这几天冒着挂科的风险,日日修炼,终于赶在考试周中又给大家更新了一篇干货文章.关于用变邻域搜索解决0-1背包问题的代码.怎样,大家有没有很感动? 02 什么是0-1背包问题? 0-1 ...

  6. html标签被div嵌套页面字体变大的解决办法

    html标签被div嵌套页面字体变大的解决办法 <div> <html> <head> <title></title> </head& ...

  7. wordpress博客近期变慢之解决(fonts.google.com)

    近期发现站点訪问速度变慢.博客文章打开速度特慢,也没改动过东西. 并且近期发现google的服务非常多訪问都打不开或是变慢. 于是知道可能是那"伟大东西"在作坏事了. 症状: 网页 ...

  8. Windows平台Mysql表名变小写的解决过程

    由于要弄某个项目的数据库设计文档,几百张表,如果弄在word文档里面一个个添加,效率比较低. 故分别使用了Mysql WorkBench(win版)和Powerdesigner 15来做这个设计文档. ...

  9. VS2013在Windows7 64位上变慢的解决方法

    重装了windows7系统,又重装了vs2013,发现在打开vs2013.编译工程及调试的时候,vs2013都会变的比较慢,参考网上资料,这里列出几种可能的解决方法: 1.      打开工具--&g ...

随机推荐

  1. 一周学会Mootools 1.4中文教程:(5)Ajax

    ajax在我们前台的开发中是非常重要的,所以我们单独拿出一节课来讲述,首先我们看一下mootools的ajax构成 语法: var myRequest=new Request([参数]); 参数: u ...

  2. ThinPHP第二十七天(kindEditor使用,$.each)

    1.KindEditor简单使用实例 <js file="__PUBLIC__/kindeditor/kindeditor.js" /> <js file=&qu ...

  3. codeforces 650D. Zip-line 线段树

    题目链接 题目的意思很简单, 就是给你n个数, m个询问, 每次询问修改某一个位置的值, 然后问你修改完之后数列的lis是多少. 询问独立. 对于原数列, 我们将它离散化, 令dp1[i]为以i为结尾 ...

  4. The error indicates that IIS is in 32 bit mode, while this application is a 64 b it application and thus not compatible.

    I was trying to install a new WSS v3 Sharepoint on a 64 bit Windows 2003 server today but the instal ...

  5. Apache Maven-AntRun-Plugin 官网 bug

    Maven AntRun Plugin 今天在 Apache maven-antrun-plugin 官网查找资料时,竟然发现了一个bug!! 在此记录下,以免在同一个地方摔倒两次! 想起一句话,尽信 ...

  6. telnet登陆路由器。。。

    登陆路由有两种方式.一种是console,还有一种是使用telnet,由于我电脑是win7,不支持console.也懒得装软件,就使用telnent为例. 一.开启telnetclient 对于XP. ...

  7. openGl学习之加入颜色

    OpenGL 支持两种颜色模式:一种是 RGBA模式.一种是 颜色索引模式. 不管哪种颜色模式.计算机都必须为每个像素保存一些数据,即通过每个像素的颜色,来改变总体图形的颜色.不同的是. RGBA 模 ...

  8. xcode UIView常用方法属性动画

    常见属性: @property(nonatomic,readonly) UIView *superview; 获得自己的父控件对象 @property(nonatomic,readonly,copy) ...

  9. C#多线程及GDI(Day 23)

       又来到了总结知识的时间了,今天又学了一些新的知识,是多线程和GDI的一些运用. 理论: 在学习多线程之前,首先要了解一下什么是进程? 进程:(关键字Process)进程是一个具有一定独立功能的程 ...

  10. Objective-c 字典对象

    oc 中的 NSDictionary 的作用同 java 中的字典类相同,提供了 “键-值”对的组合.比如,是用字典类实现对学生姓名和学号的存放,编号是一个键(唯一性),姓名是值.它的方法有: 下面通 ...