2008-09-19 4 views
1

두 가지 웹 응용 프로그램이 있습니다. 하나는 로그인 한 사용자를 인증 할 수있는 간단한 인증 도구이고 은 다른 사이트로을 리디렉션합니다.ASP.NET 웹 응용 프로그램에서 queryString 숨기기

따라서 나는 ther userId (GUID)를 두 번째 응용 프로그램에 전달해야합니다. 현재이 URL을 통해 이루어 지지만이 ID를 숨기고 싶습니다.

누구에게 어떻게 제대로 할 생각이 있습니까?

[편집] : 나는 세션, 최선의 방법을 통해 GUID를 통과하기 때문에 ApplicationBoundaries (2 개 개의 다른 서버)

답변

0

의 세션을 사용할 수 없습니다.

http://www.w3schools.com/ASP/asp_sessions.asp

OR,이 2 개 개의 다른 서버이기 때문에, POST 방식으로 정보를 전달합니다

다른 가능성은 로컬 서버의 데이터베이스에 세션 상태를 저장하는 것입니다 http://www.w3schools.com/aspnet/aspnet_forms.asp

, 다른 서버에서 원격으로 데이터베이스에 액세스하여 사용자가 세션 시간 제한 내에 성공적으로 로그인했는지 확인하십시오.

이 점을 염두에두고 전체 인증을 원격으로 수행 할 수도 있습니다. 원격 서버에서 원격으로 로컬 데이터베이스에 연결하고 거기에서 로그인 자격 증명을 확인하면 세션 및/또는 쿠키를 원격 서버에 저장할 수 있습니다.

나는 당신이하려고하는 것을 완전히 막아 내기 때문에 AGAINST의 숨겨진 필드 제안을 권장합니다! URL에 GUID를 숨기려고하지만 HTML 코드에 동일한 정보를 게시하려고합니다! 이것은 그것을하는 방법이 아닙니다.

데이터베이스 옵션이 가장 좋으며, 가능하지 않은 경우 HTTP POST를 사용하십시오.

0

HTTP GET 대신 세션 변수 또는 HTTP POST를 사용하십시오.

0

서버에 공통 도메인 이름이있는 경우 쿠키를 사용할 수 있습니다.

EDIT : 쿠키는 ID를 시각적으로 숨기며 액세스 할 수 있습니다. 숨겨진 필드 나 GET 대신 POST 사용과 동일합니다. ID가 신중하고 네트워크를 통해 암호화되지 않은 상태로 보내지 않으려면 다른 접근 방식이 필요합니다.

솔루션은 서버가 공유하는 키를 사용하여 인증 서버의 ID를 암호화 할 수 있습니다. 또 다른 솔루션은 인증 서버에서 임의의 GUID를 생성 한 다음 인증 서버가 GUID에 해당하는 ID (SSL을 통해)를 다른 서버에 직접 알릴 수 있습니다.

0

쿼리 문자열을 통해 전달하는 대신 해당 값으로 숨겨진 양식 필드를 만든 다음 게시 된 값을 가져올 수있는 두 번째 페이지에 게시하면 사용자로부터 숨길 수 있습니다.

2

이것은 까다로운 상황처럼 들립니다. 그러나 몇 가지 옵션을 사용할 수 있지만 모두 응용 프로그램의 기능에 따라 다릅니다.

일단 WebApp1을 인증 사이트라고하고 WebApp2를 인증하면 해당 사이트를 지정해 봅시다.

WebApp2가 백그라운드에서 WebApp1을 호출 할 수 있습니까? (서비스)

응용 프로그램간에이 GUID를 전달할 때의 문제는 일반 텍스트를 통해 처리되는 것이며 사용자 ID를 고려할 때 누군가가이를 가로 채면 영원히 WebApp2에 액세스 할 수 있습니다. querystring 또는 form 변수에 전달하든 여전히 취약합니다.

WebApp2를 사용하여 WebApp1을 쿼리 할 수없는 경우 WebApp1이 만료되는 임시 Guid를 생성하는 것으로 간주해야합니다. 장기적으로는 훨씬 안전 할 수 있지만, 명백한 텍스트는 여전히 공격 받기 쉽습니다. 2 개의 웹 응용 프로그램도 동일한 데이터 저장소에 액세스해야합니다.

