根据 msdn 的建议,我已启用 ASP.Net 身份验证服务。然后,我尝试通过控制台应用程序或 winforms 应用程序使用该服务(通过向我的本地 WCF 服务添加服务引用)。我正在做自定义身份验证和传输安全(所以我正在处理我的AuthenticationService.Authenticating
事件,Global.asax
它工作正常)。
身份验证本身工作正常,但通过添加服务引用创建的代理不包含该CookieContainer
属性。当我尝试将 cookie 令牌传递给需要身份验证的后续服务时,这显然是一个问题。
此外,在以下客户端代码中,IsLoggedIn()
返回 false,我猜这与不存在 cookie 容器有关。
ServiceReference1.AuthenticationServiceClient client =
new ServiceReference1.AuthenticationServiceClient();
bool isLoggedIn = client.Login("test", "test", "", true); //returns TRUE
bool check = client.IsLoggedIn(); //returns FALSE
这是我在服务上的 web.config:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.0" />
</system.web>
<system.web.extensions>
<scripting>
<webServices>
<authenticationService enabled="true"
requireSSL = "false"/>
</webServices>
</scripting>
</system.web.extensions>
<system.serviceModel>
<services>
<service name="System.Web.ApplicationServices.AuthenticationService"
behaviorConfiguration="AuthenticationServiceTypeBehaviors">
<endpoint contract="System.Web.ApplicationServices.AuthenticationService"
binding="basicHttpBinding"
bindingConfiguration="userHttps"
bindingNamespace="http://asp.net/ApplicationServices/v200"/>
</service>
</services>
<bindings>
<basicHttpBinding>
<binding name="userHttps" allowCookies="true">
<!--<security mode="Transport" />-->
</binding>
</basicHttpBinding>
</bindings>
<behaviors>
<serviceBehaviors>
<behavior name="AuthenticationServiceTypeBehaviors">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
</system.serviceModel>
</configuration>
编辑:我应该添加的其他内容,我做了一个调用该Login
方法的服务的 Fiddler 会话,并且正在设置 cookie 并将其发送回客户端。但是没有 CookieContainer 我该怎么办?