0

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

消息:数据保护操作不成功。这可能是由于没有为当前线程的用户上下文加载用户配置文件,这可能是线程模拟时的情况。ExceptionStackTrace:在 System.Security.Cryptography.ProtectedData.Protect(Byte[] userData, Byte[] optionalEntropy, DataProtectionScope 范围) 在 Microsoft.IdentityModel.Web.ProtectedDataCookieTransform.Encode(Byte[] value)

搜索 abt this issue 将我引向这个 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>

谢谢

4

2 回答 2

2

您提到的第一件事是部署后出现问题,对吗?在您的 web.config 中,您是否将 AudienceUris 更改为http://whatever_service_name.cloudapp.net

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

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

A. Endpoint 被添加到你的应用服务定义中:

B. 证书指纹在服务配置中设置

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

D. 最后在您的 web.config 中添加以下内容,以便可以通过指纹搜索证书:

<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/

于 2012-05-27T05:47:26.967 回答
1

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

此致,

明旭。

于 2012-05-22T07:42:20.517 回答