제 3 사인 싱글 사인온 시스템과 상호 작용해야하는 장고 앱용 싱글 사인을 구현해야합니다. 그 사람은 다른 시스템에 로그인하기 시작하고 장고 앱으로 리디렉션됩니다. 장고 애플 리케이션은 그 사람의 세션이 여전히 활성화되어 있으면 몇 분 간격으로 확인해야합니다. 이 작업은 HTTP GET 호출을 수행하고 HTTP GET 요청에 모든 쿠키를 전달하여 수행되며 HTTP 헤더에 True 또는 False를 반환합니다.싱글 사인온 용 장고 미들웨어 내에서 HTTP GET으로 쿠키 전달
내가 장고 미들웨어를 사용하여 마지막으로 그 사람이 자신의 인증을 확인한 다음이 한계를 넘으면 서버를 핑 (ping)하고 세션이 여전히 유효한지 확인합니다 . 그렇다면 계속해서 다른 사이트로 다시 연결하여 로그인하십시오.
두 사이트가 모두 동일한 도메인에 속해 있으므로 도메인의 모든 쿠키에 액세스 할 수 있습니다.
배경 지식이 생겼으니 내 질문은 이것입니다.
머리글에 전달 된 모든 쿠키로 HTTP GET을 호출하는 가장 좋은 방법은 무엇입니까? 미들웨어에서
은 내가 URLLIB과 httplib2를 사용하여 몇 가지 기본적인 시도를 시도
request.COOKIES에서 모든 쿠키에 액세스 할 수 있지만, 제대로 동작하지 않습니다. 너무 많은 시간을 소비하기 전에, 나는 이것을 할 수있는 더 좋은 방법이 있는지를 물어 보았습니다.
은 여기가 내가 진정한를 얻을 브라우저를 통해 취득 할 경우, 로그인 내가 항상 거짓 얻을 제대로 작동하지 않는 것 httplib2
def httplib2_auth(auth_url, cookies):
""" Cookies is a dict of cookies from request.COOKIES in middleware """
http = httplib2.Http()
cookie_str = "; ".join("%s=%s" % (x, cookies[x]) for x in cookies if cookies[x])
headers = {'Cookie': cookie_str}
response, content = http.request(auth_url, 'GET', headers=headers)
if 'AUTHENTICATION-X' in response:
is_valid = response['AUTHENTICATION-X']
if is_valid == 'TRUE':
return True
return False
에서 내 시도이다. 어쩌면 내가 쿠키를 잘못 설정 한 것일까 요?
는 여기에 내가 URLLIB 사용하여 헤더를 확인하지만, 몸이 항상 어쨌든 유효하지 않습니다 즉, 거짓라고하는 방법을 잘 모르겠어요 URLLIB
def urllib_auth(auth_url, cookies)
""" Cookies is a dict of cookies from request.COOKIES in middleware """
cookie_str = "; ".join("%s=%s" % (x, cookies[x]) for x in cookies if cookies[x])
opener = urllib.FancyURLopener()
opener.addheader("Cookie", cookie_str)
obj = opener.open(auth_url)
result2 = obj.read()
log.info("result = %s " % result2)
obj.close()
에서 내 시도이다. 다시 한번, 쿠키를 올바르게 설정하고 있는지 확실하지 않습니다.
다음에 urllib2를 사용하려고합니다. 내 취향에 맞게 설계된 것 같아서 피하고 있습니다. 결과가 나오면 게시 할 예정입니다.
싱글 사인온을 사용하는 다른 시스템에 액세스 할 수 없기 때문에 로그 나 그 재미있는 것을 볼 수 없습니다.
편집 : 추가 된 파이썬 요청의 예와 urllib2가 예를
파이썬 요청 버전, 그것은 요청 헤더에 쿠키를 설정하지 않습니다. 이 중 하나를 요청 헤더에 쿠키를 전달하는 것처럼
def requests_auth(auth_url, cookies):
cj = cookielib.CookieJar()
for x in cookies:
if len(cookies[x]) > 0:
ck = cookielib.Cookie(version=1, name=x, value=cookies[x],
port=None, port_specified=False, domain='.example.com',
domain_specified=True,
domain_initial_dot=True, path='/',
path_specified=True, secure=False,
expires=None, discard=True,
comment=None, comment_url=None,
rest=None, rfc2109=True)
#log.info(ck)
cj.set_cookie(ck)
log.info("cookies = %s " % cj)
response = requests.get(auth_url, cookies=cj)
log.info("response %s \n" % response)
log.info("response.headers %s \n" % response.headers)
log.info("response.content %s \n" % response.content)
urllib2가 버전은 SSO없는 나는 cookiejar와
def urllib2_auth(auth_url, cookies):
log.info("[auth]")
cj = cookielib.CookieJar()
for x in cookies:
if len(cookies[x]) > 0:
ck = cookielib.Cookie(version=1, name=x, value=cookies[x],
port=None, port_specified=False, domain='.example.com',
domain_specified=True,
domain_initial_dot=True, path='/',
path_specified=True, secure=False,
expires=None, discard=True,
comment=None, comment_url=None,
rest=None, rfc2109=True)
log.info(ck)
cj.set_cookie(ck)
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
urllib2.install_opener(opener)
req = Request(auth_url) # create a request object
handle = urlopen(req)
log.info("read = %s " % handle.read())
log.info("info = %s " % handle.info())
세 번째 부분은 이미 다른 파트너 및 웹 사이트에 대해이 설정을 사용하고 있으며 우리 제품에 대해 동일한 설정을 사용해야하는 고객의 클라이언트입니다. 더 나은 솔루션이 있다는 것을 알고 있지만 사용할 수 없습니다. 우리는 그들이 이상적이지 않더라도, 그들이 제공 한 것을 사용해야 만한다는 말은하지 않습니다. 그 말로, 내 문제를 해결하는 방법에 대한 아이디어? –
다른 파트너 중 한 사람에게 연락 할 수 있습니까? –
전자 메일을 보냈지 만 회신을받지 못했기 때문에 다른 파트너의 대부분이 Java 또는 .NET을 올바르게 사용하고 있다고 생각합니다. 따라서 도움이되는지 아닌지 잘 모르겠습니다. –