2016-09-05 7 views
2

Я хочу предоставить имя пользователя и пароль для приложения .Net Console или веб-страницы для аутентификации в службах федерации Active Directory. На данный момент все, что у меня есть, это https://mycompany.com/FederationMetadata/2007-06/FederationMetadata.xml, и у меня есть действительное имя пользователя и пароль для тестирования.Как аутентифицировать имя пользователя и пароль для служб федерации Active Directory (ADFS)?

Я последовал ряд статей, а именно, https://dotnetcodr.com/2013/02/28/claims-based-authentication-in-mvc4-with-net4-5-c-part-2-storing-authentication-data-in-an-authentication-session/

я рассмотрел и нашел, что мы должны добавить «Положитесь Party» в ADFS, чтобы использовать ADFS в Идент магазине.

Во 2-й ссылке используется Federated IdP. Вместо этого я хочу использовать консоль appto, чтобы указать имя пользователя и пароль и получить аутентификацию. Но мне непонятно, где указать имя пользователя и пароль в консольном приложении. Любая помощь приветствуется! Заранее спасибо.

+0

Вы получили окончательное решение? –

ответ

0

Следующий код работает для меня

using System.IdentityModel.Tokens; 
using Microsoft.IdentityModel.Protocols.WSTrust; 
using System.ServiceModel; 
using System.ServiceModel.Security; 
using WSTrustChannel = Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannel; 
using WSTrustChannelFactory = Microsoft.IdentityModel.Protocols.WSTrust.WSTrustChannelFactory; 


namespace SOS.Tools.AdfsConnectionChecker 

{ 
    internal class Token 

    { 

     public static SecurityToken GetToken(string username, string password, string tokenIssuer, string appliesTo, out RequestSecurityTokenResponse rsts) 

     { 
      WS2007HttpBinding binding = new WS2007HttpBinding(); 
      binding.Security.Message.EstablishSecurityContext = false; 
      binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
      binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; 
      binding.Security.Mode = SecurityMode.TransportWithMessageCredential; 


      var tokenIssuerUrlFormat = "https://{0}/adfs/services/trust/13/usernamemixed"; 
      var tokenIssuerUrl = string.Format(tokenIssuerUrlFormat, tokenIssuer); 


      WSTrustChannelFactory trustChannelFactory = 
       new WSTrustChannelFactory(binding, new EndpointAddress(tokenIssuerUrl)); 

      trustChannelFactory.TrustVersion = TrustVersion.WSTrust13; 
      trustChannelFactory.Credentials.UserName.UserName = username; 
      trustChannelFactory.Credentials.UserName.Password = password; 

      trustChannelFactory.ConfigureChannelFactory(); 



      // Create issuance issuance and get security token 
      RequestSecurityToken requestToken = new RequestSecurityToken(WSTrust13Constants.RequestTypes.Issue); 
      requestToken.AppliesTo = new EndpointAddress(appliesTo); 

      WSTrustChannel tokenClient = (WSTrustChannel) trustChannelFactory.CreateChannel(); 
      SecurityToken token = tokenClient.Issue(requestToken, out rsts); 
      return token; 

     } 

} 
  • имя пользователя - имя пользователя домена (например [email protected])
  • пароль - пароль пользователя домена
  • tokenIssuer - URL ADFS (adfs .somedomain.com). Это ADFS должен быть подключен к Active Directory, где имя пользователя создается
  • AppliesTo - Applicattion вы хотите маркер для (например https://apps.anydomain.com/WcfService1). Он должен быть настроен на tokenIssuer в качестве Relating Party.