WCF サービスで使用する必要がある認証/承認サービスがあります。カスタム クライアント/サービス資格情報を、対応するトークンとサポート クラスと共に実装しました。1つのことを除いてすべてが機能します。
要件の一部は、サービス メソッドで (属性を介して) 承認ロールを定義できることです。これらのロールは、ユーザー情報と共に認証サービスに送信され、認証サービスは成功/失敗メッセージで応答します。
以下を実装してみました。
DispatchOperation operation = OperationContext.Current.EndpointDispatcher.DispatchRuntime.Operations.FirstOrDefault(o => o.Action == action);
if (operation != default(DispatchOperation))
{
Type hostType = OperationContext.Current.Host.Description.ServiceType;
MethodInfo method = hostType.GetMethod(operation.Name);
RegistryAuthGroupAttribute authGroupAttribute = (RegistryAuthGroupAttribute)method.GetCustomAttribute(typeof(RegistryAuthGroupAttribute));
if (authGroupAttribute != null)
{
return authGroupAttribute.AuthGroup;
}
}
これは素晴らしいことです... OperationContext.Current が常に null ではない場合 (認証が行われるまでデータが入力されないことがわかりました。
認証フェーズ中または認証フェーズ前に、ターゲット エンドポイントの ServiceType を取得するための他のオプションはありますか? メッセージ インターセプターを使用することを考えましたが、エンドポイントを指定する xml を取得し、それを使用して ServiceType を検索する方法がわかりません。