wsFederationHttpBinding, передавая пользовательскую идентификацию пользователя в STS - PullRequest
2 голосов
/ 22 апреля 2009

Я пытаюсь реализовать следующий сценарий:

  1. Клиент передает свои данные в STS.
  2. Служба STS применяет настраиваемую AuthorizationPolicy для определения набора утверждений, доступных конкретному пользователю, и выдает безопасный токен.
  3. Клиент передает токен бизнес-службам, которые определяют привилегии пользователя на основе набора требований, полученных им от токена.

Похоже, первый шаг - главная проблема. MSDN предполагает, что элемент сообщения wsFederationHttpBinding не имеет clientCredentialsType. В результате, всякий раз, когда мой AuthorizationPolicy проверяет validContext.Properties ["Identities"], он видит в нем WindowsIdentity. Я хочу аутентифицировать пользователя по пользовательскому хранилищу (БД).

Есть ли способ сделать это с помощью wsFederationHttpBinding?

1 Ответ

1 голос
/ 24 апреля 2009

Ну вот и ответ

Конфигурация STS:

<behaviors>
     <serviceBehaviors>
         <behavior name="STSBehaviour">
             <!--Custom credentials processing-->
             <serviceCredentials>
                 <userNameAuthentication userNamePasswordValidationMode="Custom" 
                                         customUserNamePasswordValidatorType="SecurityTokenService.UserNameValidator, SecurityTokenService"/>
             </serviceCredentials>
             <!--------------------------------->
         </behavior>
    </serviceBehaviors>
</behaviors>
<bindings>
    <wsHttpBinding>
        <binding name="wsHttpUsername">
            ...
            <security mode="Message">
                <message clientCredentialType="UserName"
                         negotiateServiceCredential="false"
                         establishSecurityContext="false" />
            </security>
            ...
        </binding>
    </wsHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration ="STSBehaviour"
               name="Microsoft.ServiceModel.Samples.SecurityTokenService" >
           ....
    </service>
</services>

Проверка имени пользователя

public class UserNameValidator : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        if (!VerifyCredentials(userName, password))
            throw new SecurityException("Invalid credentials");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...