現在、独自の AuthorizationManager を開発しています。次のようになります。
public class MyAuthorizationManager : ServiceAuthorizationManager
{
static bool initialize = false;
public override bool CheckAccess(OperationContext operationContext)
{
ServiceSecurityContext context = ServiceSecurityContext.Current;
string[] roles = Roles.GetRolesForUser(operationContext.ServiceSecurityContext.PrimaryIdentity.Name);
return roles.Count() > 0;
}
public override bool CheckAccess(OperationContext operationContext, ref System.ServiceModel.Channels.Message message)
{
MessageBuffer buffer = operationContext.RequestContext.RequestMessage.CreateBufferedCopy(int.MaxValue);
message = buffer.CreateMessage();
Console.WriteLine(message);
return base.CheckAccess(operationContext, ref message);
}
}
たとえば、契約が次のようになっている場合、サービス契約パラメーターに基づいて承認チェックを実行したいと思います。
[ServiceContract]
public interface IServerContract
{
[OperationContract]
[ServiceKnownType(typeof(ChildTypeOne))]
[ServiceKnownType(typeof(ChildTypeTwo))]
string SecuredMessage(ParentType incoming);
}
私の目標は、タイプに応じて承認することです。たとえば、受信日が ChildTypeOne の場合は承認し、ChildTypeTwo の場合は拒否します。
「メッセージ」を確認しましたが、次のようになります。
- 復号化する必要があります
- バインディングに大きく依存しているようです
パラメータの型を取得する簡単な方法はありますか?