ASP.NET MVC アプリケーション内でホストされている WCF サービスがあります ( http://msdn.microsoft.com/en-us/library/aa702682.aspxで説明されています)。MVC アクションと WCF サービス操作の一部は保護されており、両方に ASP.NET フォーム認証を使用しています。
// protected MVC action
[Authorize]
public ActionResult ProtectedMvcAction(string args)
// protected WCF operation
[PrincipalPermission(SecurityAction.Demand, Role = "User")]
public void ProtectedWcfOperation(string args)
私の WCF クライアントは、.ASPXAUTHWCF 呼び出しのたびにフォーム認証 Cookie がサーバーに送信されるようにします。
これは長い間非常にうまく機能しました。HTTPS現在、証明書を使用してサーバーに暗号化を追加していますSSL。これにより、Web.config` に次の変更を加える必要がありました。
<basicHttpBinding>
<binding name="ApiServiceBinding">
<security mode="Transport">
<transport clientCredentialType="None" />
</security>
</binding>
</basicHttpBinding>
サービスがアクティブになり、クライアントはサーバー操作を呼び出すことができます。ただし、[PrincipalPermission]保護されたサーバー操作の前にある属性により、すべてのサービス呼び出しが突然ブロックされます。私は次のことを知りました:
- HTTP の場合 ( なし
<security mode="Transport">)、 と の両方Thread.CurrentPrincipalがインスタンスにHttpContext.Current.User設定され、プロパティにインスタンスが含まれます。この場合、すべてが正常に機能します。RolePrincipalFormsIdentityRolePrincipal.Identity - HTTPS の場合 (
<security mode="Transport">web.config で)、プロパティHttpContext.Current.Userは引き続きRolePrincipal/FormsIdentity組み合わせに設定されます。しかし、プロパティThread.CurrentPrincipalが突然WindowsPrincipal/WindowsIdentityインスタンスに設定され、[PrincipalPermission]属性が例外をスローします。
私は次のことを試しました:
AppDomain.CurrentDomain.SetPrincipalPolicyをすべての可能な値 (Global.asaxの) に変更しましApplication_Startたが、何も変わりませんでした。Thread.CurrentPrincipalプロパティを に設定しますが、と実際のサービス呼び出しの間Application_PostAuthenticateで、 が再びに変更されます。Application_PostAuthenticateThreadCurrentPrincipalWindowsPrincipal
ヒントはありますか?私は何を間違っていますか?