Федерация и доверие
В этом разделе рассматриваются различные аспекты, связанные с федеративными приложениями, границами и конфигурацией доверия, а также с использованием выданных маркеров в Windows Communication Foundation (WCF).
Службы, службы маркеров безопасности и доверие
Службы, предоставляющие федеративные конечные точки, обычно ожидают, что проверка подлинности клиентов будет выполняться с использованием маркеров, предоставленных определенным издателем. Важно, чтобы в службе были настроены правильные учетные данные этого издателя; в противном случае служба не сможет проверять подписи в выданных маркерах, и клиент не сможет взаимодействовать со службой. Дополнительные сведения настройке учетных данных издателя в службе см. в разделе Как настраивать учетные данные службы федерации.
Аналогично, при использовании симметричных ключей они шифруются для целевой службы, поэтому необходимо настроить в службе маркеров безопасности правильные учетные данные целевой службы; в противном случае она не сможет зашифровать ключ для целевой службы, и клиент не сможет взаимодействовать со службой.
Службы WCF используют значение свойства MaxClockSkew элемента SecurityBindingElement для разрешения рассогласования часов в клиенте и службе. В федерации параметр MaxClockSkew применяется к рассогласованию часов как для клиента, так и для службы маркеров безопасности, от которой клиент получил выданный маркер. Поэтому службам маркеров безопасности при задании времени начала и истечения срока действия выданных маркеров не требуется учитывать рассогласование часов.
Примечание |
---|
Важность рассогласования часов возрастает по мере уменьшения времени существования выданных маркеров. В большинстве случаев рассогласование часов не оказывает существенного влияния, если время существования маркера составляет 30 минут и более. В сценариях, в которых время существования меньше или в которых важно точное время действия маркера, необходимо учитывать рассогласование часов. |
Федеративные конечные точки и значения времени ожидания
Когда клиент взаимодействует с федеративной конечной точкой, он должен сначала получить соответствующий маркер от службы маркеров безопасности. Если служба маркеров безопасности предоставляет федеративную конечную точку, клиент должен сначала получить маркер от издателя этой конечной точки. Каждое получение маркера занимает некоторое время, и это время входит в общее время ожидания отправки фактического сообщения на финальную конечную точку.
Например, пусть для канала со стороны клиента задано время ожидания 30 секунд. Перед передачей сообщения на финальную конечную точку требуется обратиться за маркерами к двум издателям, при этом для получения маркера у каждого издателя требуется по 15 секунд. В этом случае попытка завершается со сбоем, и генерируется исключение TimeoutException. Поэтому необходимо установить в клиентском канале значение OperationTimeout, достаточное для учета времени получения всех выданных маркеров. В случае, если для свойства OperationTimeout значение не указано, для свойства OpenTimeout или свойства SendTimeout (или для обоих) необходимо задать значение, достаточное для получения всех выданных маркеров.
Время существования маркера и его обновление
Клиенты WCF не проверяют выданные маркеры перед передачей исходного запроса службе. WCF полагает, что служба маркеров безопасности выдала маркер с соответствующим временем начала и окончания срока действия. Если клиент кэшировал маркер и использовал его заново, время существования маркера проверяется при последующих запросах и, в случае необходимости, клиент автоматически обновляет маркер. Дополнительные сведения кэшировании маркеров см. в разделе Как создавать федеративный клиент.
Задание короткого времени существования (порядка 30 секунд и менее) для выданных маркеров или маркеров контекста безопасности может приводить к превышению времени ожидания согласования или возникновению других исключений, генерируемых клиентами WCF при запросе выданных маркеров или при согласовании либо обновлении маркеров контекста безопасности.
Выданные маркеры и InclusionMode
Сериализация выданного маркера в сообщении, передаваемом клиентом в федеративную конечную точку, определяется заданием свойства InclusionMode класса SecurityTokenParameters. Этому свойству можно присвоить одно из значений перечисления SecurityTokenInclusionMode, но в большинстве федеративных сценариев это бесполезно. Значения SecurityTokenInclusionMode.Never и SecurityTokenInclusionMode.AlwaysToInitiator приводят к тому, что клиент отправляет проверяющей стороне ссылку на маркер, выданный службой маркеров безопасности. Если у проверяющей стороны нет копии выданного маркера, проверка подлинности завершится сбоем, так как ссылка на маркер не может быть разрешена. WCF обрабатывает SecurityTokenInclusionMode.Once как эквивалент SecurityTokenInclusionMode.AlwaysToRecipient.
См. также
Задачи
Как создавать федеративный клиент
Как настраивать учетные данные службы федерации
Как создать WSFederationHttpBinding