ASP 얘기하자.NET 제7 - 응용프로그램 및 서버 간 양식 검증

6885 단어 asp.net
많은 경우 우리는 같은 서버에 있는 두 개의 다른 응용 프로그램에서 같은Forms 검증 정보를 공유하고 싶다. 즉, 한 응용 프로그램이 검증을 통과한 후에 다른 응용 프로그램이 이 검증 상태를 공유할 수 있어 다시 로그인하지 않고 단일 로그인 효과를 실현할 수 있다.
Forms 인증을 사용하여 생성된 쿠키는 암호화되고 모든 프로그램은 기본적으로 독립된 복호화와 검사 코드를 생성하기 때문에 우리는 서로 다른 응용 프로그램 간에 암호화된 쿠키를 공유하기 어렵다.공유를 가능하게 하려면 설정 파일 (서버 쪽) 을 통해 암호화 키와 인증 코드를 수동으로 지정해야 합니다.
machineKey 기본 구성은 다음과 같습니다.
1 <machineKeydecryption="Auto"validation="SHA1" ecryptionKey="Auto Generate, IsolateApps"validationKey="Auto Generate, IsolateApps"/>

⑥ decryption 속성: Forms에서 검증한 쿠키를 지정하는 암호화 알고리즘입니다. 값은 Auto, AES 또는 3DES이고 기본값은 Auto입니다. (ASP.NET는 웹 서버의 성능에 따라 최적의 암호화 알고리즘을 선택합니다.)
⑥ validation 속성: AES, MD5, SHA1 및 3DES의 값을 추출할 수 있는 인증 쿠키를 Hash 및 암호화하는 알고리즘을 지정합니다.
⑥ descryptionKey 속성 및 validationKey 속성: 유효성 검사 쿠키를 암호화한 키와 Hash 연산에 대한 유효성 검사 코드를 나타냅니다.
또한 위의 구성에서는 다음을 수행합니다.
⑥ AutoGenerate: ASP.NET가 임의 키를 생성하여 LSA(로컬 독립 실행형)
⑥ IsolateApps는 웹 서버의 각 응용 프로그램에 대해 고유한 키를 생성함을 나타냅니다.
 
우리는 서버측 웹을 다시 쓸 수 있습니다.config의 설정은 앞의 기본 설정에서 decryptionKey와validationKey 두 속성 중의 IsolateApps를 제거하면 됩니다. 즉, 이 설정은 모든 응용 프로그램에 독립적이지 않다는 것을 의미합니다.
팁:
서버측 웹.config 경로:
C:\Windows\Microsoft.NET\Framework(64)\[version]\CONFIG\web.config
 
다른 경우, 만약 우리가 서로 다른 웹 서버 (예를 들어 웹farm에서) 의 응용 프로그램이 같은 쿠키 암호화를 공유하기를 원한다면.decryptionKey와validationKey 속성 값을 수동으로 생산하고 서버 간에 일치하도록 해야 합니다.
AES 알고리즘은 64비트 16진수 문자의 랜덤 서열이 필요합니다. SHA1 알고리즘은 128비트 16진수 랜덤 서열을 사용합니다. 우리는 이런 코드를 통해 필요한 랜덤 서열을 생성할 수 있습니다.
 1 string GetKey(int length)

 2 {

 3     byte[] buffer = new byte[length / 2];

 4     RNGCryptoServiceProvider provider = new RNGCryptoServiceProvider();

 5     provider.GetBytes(buffer);

 6     StringBuilder builder = new StringBuilder(length);

 7     for (int i = 0; i < buffer.Length; i++)

 8     {

 9         builder.Append(string.Format("{0:X2}", buffer[i]));

10     }

11     return builder.ToString();

12 }

만약 우리가 단지 두 서버에 같은 응용 프로그램이 같은 검증 암호화 정보를 공유하고 싶을 뿐이라면, 우리는 machine Key의 설정을 응용 프로그램 자체의 웹에 두어야 한다.config에서 다른 cookie는 디자인에 있어 크로스 인증을 사용할 수 없기 때문에 한 웹 서버의 서로 다른 응용 프로그램이든 여러 서버의 같은 응용 프로그램이든 모두 같은 필드에 있어야 한다(즉 하나의 도메인 이름은 같아야 한다. 예를 들어 두 응용 프로그램 1.sample.com과 app2.sample.com은 같은 필드에서) 앞에서 소개한 이런 방식을 사용해야 효과적이다.
ASP.NET는 전역의 검증 공유에 대해 해결 방안을 제공했다. 즉, 쿼리 문자열을 통해 쿠키 대신 검증 증빙서류를 전달하는 것이다.웹이 필요합니다.config에서 응용 프로그램이 검색 문자열을 통해 검증 증빙서류를 전달하고 검증 정보의 크로스 공유를 실현할 수 있도록 다음과 같은 설정을 합니다.
1 <authentication mode="Forms">

2   <forms enableCrossAppRedirects="true"/>

3 </authentication>

원래 쿠키에 저장된 검증 정보를 Url에 추가하는 방식도 간단하다. 즉, 일반 검색 문자열을 전달하는 전달 방식이다.
예를 들어 다음과 같은 HyperLink가 있습니다.
1 <asp:HyperLink ID="lnkToOtherDomain" NavigateUrl="http://www.otherdomain.com/secret.aspx"  runat="server" />

C# 코드를 사용하여 인증서를 추가했습니다.
1 protected void Page_Load(object sender, EventArgs e)

2 {

3     string cookieName = FormsAuthentication.FormsCookieName;

4     string cookieValue = FormsAuthentication.GetAuthCookie(User.Identity.Name, false).Value;

5     lnkToOtherDomain.NavigateUrl += string.Format("?{0}={1}", cookieName, cookieValue);

6 }

 

좋은 웹페이지 즐겨찾기