2012-01-24 2 views
1

사용자 이름과 암호를 사용하는 독립 실행 형 인증 WCF 웹 서비스에 문제가 있습니까? https 또는 다른 우수 사례를 사용해야합니까?독립 실행 형 인증 wcf 웹 서비스

또한 WCF 웹 서비스를 사용하여 사용자의 암호를 재설정하려는 경우 모든 종류의 무차별 공격을 방지하려면 어떻게해야합니까? 아니면이 접근법을 둘러싼 모범 사례도 있습니까? 비밀번호를 재설정하기 위해 이메일/사용자 이름을 보내면됩니다.

답변

1

을 당신이 당신의 서비스의 인증을 외부화하려는 경우이 시험을, 현명한 방법입니다 Windows Azure Access Control Service를 사용하여 Active Directory Federation Service 또는 Facebook 또는 Google과 같은 다른 ID 공급자와의 ID 연합을 지원할 수 있습니다.

X509 인증서와 같은 향후 대체 인증 스키마를 지원하는 것이 상대적으로 쉽다는 이점이 있습니다.

필요에 따라 복잡해 보이지만 WS-Trust와 같은 표준 프로토콜을 사용하여 인증 서비스를 구현하는 것을 고려해야합니다. 이 경우 귀하의 서비스는 전문 용어를 사용하는 보안 토큰 서비스 (STS)가됩니다. 이것은 Windows Identity Foundation (WIF)을 사용하여 상당히 잘 지원되며 사실 Visual Studio 용 WIF 도구에는 샘플 STS가 포함되어 있습니다.

Dominic Baier에서 만든 우수한 준비가 된 오픈 소스 STS가 있으며 필요에 따라 다운로드하여 사용자 정의 할 수 있습니다 (예 : 사용자 이름/암호 저장소 사용). 당신은 내가 말한대로이 아마도 당신이 필요로하는 것보다 더 복잡하다, 여기

http://identityserver.codeplex.com/

이 다운로드 할 수 있지만, 미래에 정말 좋은 투자가 될 수있다.

+0

실제로 이것은 매우 흥미 롭습니다. –

+0

최근에 내 자신의 인증 서비스를 시작한 후 점점 더 복잡 해지는 반복 작업을 수행 한 결과 우리는 적절한 STS로 리팩터링을 마칠 예정입니다. –

2

예 https를 사용해야합니다. http를 통한 인증은 인증되지 않은 서비스와 마찬가지로 공격 받기 쉽기 때문에 누구나 전선을 통과하는 일반 텍스트를 스니핑 할 수 있습니다. 당신이 그렇게 이메일 등을 전송하여 변화 될 수있는 사용자 이름 - 암호가 .. 당신은 서버에서 일부 텍스트 파일을 만들 수 있습니다 UserNamePasswordValidator 클래스를 사용, 인증을 구현할 수 WCF에서 좋은 방법은 ...이

public class MyCustomValidator: System.IdentityModel.Selectors.UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     if (null == userName || null == password) 
     { 
      throw new ArgumentNullException(); 
     } 

     else 
     { 
      bool isValid = UserRepository.ValidateUser(userName,password); //any db based checking 

      if(!isValid) 
      { 
       throw new SecurityTokenException("Unknown Username or Password"); 
      } 
     } 
    } 
} 

설정 : 당신은 HTTPS없이 인증을 사용하고자하는 경우

<system.serviceModel> 
     <bindings> 
     <wsHttpBinding> 
      <binding name="CustomAuthentication"> 
      <security mode="Message"> 
       <message clientCredentialType="UserName" /> 
      </security> 
      </binding> 
     </wsHttpBinding> 
     </bindings> 

     <behaviors> 
     <serviceBehaviors> 
      <behavior name="CustomValidator"> 
      <serviceCredentials> 
       <userNameAuthentication userNamePasswordValidationMode="Custom" 
       customUserNamePasswordValidatorType="MyAssembly.MyCustomValidator, MyAssembly"/> 
      </serviceCredentials> 
      </behavior> 
     </serviceBehaviors> 
     </behaviors>  

     <services> 
     <service name="MyService" behaviorConfiguration="CustomValidator"> 
      <endpoint address="" binding="wsHttpBinding" contract="IMyService" bindingConfiguration="CustomAuthentication" /> 
     </service> 
    </services> 
</system.serviceModel> 

당신이 시도 할 수 있습니다 : WCF Authentication using basicHttpBinding and custom UserNamePasswordValidator