我正在使用ASMX Web服务(不是WCF),我为基本身份验证实现了简单的HTTP模块。 一切正常用于授权文件(web.config deny / allow),User.IsInRole也被填充。
但是,我想授权部分网络方法。为此,我发现只有PrincipalPermission.Demand属性。但是,尽管我传递了有效的登录凭据,但总是抛出异常。
网络配置:
<system.webServer>
<modules>
<add name="AuthenticationModule" type="AuthenticationModule"/>
</modules>
</system.webServer>
<system.web>
<authentication mode="None"/>
<authorization>
<allow users="*" />
</authorization>
</system.web>
客户端:
CommonService.CommonServices service = new CommonService.CommonServices();
service.Credentials = new NetworkCredential(username, pass);
service.PreAuthenticate = true;
service.HelloWorldForEveryone();
它抛出:
Unhandled exception: System.Web.Services.Protocols.SoapException: System.Web.Serv
ices.Protocols.SoapException:
v System.Security.Permissions.PrincipalPermission.ThrowSecurityException()
v System.Security.Permissions.PrincipalPermission.Demand()
v System.Security.PermissionSet.DemandNonCAS()
v WSAutentization.CommonServices.HelloWorldForEveryone() in CommonServices.asmx.cs:řádek 30
v System.Web.Services.Protocols.SoapHttpClientProtocol.ReadResponse(SoapClien
tMessage message, WebResponse response, Stream responseStream, Boolean asyncCall
)
v System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodNa
me, Object[] parameters)
v Console.CommonService.CommonServices.HelloWorldForEveryone() v d:\TMP\WSAut
entization\Console\Web References\CommonService\Reference.cs:řádek 93
v Console.Program.Main(String[] args) v d:\TMP\WSAutentization\Console\Progra
m.cs:line 35
还有另一种方法来授权部分网络方法吗?
非常感谢!
答案 0 :(得分:0)
PrincipalPermission
检查 Thread.CurrentPrincipal
。
我没有在您的身份验证模块中看到代码,但我遇到了同样的问题,解决方法是设置
Thread.CurrentPrincipal = HttpContext.Current.User;