我正在尝试在共享主机上运行WIF依赖方应用程序。他们不会将IIS设置LoadUserProfile设置为true,因此出现以下错误:



有没有办法解决?

最佳答案

是的,这是因为您使用的是依赖于DPAPI的默认 token 加密。您可以将其替换为基于证书的加密。参见此处:http://msdn.microsoft.com/en-us/library/ff803371.aspx(滚动至“应用程序还有另一项更改...”)

代码是:

void OnServiceConfigurationCreated(object sender, ServiceConfigurationCreatedEventArgs e)
{
    var sessionTransforms =
        new List<CookieTransform>(
            new CookieTransform[]
            {
                new DeflateCookieTransform(),
                new RsaEncryptionCookieTransform(
                    e.ServiceConfiguration.ServiceCertificate),
                new RsaSignatureCookieTransform(
                    e.ServiceConfiguration.ServiceCertificate)
            });
    var readOnlyTransforms = sessionTransforms.AsReadOnly();
    var sessionHandler = new SessionSecurityTokenHandler(readOnlyTransforms);

    e.ServiceConfiguration.SecurityTokenHandlers.AddOrReplace(sessionHandler);
}


void Application_Start(object sender, EventArgs e)
{
    FederatedAuthentication.ServiceConfigurationCreated += OnServiceConfigurationCreated;
}

两者都在global.asax.cs上

顺便说一句,这也是配置WIF的“Web农场友好”方式,因此它与机器(实例)无关。 Windows Azure部署本质上是Web场,因此这就是在本章中看到它的原因。

更新:在较新的版本中,API已更改。更新后的代码如下所示
void OnFederationConfigurationCreated(object sender, FederationConfigurationCreatedEventArgs e)
{
    var sessionTransforms = new List<CookieTransform>(
        new CookieTransform[]
            {
                new DeflateCookieTransform(),
                new RsaEncryptionCookieTransform(e.FederationConfiguration.ServiceCertificate),
                new RsaSignatureCookieTransform(e.FederationConfiguration.ServiceCertificate)
            });
    var sessionHandler = new SessionSecurityTokenHandler(sessionTransforms.AsReadOnly());

    e.FederationConfiguration
        .IdentityConfiguration
        .SecurityTokenHandlers
        .AddOrReplace(sessionHandler);
}


protected void Application_Start()
{
    FederatedAuthentication.FederationConfigurationCreated += OnFederationConfigurationCreated;
}

关于iis-7 - 是否可以在没有LoadUserProfile = True的情况下运行WIF,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5464146/

10-11 17:24