Я включил безопасность в свой сервис wcf, используя wif. Ниже моего дизайна высокого уровня.
- Приложение WIF sts - здесь я использовал пользовательский обработчик токена безопасности имени пользователя для проверки имени пользователя и пароля
- Wcf service - список услуг
- Веб-приложение -> где я использовал службу 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 из части потребления. у меня есть обходной путь для отправки дополнительной части имени пользователя, но это не очень хорошая идея.
Так, не могли бы вы помочь мне решить мою проблему?