다양한 .net 버전에서 Single Sign-On을 구현하는 방법
소위 싱글 사인온(Single Sign On)은 여러 응용 프로그램 시스템에서 사용자가 한 번만 로그인하면 상호 신뢰할 수 있는 모든 응용 프로그램 시스템에 액세스할 수 있음을 의미합니다. 실제로 프로그래머는 기술적으로 구현합니다. 여러 다른 도메인 이름 간에 쿠키를 공유하는 문제입니다.
최근에는 원래 기존 시스템의 하위 프로젝트에 연결된 다른 컴퓨터에 배포되는 ERP용 하위 프로젝트를 추가했습니다. .NET 2.0의 Login은 Single Sign-On을 실현합니다. N번 시도했지만 성공하지 못한 결과, .net2.0과 4.0의 쿠키 암호화/암호 해독 방법이 다르다는 것이 문제라는 것을 알게 되었습니다. 그래서 연구 끝에 우리는 다양한 .net 버전에서 Single Sign-On을 간단하게 구현할 수 있는 프로그램을 다시 작성하고 구현했습니다.
1, ***로그인 페이지 코드를 사용하여 구현:
코드는 다음과 같습니다:
protected void btnLogin_Click(object sender, EventArgs e)
{
//인증 및 송장 발행, 원래 요청 페이지로 이동
System.Web.Security.FormsAuthentication.RedirectFromLoginPage("ejiyuan", false);
}
2, 구성 파일:
코드는 다음과 같습니다:
< 인증>
p>
보호 속성이 "모두"로 설정된 경우 암호화 및 확인 데이터를 통과하는 해시 값이 쿠키에 저장됩니다. 확인 및 암호화에 사용되는 기본 키는 다음과 같습니다. machine.config 파일에서 이 값을 애플리케이션의 Web.Config 파일에서 재정의할 수 있습니다. 기본값은 다음과 같습니다: IsolateApps는 각 애플리케이션에 대해 서로 다른 키를 생성하는 것을 의미합니다. 우리는 이것을 사용할 수 없습니다. 동일한 키를 사용하여 여러 애플리케이션에서 쿠키를 암호화하고 해독하려면 IsolateApps 옵션을 제거하거나 더 나은 방법은 SSO를 구현해야 하는 모든 애플리케이션의 Web.Config에서 특정 키 값을 설정하는 것입니다. 902F8 D923AC" 유효성 검사="SHA1" decryption="3DES" /> 동일한 저장 방법을 사용하는 경우 SSO를 구현하려면 Web.config만 변경하면 됩니다. . 단일 지점의 각 애플리케이션이 동일한 구성을 가지고 있는지 확인해야 합니다. Single Sign-On 애플리케이션이 서로 다른 .net 버전에 걸쳐 있는 경우 여기에서 암호화/암호 해독에 md5를 사용하지 마세요. 3. 로그인 페이지가 없는 Single Sign-On은 직접 코드 구성이 필요하지 않습니다. 구성은 다음과 같습니다 코드는 다음과 같습니다: 4. 로그인 모듈은 다른 시스템의 직접 호출을 위해 방향 코드의 httpModules에 캡슐화됩니다. . 캡슐화 코드와 참조 방법은 여기에 첨부되어 있습니다. 코드는 다음과 같습니다. public class SsoLoginRedirectModule: IHttpModule { public void Init(HttpApplication i_application) { // TODO: UploadModule.Init 구현 추가 i_application.EndRequest += new EventHandler(i_application_EndRequest); } void i_application_EndRequest(객체 전송자, EventArgs e) { if ((HttpContext.Current.Response.StatusCode = = 302) && HttpContext.Current.Response.RedirectLocation.Contains(FormsAuthentication .LoginUrl)) { HttpContext.Current.Response.RedirectLocation = FormsAuthentication.LoginUrl + "?ReturnUrl= " + HttpUtility.Ur lEncode(HttpContext.Current.Request.Url.OriginalString); } } public void Dispose() { //새 NotImplementedException() 발생; } } 인용문: 코드는 다음과 같습니다. 다음은 다음과 같습니다. 피>