認証にWIF(.net 4.5)とAzureActiveDirectoryを使用しています。WebサイトはAzure上に配置されます。
すべてがローカルで期待どおりに機能しますが、紺碧に置くとエラーが発生します。
データ保護操作は失敗しました。これは、現在のスレッドのユーザーコンテキストに対してユーザープロファイルがロードされていないことが原因である可能性があります。これは、スレッドが偽装している場合に発生する可能性があります。
これは、アプリがDAPIを使用できないためであると理解しています。そのため、アプリをMACで保護するように切り替える必要があります。
ローカルでこれをwebconfigに追加しました:-
<securityTokenHandlers>
<remove type="System.IdentityModel.Tokens.SessionSecurityTokenHandler, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add type="System.IdentityModel.Services.Tokens.MachineKeySessionSecurityTokenHandler, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</securityTokenHandlers>
ドキュメントで推奨されているように、静的なマシンキーを追加しましたが、キーの長さに関するアドバイスが見つからないため、256と想定しています。
ただし、この構成では次のエラーが発生します。
[CryptographicException:暗号化操作中にエラーが発生しました。] System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.HomogenizeErrors(Func`2 func、Byte [] input)+115 System.Web.Security.Cryptography.HomogenizingCryptoServiceWrapper.Unprotect(Byte [] protectedData)+59 System.Web.Security.MachineKey.Unprotect(ICryptoServiceProvider cryptoServiceProvider、Byte [] protectedData、String []の目的)+62 System.Web.Security.MachineKey.Unprotect(Byte [] protectedData、String []の目的)+ 122 System.IdentityModel.Services.MachineKeyTransform.Decode(Byte []エンコード)+161 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ApplyTransforms(Byte [] cookie、ブールアウトバウンド)+123 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(XmlReaderリーダー、SecurityTokenResolver tokenResolver)+575 System.IdentityModel.Tokens.SessionSecurityTokenHandler.ReadToken(Byte [] token、SecurityTokenResolver tokenResolver)+76 System.IdentityModel.Services.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte [] sessionCookie)+833System.IdentityModel.Services.SessionAuthenticationModule。 TryReadSessionTokenFromCookie(SessionSecurityToken&sessionToken)+186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object sender、EventArgs eventArgs)+210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136System.Web.HttpApplication。 ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+69SecurityTokenResolver tokenResolver)+76 System.IdentityModel.Services.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte [] sessionCookie)+833 System.IdentityModel.Services.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken&sessionToken)+186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object EventArgs eventArgs)+210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+69SecurityTokenResolver tokenResolver)+76 System.IdentityModel.Services.SessionAuthenticationModule.ReadSessionTokenFromCookie(Byte [] sessionCookie)+833 System.IdentityModel.Services.SessionAuthenticationModule.TryReadSessionTokenFromCookie(SessionSecurityToken&sessionToken)+186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object EventArgs eventArgs)+210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136 System.Web.HttpApplication.ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+69TryReadSessionTokenFromCookie(SessionSecurityToken&sessionToken)+186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object sender、EventArgs eventArgs)+210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136System.Web.HttpApplication。 ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+69TryReadSessionTokenFromCookie(SessionSecurityToken&sessionToken)+186 System.IdentityModel.Services.SessionAuthenticationModule.OnAuthenticateRequest(Object sender、EventArgs eventArgs)+210 System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+136System.Web.HttpApplication。 ExecuteStep(IExecutionStep step、Boolean&completedSynchronously)+69
正しくフォーマットされたキーを指定しなかった場合に備えて、machinekeyセクションを削除しましたが、エラーは解消されません。
WIFはなんと戦いました!