2010-04-09 4 views
0

저는 .NET을 처음 사용하고 프로그래밍에 많은 경험이 없습니다. 다음과 같은 상황에서 .NET에서 사용자 인증을 처리하는 표준 방법은 무엇입니까? 공정 A의.NET에서 사용자 인증 처리?

  1. 은 사용자 입력의 ID/패스워드

  2. 프로세스 A는 비보안 공용 채널을 통해 B를 처리하기 위해 ID/패스워드를 전송한다.

  3. 프로세스 B는 받았다 ID/비밀번호

으로 사용자를 인증 내가 모델 이상에서 사용할 수있는 표준 암호화 알고리즘 중 일부는 무엇인가?

사용자 (회사 소프트웨어를 구입 한 고객)는 자신의 컴퓨터 (인터넷에 연결된)에서 로컬로 소프트웨어 (프로세스 A)를 실행하게됩니다. 등록 된 사용자 만 프로그램을 실행할 수 있도록 회사의 서버에서 실행중인 프로세스 B의 사용자를 인증해야합니다.

+0

@Daniel : "C# .NET"과 같은 것은 없습니다. –

+0

@Daniel : 컨텍스트가 무엇입니까? ASP.NET? –

+0

@Daniel : 인터넷에 접속하지 않아도 프로그램을 실행할 수 없습니까? – davidsleeps

답변

0

구현하려는 것은 아마도 등록되지 않은 소프트웨어 복사본을 사람들이 실행하지 못하도록하는 DRM이라고합니다.

잃는 전투입니다. 모든 사람이 관련이있다

if (authenticationSucceeded) { 
    // Allow access to program 
} else { 
    // Show error and quit. 
} 

이 기능을 디 컴파일하는 것입니다

에서, if 문에 !를 삽입하고 다시 컴파일 : 아무리 당신이 그것을 구현하는 방법, 최종 결과는 코드에서 어딘가에는 이런 식으로 뭔가있을 것이라는 점입니다 다시 (또는 중간 언어 코드를 직접 수정하십시오.) 그들이 이렇게하면 그들은 당신의 안전을 망칠 것입니다.

이 점을 염두에두고 시스템을 구현하는 데 아주 간단하고 저렴한 시스템을 사용할 수도 있습니다. 서버에 일반 텍스트로 등록 된 키 목록 만 갖고 클라이언트가 HTTPS를 통해 자신의 키를 보내도록합니다 (도청 방지를 위해). 위에서 설명한 것처럼 해결 방법이 그렇게 쉬운 일이 아니므로 이보다 더 많은 보안을 추가하는 것은 가치가 없을 것입니다.


업데이트 : 포스터는 프로그램에서 원격 데이터베이스에 액세스하지 않고도 쓸모가 없다고 말합니다. 이 경우 이 소프트웨어의 무단 사용을 방지하는 데, 더 정확하게는 데이터베이스에 대한 무단 액세스를 방지하는 것이 좋습니다. WCF을 사용하면 서버에 안전하게 연결할 수 있으며 나머지 인터페이스에 대한 액세스를 허용하기 전에 사용자 이름과 암호 해시를 보내야합니다. 사용자 이름/암호가 올바르지 않으면 서버는 사용자의 서비스에 대한 추가 호출을 금지합니다.서버에서 허용 된 사용자 이름과 암호 해시를 데이터베이스에 저장할 수 있습니다.

+0

아무도 클라이언트 측에서 디 컴파일 할 수 없도록 코드를 왜곡합니까? 난 당신이 decompilation 문제를 처리 할 수 ​​있다면, https를 통해 WCF 서비스는 비보안 채널을 통해 통신하는 좋은 방법이라고 생각합니다. –

+0

@Shoaib : 나는 클라이언트 코드를 혼란스럽게하지 않을 것이다. 그러나 WCF의 좋은 아이디어입니다. 특히 서버에 대한 액세스없이 클라이언트가 쓸모가 없다는 포스터의 의견에 주목했습니다. –

0

보안 나의 강점 확실히 주요 문제가되지 않습니다이 사건 때문에 당신이 필요, 여기에 2 단계에서 데이터가 공공 채널을 통해 전송된다는 사실은 우려를 가지고 있지만 프로세스 B가 공격자가 개인 키를 해독하여 해독 가능한 정보를 유출하지 않고 프로세스 A의 콘텐츠를 해독 할 수 있도록 PGP 키 전달 시나리오 또는 이와 동등한 시스템을 구현합니다.

보다 바람직한 방법은 2 단계를 보안 채널로 전송하도록 변경하는 것이지만 일반적으로 SSL 연결을 사용하여 수행합니다.