Необходимо передать дополнительное значение UserNameSecurityToken в STS из клиентского приложения. - PullRequest
0 голосов
/ 09 ноября 2011

Я включил безопасность в свой сервис wcf, используя wif. Ниже моего дизайна высокого уровня.

  1. Приложение WIF sts - здесь я использовал пользовательский обработчик токена безопасности имени пользователя для проверки имени пользователя и пароля
  2. Wcf service - список услуг
  3. Веб-приложение -> где я использовал службу wcf.

Обработчик токенов безопасности пользовательского имени пользователя STS выглядит следующим образом:

public class CustomUserNameSecurityTokenHandler : UserNameSecurityTokenHandler
{
    public override Microsoft.IdentityModel.Claims.ClaimsIdentityCollection ValidateToken(System.IdentityModel.Tokens.SecurityToken token)
    {
        UserNameSecurityToken userNameToken = token as UserNameSecurityToken;
        CredentialStore.AuthenticateUser(userNameToken.username, userNameToken.Password);

        // ...
    }
}

Код для использования службы wcf из веб-приложения

ClientCredentials oldCredentials = client.Endpoint.Behaviors.Remove<ClientCredentials>();
CachedClientCredentials newCredentials = new CachedClientCredentials(_tokenCache, oldCredentials);

client.Endpoint.Behaviors.Add(newCredentials);

client.ClientCredentials.UserName.UserName = "Admin"
client.ClientCredentials.UserName.Password = "password";

client.Authenticate();

При использовании службы wcf я могу отправить имя пользователя и пароль методу STS validateToken для аутентификации, и мой сценарий похож на то, что я хочу отправить еще одно значение (текущий адрес веб-сайта) в метод validatetoken из части потребления. у меня есть обходной путь для отправки дополнительной части имени пользователя, но это не очень хорошая идея.

Так, не могли бы вы помочь мне решить мою проблему?

1 Ответ

2 голосов
/ 07 марта 2012

Для службы STS, которую я внедрил, требуется ClientID в дополнение к имени пользователя и паролю.Я решил эту проблему, добавив пользовательские элементы в запрос маркера безопасности при инициализации клиента службы.Служба STS затем считывает эти значения во время авторизации токена, а также передает ClientID в утверждениях.

// init client..
_serviceClient.ClientCredentials.UserName.UserName = Username;
_serviceClient.ClientCredentials.UserName.Password = Password;

var doc = new XmlDocument();
XmlElement customElement = doc.CreateElement("ExtraAuthData", Name, "http://localhost/STS/identity");
customElement.InnerText = Value;
(_serviceClient.Endpoint.Binding as WS2007FederationHttpBinding).Security.Message.TokenRequestParameters.Add(customElement);

Не уверен, является ли это рекомендуемым подходом или нет, я не смог найти другой способделать это.

...