도 메 인 을 뛰 어 넘 을 수 있 는 단일 로그 인(SSO)실현 방안[.net 코드 첨부]
정의:
전통 적 인 단일 사이트 로그 인 액세스 권한 수여 메커니즘 은 로그 인 에 성공 한 후 사용자 정 보 를 session 에 저장 하고 sessionId 는 쿠키 에 저장 하 며 로그 인 이 필요 한 자원(url)을 방문 할 때마다 현재 session 이 비어 있 는 지 판단 하고 비어 있 으 면 로그 인 인터페이스 로 이동 하여 로그 인 합 니 다.비어 있 지 않 으 면 접근 할 수 있 습 니 다.
단일 로그 인 은 다 중 사이트 공유 로그 인 액세스 권한 수여 체제 로 사용 자 는 한 사이트 에서 로그 인 하면 다른 사이트 에 로그 인 할 자원(url)을 방문 할 수 있 습 니 다.사용자 가 임의의 사이트 에서 로그 인 을 취소 하면 다른 사이트 의 로그 인 상태 도 취 소 됩 니 다.한 마디 로 한 곳 은 로그 인하 고 곳곳 은 로그 인 하 는 것 이다.한 곳 은 말소 하고,곳곳에서 말소 하 다.
응용 필드:
한 사이트 시스템 이 약간 복잡 할 때 업 무 를 분리 해 야 한다.예 를 들 어 한 전자상거래 사 이 트 는 상품 검색,상품 상세 정보,카 트,주문 등 을 하나의 서브 시스템 으로 나 눌 수 있다.하나의 시스템 이 여러 개의 서브 시스템 으로 나 눌 때 단일 로그 인 으로 권한 을 부여 해 야 한다.
업무 요구:
최근 에 회 사 는 업무 수요 로 인해 일부 서브 시스템 의 수요 와 홈 페이지 를 통합 시 켰 고 인터넷 에서 단일 로그 인 강 좌 를 많이 보 았 으 며 각종 상황 을 종합 하여 아래 의 단일 로그 인 실현 방향 을 정리 했다.그 중에서 폴 링 점프 의 방향 으로 여러 지점 에 쿠키 를 쓰 는 문 제 를 해결 했다.만약 타당 하지 않 은 점 이 있다 면 여러분 의 비판 과 시정 을 환영 합 니 다.
구현 기능:
1.완전 크로스 가능
2.url 투명(지점 점프 시 url 전달 token 또는 ticket 필요 없 음)
3.동기 화 로그아웃
4.쿠키 를 여러 지점 에 한 번 에 기록
효과 미리 보기:
사고의 방향 을 실현 하 다.
실현 난점:
이런 방식 의 난점 은 a.com 에 로그 인 할 때 쿠키 를 b.com 에 동시에 쓰 는 방법 이다.제 가 사용 하 는 방식 은 현재 sso.com 에서 하나의 지점 집합 을 유지 하고 로그 인 에 성공 한 후에 폴 링 으로 전환 하 는 방식 으로 쿠키 를 각 지점 에 기록 하 는 것 입 니 다.
구체 적 인 사고:
1.a.com 에 처음 방문->a.com 페이지 의 로그 인 버튼 을 클릭->sso.com 으로 이동 하여 로그 인 검증->로그 인 성공 후 데 이 터 를 cache 에 저장->한 다음 에 각 지점 에 차례로 방문 하여 쿠키 를 각 지점 에 기록->마지막 으로 로그 인 소스 페이지 로 이동
2.로그 인 성공 후->로그 인 할 자원(url)방문->배경 에서 sso.com 에 쿠키 유효성 검증 요청->방문 자원 검증
코드 분석
1.세 개의 사이트 새로 만 들 기:a.com,b.com,sso.com
2.a.com 에 홈/index 페이지 를 새로 만 듭 니 다.다음 과 같 습 니 다.
첫 번 째 방문 쿠키 가 존재 하지 않 습 니 다.요청 을 모 의 하 는 방식 으로 sso.com/login/vaidateLogin 에 검증 할 때 error 를 되 돌려 줍 니 다.페이지 에 로그 인 되 지 않 은 상 태 를 표시 합 니 다.
대응 하 는 view 페이지 는 다음 과 같다
sso.com/login/vaidateLogin 에 대응 하 는 코드:
3.a.com 홈 페이지 에서 로그 인 버튼 을 눌 러 sso.com 로그 인 페이지 로 이동(login/index)
4.sso.com 의 로그 인 코드 는 다음 과 같다.
5.로그 인 을 클릭 하여 로그 인 인증 방법 으로 들 어가 기
token 을 생 성 하 는 동시에 사용자 정 보 를 token 키 로 cache 에 저장 하고 만 료 시간 을 설정 합 니 다.
지점 집합 을 가 져 와 서 폴 더 를 바 꾸 는 방식 으로 각 지점 에 쿠키 를 쓰 고 마지막 으로 로그 인 소스 페이지 로 다시 설정 합 니 다.
로그 인 검증 방법 은 다음 과 같다.
a.com 과 b.com 에서 쿠키 를 옮 겨 쓰 는 방법 코드 는 다음 과 같 습 니 다.
/// <summary>
/// cookie
/// </summary>
/// <param name="token"> </param>
/// <param name="others"> </param>
/// <param name="main"> </param>
/// <returns></returns>
public ActionResult Jump(string token, string others, string main)
{
HttpCookie cookie = new HttpCookie("currentUser");
cookie.HttpOnly = true;
cookie.Expires = DateTime.Now.AddYears(100);//
cookie.Value = token;
Response.Cookies.Add(cookie);
// cookie
if (!string.IsNullOrEmpty(others))
{
//
var substationList = others.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
if (substationList.Count == 1)
{
return Redirect(others + "&main=" + main);
}
else
{
string currentRedirect = substationList[0];
substationList.RemoveAt(0);
string otherss = string.Join(",", substationList);
return Redirect(currentRedirect + "&others=" + otherss + "&main=" + main);
}
}
else
{
return Redirect(main);//
}
}
6.로그 인 소스 페이지 a.com/home/index 또는 b.com/home/index 되 돌리 기이때 a.com 과 b.com 에는 이미 쿠키 가 있 습 니 다.
7.로그 인(로그아웃)처리
sso.com/login/LoginOut 을 직접 호출 하 는 방법 을 올 리 면 다음 과 같 습 니 다
총결산
이러한 사용자 로그 인 정 보 를 cache 방식 으로 sso.com 에 저장 하고 cache 키 를 쿠키 의 값 으로 각 지점 에 저장 하 는 방식 으로 크로스 도 메 인 단일 로그 인 을 실현 합 니 다.
이런 방식 의 난점 은 a.com 에 로그 인 할 때 쿠키 를 b.com 에 동시에 쓰 는 방법 이다.제 가 사용 하 는 방식 은 현재 sso.com 에서 하나의 지점 집합 을 유지 하고 로그 인 에 성공 한 후에 폴 링 으로 전환 하 는 방식 으로 쿠키 를 각 지점 에 기록 하 는 것 입 니 다.
이런 방식 은 크로스 필드 단일 로그 인 을 실현 하 는 동시에 문제 도 존재 합 니 다.
1.ajax 로그 인 을 고려 하지 않 은 경우
2.각종 안전성 검증 을 하지 않 았 습 니 다(IP 신뢰,쿠키 납치,폭력 로그 인...)
부족 한 점 을 고려 하여 좋 은 생각 과 보충 적 인 의견 을 제시 해 주시 기 바 랍 니 다.
DEMO 다운로드:demo
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
작업 중 문제 해결 - (win 2003 asp. net) Session 과 페이지 전송 방법 으로 해결 방안 을 정상적으로 사용 할 수 없습니다.또한 F 는 처음에 우리 의 BP & IT 프로젝트 팀 이 Forms 폼 검증 을 사용 했다 고 판단 할 수 있 습 니 다. 페이지 를 뛰 어 넘 는 것 은http://hr.bingjun.cc/MyTask/MyTas...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.