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 クライアントは、.ASPXAUTH
WCF 呼び出しのたびにフォーム認証 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
設定され、プロパティにインスタンスが含まれます。この場合、すべてが正常に機能します。RolePrincipal
FormsIdentity
RolePrincipal.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_PostAuthenticate
Thread
CurrentPrincipal
WindowsPrincipal
ヒントはありますか?私は何を間違っていますか?