/ / Wdrażanie aktywnego uwierzytelniania przy użyciu ADFS - asp.net, uwierzytelnianie, adfs

Implementacja aktywnego uwierzytelniania za pomocą ADFS - asp.net, uwierzytelnianie, adfs

Pracuję nad uwierzytelnianiem za pomocą usługi Active Directory przy użyciu programu ADFS.

Podczas wyszukiwania dostałem kilka artykułów, aby spełnić ten wymóg, ale sugerują przekierowanie strony logowania aplikacji na stronę logowania ADFS, a następnie powrót.

Przekierowanie na stronę logowania do ADFS nie jest sugerowane według doświadczenia użytkownika.

Czy ktoś może mi pomóc znaleźć rozwiązanie do uwierzytelnienia za pomocą usługi Active Directory za pomocą ADFS za sceną? Tak więc wszystko będzie obsługiwane przez kod aplikacji, a nie przez stronę logowania do ADFS.

Proszę doradź.

Daj mi znać, jeśli masz jakieś wątpliwości lub pytania lub potrzebujesz więcej informacji.

Odpowiedzi:

1 dla odpowiedzi № 1

Powodem, dla którego artykuły sugerują przekierowanie(przy użyciu protokołu WS-Federation) na stronie logowania do ADFS, ponieważ umożliwia skonfigurowanie federacji z innymi dostawcami tożsamości (pozwól pracownikom firmy zewnętrznej na użycie własnych poświadczeń do zalogowania się w aplikacji).

To, czego chcesz, można zrobić za pomocą protokołu WS-Trust, ale zrezygnujesz z (lub będziesz musiał sam się zaimplementować) możliwości federacji.

ADFS udostępnia punkty końcowe, takie jak /adfs/services/trust/13/usernamemixed z którym możesz porozmawiać o token zabezpieczający. Coś jak poniżej powinno cię zabrać.

public class UserNameWSTrustBinding : WS2007HttpBinding
{
public UserNameWSTrustBinding()
{
Security.Mode = SecurityMode.TransportWithMessageCredential;
Security.Message.EstablishSecurityContext = false;
Security.Message.ClientCredentialType = MessageCredentialType.UserName;
}
}

private static SecurityToken GetSamlToken(string username, string password)
{
var factory = new WSTrustChannelFactory(new UserNameWSTrustBinding(), "https://yourdomain.com/adfs/services/trust/13/UsernameMixed")
{
TrustVersion = TrustVersion.WSTrust13
};

factory.Credentials.UserName.UserName = username;
factory.Credentials.UserName.Password = password;

var rst = new RequestSecurityToken
{
RequestType = RequestTypes.Issue,
AppliesTo = new EndpointReference("https://yourdomain.com/yourservice"),
KeyType = KeyTypes.Bearer
};

var channel = factory.CreateChannel();

return channel.Issue(rst);
}