Услуги WF4 и интеграция WIF - PullRequest
3 голосов
/ 17 мая 2011

Существуют ли проверенные шаблоны, которыми кто-либо может поделиться со службами Workflow 4.0, интегрированными с Windows Identity Foundation?Мы ищем лучший способ проверить токен STS и утверждения, чтобы определить, кто является пользователем вне контекста экземпляра службы рабочего процесса, и сделать объект пользователя приложения доступным для контекста рабочего процесса.

Мы хотим разделить задачи между реализацией сервиса WIF и бизнес-логикой рабочего процесса, чтобы наши сервисы рабочего процесса были легко тестируемыми.Мы видели несколько предоставленных примеров, которые указывают на обертывание действия Receive с действием кода, которое создает реализацию IReceiveMessageCallback для получения ссылки на OperationContext. Ссылка на сообщение в блоге Мориса. Однако это означает, что действия, выполняемые внутри службы, зависят от существования контекста операции и, возможно, даже от IClaimsIdentity.

Лучшее решение, которое мы можем найти на данный момент, - это создать реализацию IDispatchMessageInspector для службы, которая опрашивает токен и создает пользовательские объекты приложения, необходимые рабочему процессу, делая их доступными для среды выполнения рабочего процесса через InstanceContext.Расширения.Кажется, это работает, но не совсем точно.Любая помощь или обратная связь с благодарностью!

Поведение службы

public class SecurityTokenServiceBehavior : IServiceBehavior, IDispatchMessageInspector
{
...
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext)
    {
        var claimsPrincipal = (IClaimsPrincipal)(Thread.CurrentPrincipal is GenericPrincipal ? null : Thread.CurrentPrincipal);

        ...

        instanceContext.Extensions.Add(new SecurityContextExtension(appUser, audit));
        return null;
    }
...
}

IReceiveMessageCallback

public class SecurityContextCallback : IReceiveMessageCallback
{
    [DataMember]
    public SecurityContextExtension SecurityContext { get; private set; }

    public void OnReceiveMessage(OperationContext operationContext, ExecutionProperties activityExecutionProperties)
    {
        SecurityContext = operationContext.InstanceContext.Extensions.Find<SecurityContextExtension>();
    }
}

1 Ответ

0 голосов
/ 17 мая 2011

Вы видели это сообщение в блоге об использовании ClaimsAuthorizationManager?Использование ClaimsAuthorizationManager - это обычный способ проверки авторизации при использовании WIF.

См. Пост Доминика здесь , где приведен пример того, как встраивать проверки в ваш код, используя атрибут ClaimsAuthorize или статический метод ClaimsAuthorize.CheckAccess()Возможно, вы также захотите взглянуть на WF Security Pack CTP 1 здесь .

...