궁극적으로, 나는 AUthentication Site가 WebApp2가 소비 할 수있는 서비스 여야한다고 생각합니다. 사용자는 인증을 위해 WebApp1을 안전하게 호출하는 WebApp2를 통해 로그인해야합니다. WebApp2는 자체 세션을 관리 할 수 ​​있습니다.

+0

문제는 실제 인증이 WeppApp1에서 소비되는 완전한 다른 서비스에서 수행된다는 것입니다. 따라서 저는 실제로 임시 직원을 사용할 수 없습니다. GUID는 다른 시스템 (내 통제하에 있지 않음) – MADMap

2

쿠키가 크로스 도메인 이므로 쿠키를 사용할 수없는 경우 nonce를 사용하여 암호화합니다.

두 서버 간의 공유 암호/키를 설정하십시오. 암호화 된 GUID와 nonce 조합을 두 번째 서버로 보냅니다. 암호화를 해제하고 nonce가 아직 사용되지 않았는지 (응답 공격을 막기 위해) 확인한 다음 암호화되지 않은 GUID를 사용합니다.

난이도를 확인할 수있는 app1에 웹 서비스가 있습니다.이 시점에서 WSTrust 및 단일 사인 온 솔루션으로 향하고 있습니다.이 솔루션은 일반적으로 ' 다시 시도하는 것)

쿠키를 사용하여 쉽게 편집/위장 되어도 확인이 가능합니다.

2

두 개의 ASP.NET 웹 응용 프로그램이 있고 하나의 응용 프로그램이 사용자를 인증하지만 사용자를 인증하지 않습니까?

예를 들어 ....

웹 서비스!

인증 응용 프로그램에서 새 웹 서비스를 만들고 (.asmx 확장자 임) 사용자와 암호 등을 취하는 단일 메서드를 추가하고 인증 정보를 반환합니다.

그런 다음 두 번째 앱에서 WSDL을 가져오고 첫 번째 앱을 메소드와 같이 호출합니다. 코드를 단순화하고 문제를 해결할 것입니다.

예제 :

AuthenticateUserService.asmx가 인증 응용 프로그램에 간다

이 일단

using System; 
using System.Web; 
using System.Web.Services; 
using System.Web.Services.Protocols; 

[WebService(Namespace = "http://tempuri.org/")] 
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
public class AuthenticateUserService : System.Web.Services.WebService 
{ 
    [WebMethod] 
    public bool AuthenticateUser(string username, string passhash) 
    { 
     // Fake authentication for the example 
     return (username == "jon" && passhash == "SomeHashedValueOfFoobar"); 
    } 

} 

가 설치, 기본 응용 프로그램을 불, 오른쪽 프로젝트를 클릭하고 클릭합니다 "추가 웹 참조" .

인증 응용 프로그램에 asmx에 대한 url을 입력하면 Visual Studio가이를 발견하고 프록시 클래스를 만듭니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    // Now we can easily authenticate user in our code 
    AuthenticateUserService authenticationProxy = 
     new AuthenticateUserService(); 
    bool isUserAuthenticated = 
     authenticationProxy.AuthenticateUser("jon", SomeHashMethod("foobar")); 
} 

그래서,이 정말 무엇을합니까 : 그 작업이 완료되면 우리의 주요 응용 프로그램에서 로컬 방법처럼

, 우리는 그 메소드를 호출 할 수 있습니다?

인증 프로세스에서 클라이언트를 제거합니다.

현재 공정 :

  • 클라이언트는
  • APPA는 AppB에 클라이언트를 리디렉션 APPA에 자격 증명을 입력 자격 증명이 일치하는 경우 AppB 다시 APPA에 클라이언트를 리디렉션
  • .

AppA와 AppB 간의 서버 측 SOAP 호출로 대체되었습니다. 지금은이 같은 :

  • 클라이언트들이
  • APPA는 클라이언트에 적절한 컨텐츠를 제공 좋은 경우
  • APPA는 AppB을 요청 APPA에 자격 증명을 입력합니다.
0

위의 글에서 설명한대로 세션 관리 또는 HTTP 게시를 사용하십시오.

관련 문제