Amo questo:
nell'implementazione IEndpointBehavior farlo sul lato client:
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
request.Headers.Add(MessageHeader.CreateHeader("token", "http://myurl.com/service/token", _theToken));
return null;
}
poi alla fine del servizio aggiungere questo alla tua ServiceAuthenticationManager
public override ReadOnlyCollection<IAuthorizationPolicy> Authenticate(
ReadOnlyCollection<IAuthorizationPolicy> authPolicy, Uri listenUri, ref Message message)
{
IPrincipal user = new MyUserPrincipal(null);
if(_currentServiceContractType.GetInterfaces()
.Any(x => x == typeof(IMySecuredService)))
{
var tokenPosition = message.Headers.FindHeader("token", "http://myurl.com/service/token");
if (tokenPosition >= 0 && tokenPosition <= 5)
{
var encryptedToken = message.Headers.GetHeader<string>(tokenPosition);
if (!string.IsNullOrWhiteSpace(encryptedToken))
{
var serializedToken = new MyEncryptionUtility().Decrypt(encryptedToken);
var token = MyTokenSerializer.Deserialize(serializedToken);
var expire = new DateTime(token.ValidToTicks);
if (expire > DateTime.Now)
{
user = new MyUserPrincipal(token);
}
}
}
}
message.Properties["Principal"] = user;
Thread.CurrentPrincipal = user;
return authPolicy;
}
questo ti dà quindi la possibilità di utilizzare le attestazioni predefinite o l'autenticazione delle attestazioni WIF. Ad ogni modo, questo è molto semplice. Il token viene creato dal servizio e inviato al client (web) e memorizzato nel cookie. poi quando ci sono richieste, il token viene prelevato da un cookie e poi inviato al servizio, dove, inevitabilmente, è possibile iniziare ad aggiungere le autorizzazioni lato servizio, rispetto a farlo sul lato web/mvc, creando una base di codice molto più pulita usando amico preferito di tutti, SOA> = :)
Nir, il problema sembra passare le attestazioni al servizio WCF. Puoi passare le rivendicazioni effettive ricevute da Identity oppure passare un array o DTO i valori che rappresentano le autorizzazioni e gli ID che desideri trasmettere al tuo servizio ... –
@nirpi, che cosa vuoi che il tuo servizio consumi : credenziali o token di sicurezza? –
@DaveAlperovich, mi piacerebbe ottenere le attestazioni dall'intestazione, se possibile, quindi non avrei bisogno di "sporcare" tutti i miei metodi pubblici con parametri aggiuntivi per l'autenticazione. – nirpi