2012-06-11 2 views
4

나는 사용자의 로그인 동작과 활성 디렉터리 역할 및 사용 권한 사이에서 중개자를 만들기 위해 WCF 웹 서비스를 개발 중입니다. 내 호스트 응용 프로그램이 AD FS와 직접 대화하는 것을 원하지 않습니다. 모든 호스트 응용 프로그램에서 내 웹 서비스를 사용하기를 원하며 주어진 자격 증명을 기반으로 필요한 정보를 제공합니다.사용자 자격 증명으로 AD FS 클레임에 액세스하는 방법?

내 웹 메서드에서 사용자의 로그인 자격 증명으로 AD FS (WIF)에서 클레임을 가져와야합니다.

내 웹 메서드에는 창 사용자의 전자 메일 ID/Windows 계정 이름과 암호의 두 가지 입력 매개 변수가 있습니다.

그래서 주어진 사용자의 자격 증명을 사용하여 웹 메서드에서 AD FS 클레임에 액세스하려고합니다.

주어진 사용자의 자격 증명으로 AD FS 클레임을 얻는 방법은 무엇입니까?

당신은 HTTPS로 웹 서비스 호출을 수행해야

답변

4

DisplayTokem을 ADFS에서 요청하여 작업 할 수 있습니다. 기본적으로 토큰과 동일한 정보입니다.

public DisplayClaimCollection GetDisplayClaims(string username, string password) 
     { 
      WSTrustChannelFactory factory = null; 
      try 
      { 

       // use a UserName Trust Binding for username authentication 
       factory = new WSTrustChannelFactory(
        new UserNameWSTrustBinding(SecurityMode.TransportWithMessageCredential), 
        "https://.../adfs/services/trust/13/usernamemixed"); 

       factory.TrustVersion = TrustVersion.WSTrust13; 


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


       var rst = new RequestSecurityToken 
           { 
            RequestType = RequestTypes.Issue, 
            AppliesTo = "Relying party endpoint address", 
            KeyType = KeyTypes.Symmetric, 
            RequestDisplayToken = true 
           }; 

       IWSTrustChannelContract channel = factory.CreateChannel(); 
       RequestSecurityTokenResponse rstr; 
       SecurityToken token = channel.Issue(rst, out rstr); 

       return rstr.RequestedDisplayToken.DisplayClaims; 
      } 
      finally 
      { 
       if (factory != null) 
       { 
        try 
        { 
         factory.Close(); 
        } 
        catch (CommunicationObjectFaultedException) 
        { 
         factory.Abort(); 
        } 
       } 
      } 
     } 

그러나 이것은 올바른 방법이 아닙니다. RelyingParty 인증서를 사용하여 암호화 된 토큰을 해독하고 그로부터 클레임을 읽어야합니다.

+0

@Floarin 답장을 보내 주셔서 대단히 감사드립니다. 여기에 2 가지가 있습니다 .... 1) [rstr.RequestedDisplayToken.DisplayClaims;] 여기서는 RequestedDisplayToken을 내 SecurityToken 객체와 함께 사용할 수 없습니다. 컴파일 오류가 발생합니다. 2) RelyingParty 인증서를 사용하여 토큰을 암호화/해독하고 코드로 주장을 읽는 것을 알려주십시오. advace에 감사드립니다! – nunu

+0

@nunu : 코드를 변경 했으므로 AppliesTo 주소를 직접 추가해야합니다. 컴파일 오류는 무엇입니까? 토큰 해독 코드에 대해 지금 확인해 보겠습니다. – flayn

+0

@Floarin, 제 점은 무시하십시오. 1 for now .. 컴파일 오류가 해결되었습니다 .... 예. 제 의견에 대해 알려주십시오. 2 고마워! – nunu

7

: AD의 / / .../ADFS/서비스/신뢰/13/usernamemixed 엔드 포인트 사용자의 자격 증명을 제공하는 Windows 통합 인증을 사용하는 FS 2.0 연결 할 수 있도록 셋업해라. 이 엔드 포인트에서 http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/Issue 조작을 호출하십시오. (자세한 내용은 section 4.1 of the WS-Trust 1.3 specification에 있습니다.)이 작업의 입력은 RequestSecurityToken 요청입니다. 응답에는 필요한 클레임이 포함 된 SAML 토큰이 포함됩니다. / / .../ADFS/서비스/신뢰/MEX : 당신이 그 URL에 비주얼 스튜디오 Add Service Reference 마법사, 또는 자바 wsimport를 가리키는 경우 '는 AD FS 2.0 WSDL은 HTTPS에서 avaible이다

주 RST 문제 작업을 수행하는 데 사용할 수있는 클라이언트 코드를 쉽게 생성 할 수 있습니다.

+0

@Marnix 안녕하십니까, [SecurityToken token = channel.Issue (first);]를 사용하여 보안 토큰을 발급했지만 주장을 제공하지 않습니다. 내가 'https : //.../adfs/services/trust/13/usernamemixed'호출을 통해 클레임을 얻을 수있는 방법을 알려주시겠습니까? – nunu

+0

좋아요, 그럼 당신은 확실히 바른 길입니다. 불행히도 여기서는 더 이상 도움이되는 WCF 보안 모델에 대해 충분히 알지 못합니다. 죄송합니다. –

+0

WCF가 여기에 해당하지 않는다고 생각합니다. Asp.Net MVC 4 - 웹 API의 새로운 기능으로 서비스를 개발하고 있다고 가정 해 봅시다. MVC4 웹 API를 사용하면 AD FS에서 클레임을 얻을 수 있습니까? – nunu

관련 문제