Windows Server 2008 R2上是否需要使用SessionAuthenticationModule进行任何配置?

时间:2016-07-16 07:15:06

标签: asp.net-mvc authentication windows-server-2008-r2 wif claims-based-identity

我在我的MVC应用程序中使用WIF和SessionAuthenticationModule进行基于声明的身份验证和授权。 现在几乎一切正常。但是当我在服务器上部署它(安装了Windows Server 2008 R2和.Net 4.5.2)时,它有一种奇怪的行为。它不会创建FedAuth Cookie,并且似乎已将创建的安全令牌添加到url而不是FedAuth cookie。因此,使用wronge url会出现错误的请求错误(HTTP错误400.请求URL无效。)。 我不知道在iis或服务器上是否需要使用System.IdentityModel dll和SessionAuthenticationModule进行任何配置。

这是我的web.config文件的一部分:

<?xml version="1.0" encoding="utf-8"?>

<configuration>
  <configSections>
  //....
    <section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    <section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
  </configSections>
  <system.identityModel>
    <identityConfiguration/>
  </system.identityModel>
  <system.identityModel.services>
    <federationConfiguration>
      <cookieHandler requireSsl="false" name="PSCID" mode="Chunked" persistentSessionLifetime="30.0:0:0"/>
    </federationConfiguration>
  </system.identityModel.services>


  <system.web>
    <authentication mode="Forms">
      <forms name="SPSID" loginUrl="~/account/login" timeout="2880" slidingExpiration="true" defaultUrl="~/" domain=""/>
    </authentication>
    <customErrors mode="On" defaultRedirect="error">
      <error statusCode="404" redirect="error/notfound"/>
      <error statusCode="403" redirect="error/forbidden"/>
      <error statusCode="500" redirect="error/servererror"/>
    </customErrors>

    <compilation debug="true" targetFramework="4.5.1"/>
    <httpRuntime targetFramework="4.5.1"/>
    <sessionState cookieName="SID" timeout="2880"/>
    <httpModules>
      <remove name="FormsAuthenticationModule"/>
      <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

    </httpModules>
  </system.web>

  <system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="FormsAuthenticationModule"/>
      <add name="SessionAuthenticationModule" type="System.IdentityModel.Services.SessionAuthenticationModule, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

    </modules>
  </system.webServer>
  //...
</configuration>

在验证用户名和密码后的登录页面中,我使用这种方法创建FedAuth Cookie:

var token = new SessionSecurityToken(MyCustomClaimsPrincipal.GetInstance(username, roles,claims)            );       
token.IsPersistent=rememberMe;

var sam = FederatedAuthentication.SessionAuthenticationModule;
sam.IsReferenceMode = true;
sam.WriteSessionTokenToCookie(token);

在服务器上部署并成功登录后,网址如下:

http//w1.mydomain.com/account/8dPbsEZgZ6kV660tL8n8fsqHio.... [a big token here]

我做错了什么?

0 个答案:

没有答案