Workflow Foundation 4 - IPrincipal потерян, когда рабочий процесс возобновляется из операции задержки - PullRequest
0 голосов
/ 24 марта 2012

У меня есть рабочий процесс, который использует бизнес-уровень (в отдельной DLL) Этот бизнес-уровень проверяет разрешения с использованием ролей IPrincipal, поэтому действия рабочего процесса должны установить принципал в текущем потоке перед вызовом метода на бизнес-уровне.

У меня есть проблема, когда wrokflow возобновляется после операции задержки: роли / IIdentity потеряны (или, что еще хуже: неверны).

Есть ли у кого-нибудь представление о том, как я могу справиться с этим делом, и быть уверенным, что при возобновлении он использует набор IPrincipal до задержки? Или у вас есть идеи о том, как управлять ролями в рабочих процессах?

Спасибо!

Ответы [ 2 ]

1 голос
/ 24 марта 2012

Мне удалось сохранить исходный принципал как переменную рабочего процесса (в моем случае IClaimsPrincipal).

Это имеет два преимущества.

Во-первых, он был сохранен, поэтому, если рабочий процесс был сохранен, а затем возобновлен, исходный принципал все еще был там.Это также было важно, поскольку исходный контекст, из которого был получен принципал, может больше не быть доступным при возобновлении рабочего процесса.

Во-вторых (особенно для служб рабочего процесса), он позволил мне проверить, продолжает ли принципал продолжать рабочий процесс.Вызов другой операции службы (по сути, тот же логический сеанс через корреляцию) - это тот же пользователь, который начал сеанс (тот же принципал, что и переменная).

0 голосов
/ 24 марта 2012

Аутентификационная информация все еще может быть доступна через OperationContext.Current.ServiceSecurityContext - могут помочь следующие статьи:

http://zamd.net/2010/07/04/using-wif-with-workflow-services/ http://msmvps.com/blogs/theproblemsolver/archive/2010/09/21/using-the-wcf-operationcontext-from-a-receive-activity.aspx

...