2011-01-12 2 views
0

ASP.NET 페이지에서 통신 할 서비스 (WCF)가 있습니다. WCF 서비스는 데이터 저장소 (실제로는 파일)에 해시 된 암호를 가지고 있습니다. WCF 서비스에는 모든 호출시 사용자 이름과 해시 된 암호가 필요합니다.사용자 이름과 암호 저장 ASP.NET 인증

Nowm 내가 겪고있는 문제는 ASP.NET에서 폼 인증을 사용하여 사용자를 인증하면 사용자가 인증 된 후에 쿠키가 사용자 컴퓨터에 저장되지만 사용자 이름과 해시를 저장하려고합니다. 사용자가 WCF 서비스를 사용할 수 있도록 암호도 설정해야합니다. 이 정보는 안전하고 안전하도록 어디에 저장해야합니까?

세션 변수를 사용해야합니까? 그 옵션을 선택하면 양식 기반 인증에서 전환하고 세션 변수 또는을 사용하여 수동으로 인증해야합니다. 웹 페이지 액세스를 위해 양식 기반 인증을 사용하고 세션 변수에 사용자 이름과 해시 암호를 저장해야합니까? 각 장단점은 무엇입니까?

답변

0

다른 쿠키에 사용자 이름과 암호 (물론 해시로 표시)를 저장할 수 있습니까? 통신 할 때마다 쿠키를 가져 와서 사용자 이름과 함께 WCF 서비스로 보냅니다.

WCF 서비스 끝에서 사용자 이름과 해시 된 사용자 이름/암호 조합을 갖게됩니다. 동일한 해시를 적용하면 WCF 끝 부분에 저장된 것과 동일한 문자열로 끝나야합니다. 일치하는 경우 사용자가 유효합니다. 귀하의 편집에

감사합니다 : 당신이 제안있는 한 그들 사이의 구별의 많은이

하지 있는지 확인하십시오. 폼 인증을 사용하면 세션 변수가 만들어지고 쿠키를 사용한다고 가정하면 세션 변수가 사용자와 연결될 수있는 쿠키가 저장됩니다. 따라서 폼 인증을 사용하더라도 여전히 세션 변수를 사용하고 있습니다.

유일한 질문은 세션/쿠키에 사용자가 입력 한 해시 된 암호 버전을 저장하려는 경우입니다. 전문가는 어딘가에 저장되어 잠재적으로 보안 위험을 제기 할 수 있다는 것입니다.

완전히 다른 방법은 암호를 보내고 각 요청에 대해 다시 인증하는 대신 사용자의 암호와 관련이없는 인증 토큰을 보내는 것입니다. 대신이 토큰의 유효성을 검사하십시오.

성공적인 로그인시 토큰을 발행 할 수 있으며 WCF와 동일한 해시 알고리즘을 사용해야합니다. 요청의 일부로 사용자 이름과 토큰을 보내고 그것이 유효하고, 권한이 있으며, 여전히 최신인지 확인합니다.

+0

해시 된 암호 대신 토큰을 사용하면 어떤 이점이 있는지 자세히 설명해 주시겠습니까? 세션이나 쿠키의 어딘가에 토큰을 저장해야합니다. – Tux

+0

사용자의 암호를 변경하지 않고 토큰을 무효화 할 수 있습니다. 사용자의 암호는 어디에서나 사용하는 암호와 동일 할 수 있습니다. 다른 사용자가 사용자의 토큰을 손상 시키면 사용자의 인터넷 뱅크에 로그인 할 수있는 비밀번호가 깨진 경우 API에 액세스 할 수 있습니다. –

0

확실히 클라이언트 측 (쿠키)이 아닙니다. 쿠키를 사용하여 ASP 및 세션 ID에 대해 사용자를 인증하십시오. 이것은 ASP.NET 기본값입니다. 세션에 사용자 이름과 PW를 저장하십시오.

더 많은 보안을 가져올 것이므로 Windows 인증이나 다른 권장되는 메커니즘을 사용해보십시오.

@your edit : 관련 컨트롤 (또는 ASP.NET의 다른 사전 구현 된 메서드)과 함께 양식 인증을 계속 사용하는 것이 좋습니다. 자체적으로 다시 구현하면 아무런 이유없이 커다란 감정을 느낄 수 있습니다. 적어도 .NET 인증과 동일한 안전성을 얻으려면. 정말 해시 된 암호를 비교하는 것 이상입니다 ..! 또한 추가 사용자 관련 데이터를 저장할 자연스러운 장소이기 때문에 세션을 사용하십시오. 다시 - 세션은 쉽게 구성되고 비교적 안전합니다.

+0

쿠키가 해시되고 올바른 사용자 이름없이 사용할 수 없으며 소금을 알지 못하면 사용할 수 없으므로 쿠키를 사용하지 않는 이유는 무엇입니까? –

+0

. 불안전 한 정보를 안전하지 않은 채널에 불필요하게 노출시킬 수 있기 때문입니다. 지금까지 내가 질문을 읽은 것처럼 ASP 페이지 (서버 쪽)와 WCF 사이에서만 통신이 진행됩니다. 따라서 클라이언트가 서비스와 직접 통신 할 필요가 없습니다. 고객은 ** 실제로 필요한 정보 만 가져야합니다. – user492238

관련 문제