在没有LoadUserProfile = True的情况下运行WIF会抛出null错误

时间:2012-05-21 15:49:53

标签: wif acs

我在网站上使用WIF SSO进行身份验证。一切在开发环境中都很完美。但在部署时我遇到了问题

  

消息:数据保护操作失败。这可能有   是由于没有为当前加载用户配置文件引起的   线程的用户上下文,可能是线程的情况   冒充。 ExceptionStackTrace:at   System.Security.Cryptography.ProtectedData.Protect(Byte [] userData,   Byte [] optionalEntropy,DataProtectionScope scope)at   Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(字节[]   值)

搜索abt这个问题导致我遇到这个stackoverflow问题 Is it possible to run WIF without LoadUserProfile = True 我添加了提到的代码,但现在我正在

  

值不能为空

我收到 e.ServiceConfiguration.ServiceCertificate ServiceCertificate null。我的问题是这是什么类型的证书,我在哪里可以在我的配置中定义。我是否需要在ACS上放置相同的证书。

这是我的配置部分

<microsoft.identityModel>
    <service>
      <audienceUris>
        <add value="http://localhost:9494/" />
      </audienceUris>      
      <federatedAuthentication>
        <wsFederation passiveRedirectEnabled="true" issuer="https://devworks-sb.accesscontrol.appfabriclabs.com/v2/wsfederation" realm="http://localhost:9494" requireHttps="false" />
        <cookieHandler requireSsl="false" />
      </federatedAuthentication>
      <applicationService>
        <claimTypeRequired>
          <!--Following are the claims offered by STS 'https://devworks-sb.accesscontrol.appfabriclabs.com/'. Add or uncomment claims that you require by your application and then update the federation metadata of this application.-->
          <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true" />
          <claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true" />
          <!--<claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier" optional="true" />-->
          <!--<claimType type="http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider" optional="true" />-->
        </claimTypeRequired>
      </applicationService>
      <issuerNameRegistry type="Microsoft.IdentityModel.Tokens.ConfigurationBasedIssuerNameRegistry, Microsoft.IdentityModel, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <trustedIssuers>
          <add thumbprint="BE9D0A516BEC2BC820C23D5C2EA79F068C094382" name="https://devworks-sb.accesscontrol.appfabriclabs.com/" />
        </trustedIssuers>
      </issuerNameRegistry>      
    </service>   </microsoft.identityModel>

感谢名单

2 个答案:

答案 0 :(得分:2)

首先你提到部署后出现问题,是吗?在您的web.config中,您是否已将audienceUris更改为http://whatever_service_name.cloudapp.net

<audienceUris>
    <add value="http://localhost:9494/" /> <== This is  wrong
 </audienceUris>  

接下来,您在e.ServiceConfiguration.ServiceCertificate上关于证书的问题为NULL,请验证以下内容:

一个。端点将添加到您的应用程序服务定义中:

B中。证书指纹在服务配置

中设置

℃。证书在web.config中设置,在上面是正确的

d。最后在web.config中添加了以下内容,因此可以通过thumbprint搜索证书:

<serviceCertificate>
   <certificateReference x509FindType="FindByThumbprint" findValue="CERT_THUMB" />
</serviceCertificate>

研究这两个非常有用的资源:

http://www.jimandkatrin.com/CodeBlog/post/Troubleshooting-Azure-issues.aspx

http://blogs.msmvps.com/marcelmeijer/blog/2012/05/04/windows-azure-wif-access-control-acs/

答案 1 :(得分:1)

根本原因可能是您正在使用DPAPI(WIF的默认配置)。请尝试对应用程序进行一些修改以在Windows Azure中工作。我建议您查看http://msdn.microsoft.com/en-us/IdentityTrainingCourse_WIFonWAZLab2010以获取教程。

最诚挚的问候,

徐明。