2012-07-17 5 views
2

Active Directory에 사용자 기반이있는 프로그램이 있습니다. AD와 내 프로그램의 중개자 역할을하는 ADFS를 사용합니다. . 나는 한 번 사람이 로그인을 시도 ADFS에서 유효한 토큰을 얻을 수있는 C# 보안 토큰을 사용C# 보안 토큰 오류 3242

로그인 시도가 어떤 이유로 실패하면 나는 오류를 3242.

{ "ID3242가 나타납니다 보안을 토큰을 인증하거나 권한을 부여 할 수 없습니다. "}

잘못된 사용자 이름 또는 잘못된 암호를 입력하거나 Active Directory에서 암호가 만료 된 경우 이런 일이 발생합니다.

사용자가 로그인하지 못한 경우 사용자가 로그인 할 수없는 이유에 대해 더 나은 오류 메시지를 표시하려고합니다. 암호가 만료되었다고 알려주고 암호를 재설정하는 방법에 대한 지침을 제공하는 것이 가장 이상적입니다.

내 질문은 모두 다음과 같습니다. C# SecurityToken 개체 사용 중 , 로그인 실패시 더 나은 오류 메시지를 사용자에게 제공하려면 어떻게해야합니까?

나는 이러한 개념에 새로운 것이므로, 불쾌한 세부 사항에 대해 미리 사과드립니다. 이 게시물은 누군가가 좋은 방향으로 나를 가리킬 수 있는지 내 감정을 밖으로 퍼팅 날입니다. 귀하의 시간과 응답에 미리 감사드립니다.

답변

1

귀하의 의견이 "만료 된 계정"을 언급하는 반면 "만료 된 암호"에 대한 질문. 그들은 매우 다른 짐승입니다!

만료 된 암호 - ms-DS-User-Account-Control-Computed attribute

만료 된 계정 :

principalContext = GetPrincipalContext(ldapOU); 
userPrincipal = new UserPrincipal(principalContext); 
DateTime date = userPrincipal.AccountExpirationDate; 

당신에게 날짜를주고 단순히 비교합니다.

+0

당신이 맞습니다, 그것은 지금까지이 도메인에 대한 나의 익숙하지 않은 예입니다 :) 답변 해 주셔서 감사합니다! 그러나 내가 한 것은 암호가 만료되었습니다. 나는 당신의 제안을 연구 할 것이다! –

+0

ms-DS-User-Account-Control-Computed 특성 - C#에서 액세스 할 수있는이 항목입니까? UF_PASSWORD_EXPIRED와 같은 반환 값이 있지만이 결과는 어디에 표시됩니까? –

+0

실제로 그렇습니다. 기사의 맨 아래로 내려 가서 코드 스 니펫이 있습니다. 스 니펫은 UF_LOCKOUT을 표시하지만 UF_PASSWORD_EXPIRED를 대체하면됩니다. – nzpcmad

1

오류 메시지 동작 자체가 다를 수는 없습니다. 그러나 예외를 catch하고 AD를 쿼리하여 사용자가 있는지 여부, 계정이 비활성화되어 있는지, 계정이 만료되었는지 여부를 판단한 다음 추가 세부 정보를 제공하는 새 예외에서 원래 예외를 래핑하고 throw 할 수 있습니다. 그러나 공격자가이 정보를 사용하여 시스템에 대한 유용한 정보를 얻을 수 있기 때문에 사용자 이름이나 암호가 잘못되었는지 여부 등의 정보를 제공하는 것이 일반적으로 좋지 않습니다. 오류 메시지가 그러한 정보를 처음으로 반환하지 않는 이유입니다. 관리자는 사용자가 문제를보고 할 때 항상 계정을 확인할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 당신은 좋은 지적과 좋은 생각을 가지고 있습니다! 계정 만료되었는지 확인하고 싶습니다. C# 라이브러리를 사용하면 쿼리 할 수 ​​있습니다. –

+0

System.DirectoryServices 네임 스페이스는 사람들이 이러한 종류의 작업을 시작하는 장소 인 것처럼 보입니다. –

+0

http://stackoverflow.com/questions/1394025/active-directory-ldap-check-account-locked-out-password-expired를 참조하십시오. – JamieSee