Получение токена SAML для доверия проверяющей стороны с помощью сквозной аутентификации Windows - PullRequest
0 голосов
/ 09 июля 2019

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

Общая рекомендация - извлекать токен SAML с помощью WSTrustChannelFactory, но с указанием имени пользователя и пароля.Я бы не хотел этого делать, так что это легко для пользователя.Я чувствую, что ADFS должен поддерживать SSO-аутентификацию (используя сквозную аутентификацию Windows) для этого запроса.Возможно ли это?

Вот типичный рекомендуемый код, требующий учетных данных:

public SecurityToken GetSamlToken()
{
        using (var factory = new WSTrustChannelFactory(
        new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential),
        new EndpointAddress(new Uri("https://serv/adfs/services/trust/13/usernamemixed"))))
        {
        factory.Credentials.UserName.UserName = "username";
        factory.Credentials.UserName.Password = "password";
        factory.Credentials.ServiceCertificate.Authentication.CertificateValidationMode = X509CertificateValidationMode.None;
        factory.TrustVersion = TrustVersion.WSTrust13;                
        WSTrustChannel channel = null;                
        try
        {
            string KeyType;
            var rst = new RequestSecurityToken
                          {
                              RequestType = WSTrust13Constants.RequestTypes.Issue,
                              AppliesTo = new EndpointAddress("net.tcp://localhost:xxxx/Service1/mex"),                         
                              KeyType = Microsoft.IdentityModel.Protocols.WSTrust.WSTrust13Constants.KeyTypes.Bearer,                                        
                          };

            channel = (WSTrustChannel)factory.CreateChannel();

            return channel.Issue(rst);
        }
        finally
        {
            if (channel != null)
            {
                channel.Abort();
            }

            factory.Abort();
        }
    }
}

Спасибо за помощь!

...