2010-11-25 3 views
2

안녕,C 번호 저장 정보가

나는 C#에서 서버 프로그램을하고 있어요,하지만 난 문제로 실행했습니다. 사용자가 연결하면 그의 계정이 인증됩니다. 괜찮습니다.

하지만 문제는 서버가 연결된 사용자의 사용자 이름, 암호 등을 매개 변수로 사용하여 많은 쿼리와 함수를 실행해야한다는 것입니다. 이것은 클라이언트가 1 개인 경우 문제가되지 않지만 멀티 스레딩과 다중 연결은 어려운 작업입니다.

현재는 내가 이런 식으로 호출 할 필요가 몇 가지 기능을 가지고 : 나는 어쩌면 5-6이 기능을 사용하기 때문에 그냥 나에게 잔인한 사람처럼 보인다

functionName(action, value, username, password) 

(주로 보안상의 이유로) 한 번에 하나의 문자열.

나는 정보를 섞어 쓰지 않고 여러 연결된 사용자의 정보를 저장하는 좋은 방법을 찾고있다.

감사합니다. 나는 현재하고 있어요 무엇

:

내가 전에 말했듯이,이 순간에 클라이언트는 항상 서버에 자신의 이름과 암호화 된 비밀번호를 전송한다. 그리고 사용자 이름과 암호는 항상 대부분의 방법에 대한 매개 변수로 추가되므로 데이터베이스가 올바른지 확인할 수 있습니다.

코드가 복잡해 보입니다.

편집 : 사용자가 자신의 패스워드와 아이디를 사용하여 로그인 할 순간

. 그런 다음 정보를 암호화하여 패킷 형태로 보냅니다.

서버는 정보를 암호 해독하고 데이터베이스에서 사용자 이름과 암호를 확인합니다.

그런 다음 ID를 저장하고 모든 다음 패킷에 추가 할 수 있도록 GUID를 만들어 클라이언트에 다시 보냅니다.

이제 클라이언트 (서버 쪽)의 패킷에있는 GUID가 합법적 인 서버 쪽인지 어떻게 확인합니까? -do 나는 GUID를 데이터베이스에 임시로 저장하기 만합니까? 당신은 보안 토큰을 반환하는을 인증 방법, 아마도 GUID

Guid Authenticate(username, password) 

을 고려하고 username.password 대신 방법에 주변이 통과 할 수

답변

2

functionname(action, value, securityToken) 
+0

고정 된 시간 동안 사용하지 않으면 사용자가 로그 아웃 할 때 토큰이 만료되어야한다고 추가합니다. 보안상의 이유로 ... –

+0

감사합니다. 좋은 생각 인 것 같습니다. 궁금한데, 다음 GUID가 덮어 쓰지 않고이 GUID를 저장하는 방법은 무엇입니까? 그냥 데이터베이스에 임시 값으로 저장합니까? – Nick

+0

데이터베이스에 세션 테이블을 유지할 수 있습니다 (예 : 설정된 시간이 지나면 토큰 만료가 용이 해짐). – Jamiec

0

이해하는 경우 올바르게 클래스를 생성하고 username, password 매개 변수로 인스턴스화 한 다음 functionName (action, value) 메서드 만 2 개의 인수로 갖게 될 것입니다. 한 문자열에서 현재 5-6 번 호출하는 것처럼 호출합니다 (??) 그리고 내부에 실제 호출됩니다. functionName은 4 개의 매개 변수를 사용하여 해당 필드에서 2 개의 매개 변수를 추가합니다.

SecureFunctionCaller와 유사 sfc = SecureFunctionCaller (username, password); sfc.functionName (action, value).

번호에 따라 모든 기능을이 클래스에 복사해야 할 수도 있습니다. 또한 사용자 개체를 만들고 사용자 이름과 암호를 모두 포함 할 수 있으며 4 개의 매개 변수 대신 3 개의 매개 변수 기능을 사용하는 것이 좋습니다.

PS : 나는 당신이 가능 현명하지만 너무 작은 정보와 모든 잘못 아키텍처를하고 있습니다 하드

PPS를 추측에 동의했다 : 그는이 때문에 처음 사용자를 인증해야한다는 지금은 분명 당신의 편집 후 보안 토큰을 작성한 다음 두 매개 변수 대신 사용하십시오. 클라이언트가 아닌 서버에서 메소드 호출을 설명한다고 생각했습니다.

2

나는이 모든 잘못에 대해 생각하고 있다고 생각합니다. 로그인 할 때만 사용자 비밀번호를 보내면됩니다. 그 후에 잊어 버리십시오. 사용자 ID를 확인하려면 고유 ID를 사용하십시오.

1

그런 시나리오에서 내가하는 일은 대개 사용자가 자신의 사용자 이름/암호로 먼저 로그인하고 이후 호출을 위해 대신 사용할 수있는 토큰을 반환하도록하는 것입니다. 토큰에는 만료 시간이 있으며 추가 보안을 위해 IP에 넥타이 할 수도 있습니다.

토큰의 parth로 해시를 포함 할 수있는 영리한 일은 토큰이 유효한지 여부를 처음 확인할 수 있기 때문입니다. 데이터베이스를 치고, 토큰이

dsklfgjkgjdlg이고, 토큰 해시 문자열이 "craemefraice"라고 말하면 토큰에 해독 문자열을 해시하고 dsklfgjkgjdlg : [thehash] 일 수 있도록 토큰에 추가합니다.

토큰을 확인하려면 문자열을 :로 분리하고 비밀 문자열로 해시 한 다음 토큰과 일치하는지 확인하십시오. 유효하지 않은 경우 데이터베이스에 대한 자격 증명을 확인하는 경우

+0

감사합니다. 매우 분명한 답변입니다. 나는 내 질문을 업데이트 할 것이고, 당신도 그 질문을 읽을 수 있다면 좋을 것이다. – Nick

+0

일반적으로 데이터베이스에 저장하지만 서버에 캐시합니다. – Homde